[
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\n\non:\n  push:\n    branches:\n      - main\n  pull_request:\n\njobs:\n  Package:\n    runs-on: macos-26\n\n    steps:\n    - uses: actions/checkout@v2\n\n    - name: Setting up Xcode\n      run: sudo xcode-select -s \"/Applications/Xcode_26.2.app\"\n\n    - name: Install xcbeautify\n      run: brew install xcbeautify\n\n    - name: Run tests\n      run: make test\n\n    - uses: codecov/codecov-action@v4\n      with:\n        token: ${{ secrets.CODECOV_TOKEN }}\n\n  ExampleApp:\n    runs-on: macos-26\n\n    steps:\n      - uses: actions/checkout@v2\n\n      - name: Setting up Xcode\n        run: sudo xcode-select -s \"/Applications/Xcode_26.2.app\"\n\n      - name: Install xcbeautify\n        run: brew install xcbeautify\n      \n      - name: Build\n        run: make build-example\n\n  SwiftFormat:\n    runs-on: macos-26\n\n    steps:\n      - uses: actions/checkout@v2\n\n      - name: Setting up Xcode\n        run: sudo xcode-select -s \"/Applications/Xcode_26.2.app\"\n      \n      - name: SwiftFormat\n        run: make format-lint\n"
  },
  {
    "path": ".gitignore",
    "content": "# Xcode\n#\nbuild/\n.DS_Store\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\n!default.xcworkspace\nxcuserdata\n#Breakpoints_v2.xcbkptlist\nupload_dsym_results\nxcschememanagement.plist\n*.xccheckout\nprofile\n*.moved-aside\nDerivedData\n.idea/\n*.hmap\n*.ipa\n*.xcuserstate\npackage.json\n\n# Swift Package Manager. See: https://github.com/apple/swift-package-manager/blob/main/Sources/Workspace/InitPackage.swift#L381\n\n .DS_Store\n.build\n/Packages\nxcuserdata/\nDerivedData/\n.swiftpm/configuration/registries.json\n.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata\n.netrc\n/BuildTools/\n"
  },
  {
    "path": ".swift-version",
    "content": "5.10"
  },
  {
    "path": ".swiftformat",
    "content": "# Don't format\n--exclude .build,UI/UIx/SwiftUI/Epoxy,BuildTools\n\n# Options\n\n--importgrouping testable-bottom # sortedImports\n--wraparguments before-first # wrapArguments\n--wrapparameters before-first # wrapArguments\n--funcattributes prev-line # wrapAttributes\n--typeattributes prev-line # wrapAttributes\n--beforemarks typealias,struct  # organizeDeclarations\n\n--structthreshold 70\n--classthreshold 70\n--enumthreshold 70\n\n# Disabled\n\n--disable andOperator\n--disable emptyBraces\n--disable extensionAccessControl\n--disable hoistAwait\n--disable hoistPatternLet\n--disable hoistTry\n--disable redundantType\n--disable unusedArguments\n--disable redundantReturn\n\n# Enabled\n\n--enable blankLineAfterImports\n--enable blankLinesBetweenImports\n--enable blockComments\n--enable isEmpty\n--enable organizeDeclarations\n"
  },
  {
    "path": ".swiftlint.yml",
    "content": "excluded:\n  - .build\n  - Tests/QuranTextKitTests/Mocks.swift\n\ndisabled_rules:\n  - colon\n  - for_where\n  - syntactic_sugar\n  - nesting\n  - opening_brace\n  - trailing_comma # should be useful for git\n  - multiple_closures_with_trailing_closure\n  - todo\n\nopt_in_rules:\n  #NOT NEEDED - anonymous_argument_in_multiline_closure\n  - array_init\n  #NOT NEEDED - attributes\n  #NOT NEEDED - balanced_xctest_lifecycle\n  #NOT NEEDED - closure_end_indentation\n  - closure_spacing\n  #NOT NEEDED - collection_alignment\n  #NOT NEEDED - conditional_returns_on_newline\n  - contains_over_filter_count\n  - contains_over_filter_is_empty\n  - contains_over_first_not_nil\n  - contains_over_range_nil_comparison\n  #NOT NEEDED - convenience_type\n  #NOT NEEDED - discouraged_assert\n  #NOT NEEDED - discouraged_none_name\n  - discarded_notification_center_observer\n  #NOT NEEDED - discouraged_object_literal\n  - discouraged_optional_boolean\n  #NOT NEEDED for now - discouraged_optional_collection\n  - empty_count\n  - empty_string\n  - empty_xctest_method\n  - enum_case_associated_values_count\n  #NOT NEEDED - expiring_todo\n  #NOT NEEDED - explicit_acl\n  #NOT NEEDED - explicit_enum_raw_value\n  #NOT NEEDED - explicit_self\n  #NOT NEEDED - explicit_top_level_acl\n  #NOT NEEDED - explicit_type_interface\n  - explicit_init\n  #NOT NEEDED - explicit_type_interface\n  #NOT NEEDED - extension_access_modifier\n  #NOT NEEDED - fallthrough\n  - fatal_error_message\n  #- file_header\n  #NOT NEEDED - file_name\n  - file_name_no_space\n  #NOT NEEDED - file_types_order\n  - flatmap_over_map_reduce\n  - first_where\n  # Frequently used - force_unwrapping\n  #NOT NEEDED - function_default_parameter_at_end\n  #NOT NEEDED - implicit_return\n  - ibinspectable_in_extension\n  - identical_operands\n  - implicit_return\n  - implicitly_unwrapped_optional\n  #NOT NEEDED - indentation_width\n  #NOT NEEDED - joined_default_parameter\n  - last_where\n  #NOT NEEDED - legacy_multiple\n  #NOT NEEDED - legacy_objc_type\n  - legacy_random\n  #NOT NEEDED - let_var_whitespace\n  - literal_expression_end_indentation\n  #NOT NEEDED - lower_acl_than_parent\n  #NOT NEEDED - missing_docs\n  - modifier_order\n  #NOT NEEDED - multiline_arguments\n  #NOT NEEDED - multiline_arguments_brackets\n  - multiline_function_chains\n  #NOT NEEDED - multiline_literal_brackets\n  - multiline_parameters\n  #NOT NEEDED - multiline_parameters_brackets\n  - multiple_closures_with_trailing_closure\n  - nesting\n  - nimble_operator\n  #NOT NEEDED - no_extension_access_modifier\n  #NOT NEEDED - no_grouping_extension\n  - notification_center_detachment\n  #NOT NEEDED - nslocalizedstring_key\n  #NOT NEEDED - nslocalizedstring_require_bundle\n  #NOT NEEDED - number_separator\n  - object_literal\n  #NOT NEEDED - opening_brace\n  #NOT NEEDED - operator_usage_whitespace\n  - optional_enum_case_matching\n  - overridden_super_call\n  - override_in_extension\n  - pattern_matching_keywords\n  #NOT NEEDED - prefer_nimble\n  #NOT NEEDED - prefer_self_in_static_references\n  #NOT NEEDED - prefer_self_type_over_type_of_self\n  - prefer_zero_over_explicit_init\n  #NOT NEEDED - prefixed_toplevel_constant\n  #NOT NEEDED - private_action\n  #NOT NEEDED - private_outlet\n  - private_subject\n  # // TODO: uncomment - prohibited_interface_builder\n  - prohibited_super_call\n  - quick_discouraged_call\n  - quick_discouraged_focused_test\n  - quick_discouraged_pending_test\n  #NOT NEEDED - raw_value_for_camel_cased_codable_enum\n  - reduce_into\n  - redundant_nil_coalescing\n  #NOT NEEDED - redundant_type_annotation\n  #NOT NEEDED - required_deinit\n  #NOT CONFIGURED - required_enum_case\n  - single_test_class\n  - sorted_first_last\n  - sorted_imports\n  - static_operator\n  - strict_fileprivate\n  #NOT NEEDED - strong_iboutlet\n  #NOT NEEDED - switch_case_on_newline\n  - syntactic_sugar\n  #NOT NEEDED - test_case_accessibility\n  #NOT NEEDED - toggle_bool\n  #NOT NEEDED - trailing_closure\n  #NOT NEEDED - trailing_comma\n  #NOT NEEDED - unavailable_function\n  #NOT NEEDED - unneeded_parentheses_in_closure_argument\n  - unowned_variable_capture\n  - untyped_error_in_catch\n  - vertical_parameter_alignment_on_call\n  #NOT NEEDED - vertical_whitespace_between_cases\n  #NOT NEEDED - vertical_whitespace_closing_braces\n  #NOT NEEDED - vertical_whitespace_opening_braces\n  #NOT NEEDED - xct_specific_matcher\n  #NOT NEEDED - yoda_condition\n\nanalyzer_rules: # Rules run by `swiftlint analyze` (experimental)\n  - capture_variable\n  # - explicit_self\n  - unused_declaration\n  - unused_import\n\ntype_name:\n  min_length: 2\n  max_length: 60\n\nidentifier_name:\n  min_length: 1\n  max_length: 60\n\nfile_length: 600\n\ngeneric_type_name:\n  max_length: 30\n\nline_length: 150 # Needs to configure it correctly!\n\ntype_body_length: 300\n\nfunction_parameter_count: 10\n\nfunction_body_length: 80\n\nlarge_tuple: 4\n\nobject_literal:\n  color_literal: false\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/AllTargetsTests.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"2620\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      buildArchitectures = \"Automatic\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AllTargetsTests\"\n               BuildableName = \"AllTargetsTests\"\n               BlueprintName = \"AllTargetsTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/AnnotationsService.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AnnotationsService\"\n               BuildableName = \"AnnotationsService\"\n               BlueprintName = \"AnnotationsService\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"AnnotationsService\"\n            BuildableName = \"AnnotationsService\"\n            BlueprintName = \"AnnotationsService\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/AppStructureFeature.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AppStructureFeature\"\n               BuildableName = \"AppStructureFeature\"\n               BlueprintName = \"AppStructureFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"AppStructureFeature\"\n            BuildableName = \"AppStructureFeature\"\n            BlueprintName = \"AppStructureFeature\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/BatchDownloader.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"BatchDownloader\"\n               BuildableName = \"BatchDownloader\"\n               BlueprintName = \"BatchDownloader\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"BatchDownloader\"\n            BuildableName = \"BatchDownloader\"\n            BlueprintName = \"BatchDownloader\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/BookmarksFeature.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"BookmarksFeature\"\n               BuildableName = \"BookmarksFeature\"\n               BlueprintName = \"BookmarksFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"BookmarksFeature\"\n            BuildableName = \"BookmarksFeature\"\n            BlueprintName = \"BookmarksFeature\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/Caching.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Caching\"\n               BuildableName = \"Caching\"\n               BlueprintName = \"Caching\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"Caching\"\n            BuildableName = \"Caching\"\n            BlueprintName = \"Caching\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/Crashing.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Crashing\"\n               BuildableName = \"Crashing\"\n               BlueprintName = \"Crashing\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"Crashing\"\n            BuildableName = \"Crashing\"\n            BlueprintName = \"Crashing\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/HomeFeature.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"HomeFeature\"\n               BuildableName = \"HomeFeature\"\n               BlueprintName = \"HomeFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"HomeFeature\"\n            BuildableName = \"HomeFeature\"\n            BlueprintName = \"HomeFeature\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/LastPagePersistence.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"LastPagePersistence\"\n               BuildableName = \"LastPagePersistence\"\n               BlueprintName = \"LastPagePersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"LastPagePersistence\"\n            BuildableName = \"LastPagePersistence\"\n            BlueprintName = \"LastPagePersistence\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/Localization.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Localization\"\n               BuildableName = \"Localization\"\n               BlueprintName = \"Localization\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"Localization\"\n            BuildableName = \"Localization\"\n            BlueprintName = \"Localization\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/MoreMenuFeature.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1620\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      buildArchitectures = \"Automatic\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"MoreMenuFeature\"\n               BuildableName = \"MoreMenuFeature\"\n               BlueprintName = \"MoreMenuFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"MoreMenuFeature\"\n            BuildableName = \"MoreMenuFeature\"\n            BlueprintName = \"MoreMenuFeature\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/NetworkSupport.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1620\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      buildArchitectures = \"Automatic\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"NetworkSupport\"\n               BuildableName = \"NetworkSupport\"\n               BlueprintName = \"NetworkSupport\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"NetworkSupport\"\n            BuildableName = \"NetworkSupport\"\n            BlueprintName = \"NetworkSupport\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/NoorUI.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"NoorUI\"\n               BuildableName = \"NoorUI\"\n               BlueprintName = \"NoorUI\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"NoorUI\"\n            BuildableName = \"NoorUI\"\n            BlueprintName = \"NoorUI\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/NotePersistence.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"NotePersistence\"\n               BuildableName = \"NotePersistence\"\n               BlueprintName = \"NotePersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"NotePersistence\"\n            BuildableName = \"NotePersistence\"\n            BlueprintName = \"NotePersistence\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/NotesFeature.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"NotesFeature\"\n               BuildableName = \"NotesFeature\"\n               BlueprintName = \"NotesFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"NotesFeature\"\n            BuildableName = \"NotesFeature\"\n            BlueprintName = \"NotesFeature\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/OAuthServiceAppAuthImpl.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"2610\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      buildArchitectures = \"Automatic\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"OAuthServiceAppAuthImpl\"\n               BuildableName = \"OAuthServiceAppAuthImpl\"\n               BlueprintName = \"OAuthServiceAppAuthImpl\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"OAuthServiceAppAuthImpl\"\n            BuildableName = \"OAuthServiceAppAuthImpl\"\n            BlueprintName = \"OAuthServiceAppAuthImpl\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/PageBookmarkPersistence.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"PageBookmarkPersistence\"\n               BuildableName = \"PageBookmarkPersistence\"\n               BlueprintName = \"PageBookmarkPersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"PageBookmarkPersistence\"\n            BuildableName = \"PageBookmarkPersistence\"\n            BlueprintName = \"PageBookmarkPersistence\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/Preferences.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Preferences\"\n               BuildableName = \"Preferences\"\n               BlueprintName = \"Preferences\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"Preferences\"\n            BuildableName = \"Preferences\"\n            BlueprintName = \"Preferences\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/QuranAudioKit.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranAudioKit\"\n               BuildableName = \"QuranAudioKit\"\n               BlueprintName = \"QuranAudioKit\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"QuranAudioKit\"\n            BuildableName = \"QuranAudioKit\"\n            BlueprintName = \"QuranAudioKit\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/QuranEngine-Package.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranEngine_TestResources\"\n               BuildableName = \"QuranEngine_TestResources\"\n               BlueprintName = \"QuranEngine_TestResources\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranEngine_Localization\"\n               BuildableName = \"QuranEngine_Localization\"\n               BlueprintName = \"QuranEngine_Localization\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranEngine_CoreDataModel\"\n               BuildableName = \"QuranEngine_CoreDataModel\"\n               BlueprintName = \"QuranEngine_CoreDataModel\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"BatchDownloader\"\n               BuildableName = \"BatchDownloader\"\n               BlueprintName = \"BatchDownloader\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Caching\"\n               BuildableName = \"Caching\"\n               BlueprintName = \"Caching\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Crashing\"\n               BuildableName = \"Crashing\"\n               BlueprintName = \"Crashing\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"LastPagePersistence\"\n               BuildableName = \"LastPagePersistence\"\n               BlueprintName = \"LastPagePersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Localization\"\n               BuildableName = \"Localization\"\n               BlueprintName = \"Localization\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"NotePersistence\"\n               BuildableName = \"NotePersistence\"\n               BlueprintName = \"NotePersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"PageBookmarkPersistence\"\n               BuildableName = \"PageBookmarkPersistence\"\n               BlueprintName = \"PageBookmarkPersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Preferences\"\n               BuildableName = \"Preferences\"\n               BlueprintName = \"Preferences\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranAudioKit\"\n               BuildableName = \"QuranAudioKit\"\n               BlueprintName = \"QuranAudioKit\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranKit\"\n               BuildableName = \"QuranKit\"\n               BlueprintName = \"QuranKit\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranTextKit\"\n               BuildableName = \"QuranTextKit\"\n               BlueprintName = \"QuranTextKit\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SystemDependencies\"\n               BuildableName = \"SystemDependencies\"\n               BlueprintName = \"SystemDependencies\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SystemDependenciesFake\"\n               BuildableName = \"SystemDependenciesFake\"\n               BlueprintName = \"SystemDependenciesFake\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Timing\"\n               BuildableName = \"Timing\"\n               BlueprintName = \"Timing\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"TranslationService\"\n               BuildableName = \"TranslationService\"\n               BlueprintName = \"TranslationService\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Utilities\"\n               BuildableName = \"Utilities\"\n               BlueprintName = \"Utilities\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"VLogging\"\n               BuildableName = \"VLogging\"\n               BlueprintName = \"VLogging\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AsyncUtilitiesForTesting\"\n               BuildableName = \"AsyncUtilitiesForTesting\"\n               BlueprintName = \"AsyncUtilitiesForTesting\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"BatchDownloaderFake\"\n               BuildableName = \"BatchDownloaderFake\"\n               BlueprintName = \"BatchDownloaderFake\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"CoreDataModel\"\n               BuildableName = \"CoreDataModel\"\n               BlueprintName = \"CoreDataModel\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"CoreDataPersistence\"\n               BuildableName = \"CoreDataPersistence\"\n               BlueprintName = \"CoreDataPersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"CoreDataPersistenceTestSupport\"\n               BuildableName = \"CoreDataPersistenceTestSupport\"\n               BlueprintName = \"CoreDataPersistenceTestSupport\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Locking\"\n               BuildableName = \"Locking\"\n               BlueprintName = \"Locking\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"NetworkSupport\"\n               BuildableName = \"NetworkSupport\"\n               BlueprintName = \"NetworkSupport\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"NetworkSupportFake\"\n               BuildableName = \"NetworkSupportFake\"\n               BlueprintName = \"NetworkSupportFake\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QueuePlayer\"\n               BuildableName = \"QueuePlayer\"\n               BlueprintName = \"QueuePlayer\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QueuePlayerObjc\"\n               BuildableName = \"QueuePlayerObjc\"\n               BlueprintName = \"QueuePlayerObjc\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SQLitePersistence\"\n               BuildableName = \"SQLitePersistence\"\n               BlueprintName = \"SQLitePersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"TestResources\"\n               BuildableName = \"TestResources\"\n               BlueprintName = \"TestResources\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"TranslationServiceFake\"\n               BuildableName = \"TranslationServiceFake\"\n               BlueprintName = \"TranslationServiceFake\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"WeakSet\"\n               BuildableName = \"WeakSet\"\n               BlueprintName = \"WeakSet\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"BatchDownloaderTests\"\n               BuildableName = \"BatchDownloaderTests\"\n               BlueprintName = \"BatchDownloaderTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"CachingTests\"\n               BuildableName = \"CachingTests\"\n               BlueprintName = \"CachingTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"CoreDataPersistenceTests\"\n               BuildableName = \"CoreDataPersistenceTests\"\n               BlueprintName = \"CoreDataPersistenceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"LastPagePersistenceTests\"\n               BuildableName = \"LastPagePersistenceTests\"\n               BlueprintName = \"LastPagePersistenceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"NetworkSupportTests\"\n               BuildableName = \"NetworkSupportTests\"\n               BlueprintName = \"NetworkSupportTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"NotePersistenceTests\"\n               BuildableName = \"NotePersistenceTests\"\n               BlueprintName = \"NotePersistenceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"PageBookmarkPersistenceTests\"\n               BuildableName = \"PageBookmarkPersistenceTests\"\n               BlueprintName = \"PageBookmarkPersistenceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranAudioKitTests\"\n               BuildableName = \"QuranAudioKitTests\"\n               BlueprintName = \"QuranAudioKitTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranKitTests\"\n               BuildableName = \"QuranKitTests\"\n               BlueprintName = \"QuranKitTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranTextKitTests\"\n               BuildableName = \"QuranTextKitTests\"\n               BlueprintName = \"QuranTextKitTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SQLitePersistenceTests\"\n               BuildableName = \"SQLitePersistenceTests\"\n               BlueprintName = \"SQLitePersistenceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"TranslationServiceTests\"\n               BuildableName = \"TranslationServiceTests\"\n               BlueprintName = \"TranslationServiceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"UtilitiesTests\"\n               BuildableName = \"UtilitiesTests\"\n               BlueprintName = \"UtilitiesTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AudioUpdater\"\n               BuildableName = \"AudioUpdater\"\n               BlueprintName = \"AudioUpdater\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"ReciterService\"\n               BuildableName = \"ReciterService\"\n               BlueprintName = \"ReciterService\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"ReciterServiceFake\"\n               BuildableName = \"ReciterServiceFake\"\n               BlueprintName = \"ReciterServiceFake\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"ReadingService\"\n               BuildableName = \"ReadingService\"\n               BlueprintName = \"ReadingService\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"WordFramePersistence\"\n               BuildableName = \"WordFramePersistence\"\n               BlueprintName = \"WordFramePersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"WordFrameService\"\n               BuildableName = \"WordFrameService\"\n               BlueprintName = \"WordFrameService\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"WordTextPersistence\"\n               BuildableName = \"WordTextPersistence\"\n               BlueprintName = \"WordTextPersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"WordTextService\"\n               BuildableName = \"WordTextService\"\n               BlueprintName = \"WordTextService\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"ImageService\"\n               BuildableName = \"ImageService\"\n               BlueprintName = \"ImageService\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranGeometry\"\n               BuildableName = \"QuranGeometry\"\n               BlueprintName = \"QuranGeometry\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AudioTimingPersistence\"\n               BuildableName = \"AudioTimingPersistence\"\n               BlueprintName = \"AudioTimingPersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AudioTimingService\"\n               BuildableName = \"AudioTimingService\"\n               BlueprintName = \"AudioTimingService\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranAudio\"\n               BuildableName = \"QuranAudio\"\n               BlueprintName = \"QuranAudio\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranText\"\n               BuildableName = \"QuranText\"\n               BlueprintName = \"QuranText\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"VerseTextPersistence\"\n               BuildableName = \"VerseTextPersistence\"\n               BlueprintName = \"VerseTextPersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"TranslationPersistence\"\n               BuildableName = \"TranslationPersistence\"\n               BlueprintName = \"TranslationPersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranAnnotations\"\n               BuildableName = \"QuranAnnotations\"\n               BlueprintName = \"QuranAnnotations\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AnnotationsService\"\n               BuildableName = \"AnnotationsService\"\n               BlueprintName = \"AnnotationsService\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Analytics\"\n               BuildableName = \"Analytics\"\n               BlueprintName = \"Analytics\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"UIx\"\n               BuildableName = \"UIx\"\n               BlueprintName = \"UIx\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"ViewConstrainer\"\n               BuildableName = \"ViewConstrainer\"\n               BlueprintName = \"ViewConstrainer\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranEngine_NoorUI\"\n               BuildableName = \"QuranEngine_NoorUI\"\n               BlueprintName = \"QuranEngine_NoorUI\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"NoorUI\"\n               BuildableName = \"NoorUI\"\n               BlueprintName = \"NoorUI\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AppDependencies\"\n               BuildableName = \"AppDependencies\"\n               BlueprintName = \"AppDependencies\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranEngine_ReciterListFeature\"\n               BuildableName = \"QuranEngine_ReciterListFeature\"\n               BlueprintName = \"QuranEngine_ReciterListFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AyahMenuFeature\"\n               BuildableName = \"AyahMenuFeature\"\n               BlueprintName = \"AyahMenuFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"ReciterListFeature\"\n               BuildableName = \"ReciterListFeature\"\n               BlueprintName = \"ReciterListFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"WhatsNewFeature\"\n               BuildableName = \"WhatsNewFeature\"\n               BlueprintName = \"WhatsNewFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"WordPointerFeature\"\n               BuildableName = \"WordPointerFeature\"\n               BlueprintName = \"WordPointerFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AppMigrator\"\n               BuildableName = \"AppMigrator\"\n               BlueprintName = \"AppMigrator\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranEngine_AppMigrationFeature\"\n               BuildableName = \"QuranEngine_AppMigrationFeature\"\n               BlueprintName = \"QuranEngine_AppMigrationFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AppMigrationFeature\"\n               BuildableName = \"AppMigrationFeature\"\n               BlueprintName = \"AppMigrationFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AdvancedAudioOptionsFeature\"\n               BuildableName = \"AdvancedAudioOptionsFeature\"\n               BlueprintName = \"AdvancedAudioOptionsFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranEngine_AudioBannerFeature\"\n               BuildableName = \"QuranEngine_AudioBannerFeature\"\n               BlueprintName = \"QuranEngine_AudioBannerFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AudioBannerFeature\"\n               BuildableName = \"AudioBannerFeature\"\n               BlueprintName = \"AudioBannerFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranEngine_AudioDownloadsFeature\"\n               BuildableName = \"QuranEngine_AudioDownloadsFeature\"\n               BlueprintName = \"QuranEngine_AudioDownloadsFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AudioDownloadsFeature\"\n               BuildableName = \"AudioDownloadsFeature\"\n               BlueprintName = \"AudioDownloadsFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"MoreMenuFeature\"\n               BuildableName = \"MoreMenuFeature\"\n               BlueprintName = \"MoreMenuFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"NoteEditorFeature\"\n               BuildableName = \"NoteEditorFeature\"\n               BlueprintName = \"NoteEditorFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"BookmarksFeature\"\n               BuildableName = \"BookmarksFeature\"\n               BlueprintName = \"BookmarksFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"FeaturesSupport\"\n               BuildableName = \"FeaturesSupport\"\n               BlueprintName = \"FeaturesSupport\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranPagesFeature\"\n               BuildableName = \"QuranPagesFeature\"\n               BlueprintName = \"QuranPagesFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranImageFeature\"\n               BuildableName = \"QuranImageFeature\"\n               BlueprintName = \"QuranImageFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"ReadingSelectorFeature\"\n               BuildableName = \"ReadingSelectorFeature\"\n               BlueprintName = \"ReadingSelectorFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranTranslationFeature\"\n               BuildableName = \"QuranTranslationFeature\"\n               BlueprintName = \"QuranTranslationFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranContentFeature\"\n               BuildableName = \"QuranContentFeature\"\n               BlueprintName = \"QuranContentFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"TranslationsFeature\"\n               BuildableName = \"TranslationsFeature\"\n               BlueprintName = \"TranslationsFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"NotesFeature\"\n               BuildableName = \"NotesFeature\"\n               BlueprintName = \"NotesFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"TranslationVerseFeature\"\n               BuildableName = \"TranslationVerseFeature\"\n               BlueprintName = \"TranslationVerseFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranEngine_SearchFeature\"\n               BuildableName = \"QuranEngine_SearchFeature\"\n               BlueprintName = \"QuranEngine_SearchFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SearchFeature\"\n               BuildableName = \"SearchFeature\"\n               BlueprintName = \"SearchFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"HomeFeature\"\n               BuildableName = \"HomeFeature\"\n               BlueprintName = \"HomeFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranViewFeature\"\n               BuildableName = \"QuranViewFeature\"\n               BlueprintName = \"QuranViewFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SettingsFeature\"\n               BuildableName = \"SettingsFeature\"\n               BlueprintName = \"SettingsFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SettingsService\"\n               BuildableName = \"SettingsService\"\n               BlueprintName = \"SettingsService\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AppStructureFeature\"\n               BuildableName = \"AppStructureFeature\"\n               BlueprintName = \"AppStructureFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranEngine_NoorFont\"\n               BuildableName = \"QuranEngine_NoorFont\"\n               BlueprintName = \"QuranEngine_NoorFont\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"NoorFont\"\n               BuildableName = \"NoorFont\"\n               BlueprintName = \"NoorFont\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranEngine_TranslationsFeature\"\n               BuildableName = \"QuranEngine_TranslationsFeature\"\n               BlueprintName = \"QuranEngine_TranslationsFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranEngine_QuranResources\"\n               BuildableName = \"QuranEngine_QuranResources\"\n               BlueprintName = \"QuranEngine_QuranResources\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranResources\"\n               BuildableName = \"QuranResources\"\n               BlueprintName = \"QuranResources\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AuthenticationClient\"\n               BuildableName = \"AuthenticationClient\"\n               BlueprintName = \"AuthenticationClient\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"OAuthService\"\n               BuildableName = \"OAuthService\"\n               BlueprintName = \"OAuthService\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"OAuthServiceAppAuthImpl\"\n               BuildableName = \"OAuthServiceAppAuthImpl\"\n               BlueprintName = \"OAuthServiceAppAuthImpl\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"OAuthServiceFake\"\n               BuildableName = \"OAuthServiceFake\"\n               BlueprintName = \"OAuthServiceFake\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranProfileService\"\n               BuildableName = \"QuranProfileService\"\n               BlueprintName = \"QuranProfileService\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SecurePersistence\"\n               BuildableName = \"SecurePersistence\"\n               BlueprintName = \"SecurePersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SyncedPageBookmarkPersistence\"\n               BuildableName = \"SyncedPageBookmarkPersistence\"\n               BlueprintName = \"SyncedPageBookmarkPersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <TestPlans>\n         <TestPlanReference\n            reference = \"container:QuranEngine-Package.xctestplan\"\n            default = \"YES\">\n         </TestPlanReference>\n      </TestPlans>\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"BatchDownloaderTests\"\n               BuildableName = \"BatchDownloaderTests\"\n               BlueprintName = \"BatchDownloaderTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"CachingTests\"\n               BuildableName = \"CachingTests\"\n               BlueprintName = \"CachingTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"CoreDataPersistenceTests\"\n               BuildableName = \"CoreDataPersistenceTests\"\n               BlueprintName = \"CoreDataPersistenceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"LastPagePersistenceTests\"\n               BuildableName = \"LastPagePersistenceTests\"\n               BlueprintName = \"LastPagePersistenceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"NetworkSupportTests\"\n               BuildableName = \"NetworkSupportTests\"\n               BlueprintName = \"NetworkSupportTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"NotePersistenceTests\"\n               BuildableName = \"NotePersistenceTests\"\n               BlueprintName = \"NotePersistenceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"PageBookmarkPersistenceTests\"\n               BuildableName = \"PageBookmarkPersistenceTests\"\n               BlueprintName = \"PageBookmarkPersistenceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranAudioKitTests\"\n               BuildableName = \"QuranAudioKitTests\"\n               BlueprintName = \"QuranAudioKitTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranKitTests\"\n               BuildableName = \"QuranKitTests\"\n               BlueprintName = \"QuranKitTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranTextKitTests\"\n               BuildableName = \"QuranTextKitTests\"\n               BlueprintName = \"QuranTextKitTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SQLitePersistenceTests\"\n               BuildableName = \"SQLitePersistenceTests\"\n               BlueprintName = \"SQLitePersistenceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"TranslationServiceTests\"\n               BuildableName = \"TranslationServiceTests\"\n               BlueprintName = \"TranslationServiceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"UtilitiesTests\"\n               BuildableName = \"UtilitiesTests\"\n               BlueprintName = \"UtilitiesTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"ReciterServiceTests\"\n               BuildableName = \"ReciterServiceTests\"\n               BlueprintName = \"ReciterServiceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"ReadingServiceTests\"\n               BuildableName = \"ReadingServiceTests\"\n               BlueprintName = \"ReadingServiceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"WordTextServiceTests\"\n               BuildableName = \"WordTextServiceTests\"\n               BlueprintName = \"WordTextServiceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"ImageServiceTests\"\n               BuildableName = \"ImageServiceTests\"\n               BlueprintName = \"ImageServiceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AnnotationsServiceTests\"\n               BuildableName = \"AnnotationsServiceTests\"\n               BlueprintName = \"AnnotationsServiceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AllTargetsTests\"\n               BuildableName = \"AllTargetsTests\"\n               BlueprintName = \"AllTargetsTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AppMigratorTests\"\n               BuildableName = \"AppMigratorTests\"\n               BlueprintName = \"AppMigratorTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"AuthenticationClientTests\"\n               BuildableName = \"AuthenticationClientTests\"\n               BlueprintName = \"AuthenticationClientTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SyncedPageBookmarkPersistenceTests\"\n               BuildableName = \"SyncedPageBookmarkPersistenceTests\"\n               BlueprintName = \"SyncedPageBookmarkPersistenceTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"QuranEngine_TestResources\"\n            BuildableName = \"QuranEngine_TestResources\"\n            BlueprintName = \"QuranEngine_TestResources\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/QuranImageFeature.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranImageFeature\"\n               BuildableName = \"QuranImageFeature\"\n               BlueprintName = \"QuranImageFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"QuranImageFeature\"\n            BuildableName = \"QuranImageFeature\"\n            BlueprintName = \"QuranImageFeature\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/QuranKit.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranKit\"\n               BuildableName = \"QuranKit\"\n               BlueprintName = \"QuranKit\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"QuranKit\"\n            BuildableName = \"QuranKit\"\n            BlueprintName = \"QuranKit\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/QuranPagesFeature.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranPagesFeature\"\n               BuildableName = \"QuranPagesFeature\"\n               BlueprintName = \"QuranPagesFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"QuranPagesFeature\"\n            BuildableName = \"QuranPagesFeature\"\n            BlueprintName = \"QuranPagesFeature\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/QuranTextKit.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranTextKit\"\n               BuildableName = \"QuranTextKit\"\n               BlueprintName = \"QuranTextKit\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"QuranTextKit\"\n            BuildableName = \"QuranTextKit\"\n            BlueprintName = \"QuranTextKit\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/QuranTextKitTests.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranTextKitTests\"\n               BuildableName = \"QuranTextKitTests\"\n               BlueprintName = \"QuranTextKitTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/QuranTranslationFeature.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"QuranTranslationFeature\"\n               BuildableName = \"QuranTranslationFeature\"\n               BlueprintName = \"QuranTranslationFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"QuranTranslationFeature\"\n            BuildableName = \"QuranTranslationFeature\"\n            BlueprintName = \"QuranTranslationFeature\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/ReadingSelectorFeature.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"ReadingSelectorFeature\"\n               BuildableName = \"ReadingSelectorFeature\"\n               BlueprintName = \"ReadingSelectorFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"ReadingSelectorFeature\"\n            BuildableName = \"ReadingSelectorFeature\"\n            BlueprintName = \"ReadingSelectorFeature\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/ReadingService.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"ReadingService\"\n               BuildableName = \"ReadingService\"\n               BlueprintName = \"ReadingService\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"ReadingService\"\n            BuildableName = \"ReadingService\"\n            BlueprintName = \"ReadingService\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/ReciterListFeature.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"ReciterListFeature\"\n               BuildableName = \"ReciterListFeature\"\n               BlueprintName = \"ReciterListFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"ReciterListFeature\"\n            BuildableName = \"ReciterListFeature\"\n            BlueprintName = \"ReciterListFeature\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/SQLitePersistence.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1620\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\"\n      buildArchitectures = \"Automatic\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SQLitePersistence\"\n               BuildableName = \"SQLitePersistence\"\n               BlueprintName = \"SQLitePersistence\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"SQLitePersistence\"\n            BuildableName = \"SQLitePersistence\"\n            BlueprintName = \"SQLitePersistence\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/SearchFeature.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SearchFeature\"\n               BuildableName = \"SearchFeature\"\n               BlueprintName = \"SearchFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"SearchFeature\"\n            BuildableName = \"SearchFeature\"\n            BlueprintName = \"SearchFeature\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/SettingsFeature.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SettingsFeature\"\n               BuildableName = \"SettingsFeature\"\n               BlueprintName = \"SettingsFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"SettingsFeature\"\n            BuildableName = \"SettingsFeature\"\n            BlueprintName = \"SettingsFeature\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/SystemDependencies.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SystemDependencies\"\n               BuildableName = \"SystemDependencies\"\n               BlueprintName = \"SystemDependencies\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"SystemDependencies\"\n            BuildableName = \"SystemDependencies\"\n            BlueprintName = \"SystemDependencies\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/SystemDependenciesFake.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"SystemDependenciesFake\"\n               BuildableName = \"SystemDependenciesFake\"\n               BlueprintName = \"SystemDependenciesFake\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"SystemDependenciesFake\"\n            BuildableName = \"SystemDependenciesFake\"\n            BlueprintName = \"SystemDependenciesFake\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/Timing.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Timing\"\n               BuildableName = \"Timing\"\n               BlueprintName = \"Timing\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"Timing\"\n            BuildableName = \"Timing\"\n            BlueprintName = \"Timing\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/TranslationService.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"TranslationService\"\n               BuildableName = \"TranslationService\"\n               BlueprintName = \"TranslationService\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"TranslationService\"\n            BuildableName = \"TranslationService\"\n            BlueprintName = \"TranslationService\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/TranslationsFeature.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"TranslationsFeature\"\n               BuildableName = \"TranslationsFeature\"\n               BlueprintName = \"TranslationsFeature\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"TranslationsFeature\"\n            BuildableName = \"TranslationsFeature\"\n            BlueprintName = \"TranslationsFeature\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/UIx.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"UIx\"\n               BuildableName = \"UIx\"\n               BlueprintName = \"UIx\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"UIx\"\n            BuildableName = \"UIx\"\n            BlueprintName = \"UIx\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/Utilities.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"Utilities\"\n               BuildableName = \"Utilities\"\n               BlueprintName = \"Utilities\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"Utilities\"\n            BuildableName = \"Utilities\"\n            BlueprintName = \"Utilities\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/UtilitiesTests.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"UtilitiesTests\"\n               BuildableName = \"UtilitiesTests\"\n               BlueprintName = \"UtilitiesTests\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/VLogging.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"VLogging\"\n               BuildableName = \"VLogging\"\n               BlueprintName = \"VLogging\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"VLogging\"\n            BuildableName = \"VLogging\"\n            BlueprintName = \"VLogging\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": ".swiftpm/xcode/xcshareddata/xcschemes/VersionUpdater.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"VersionUpdater\"\n               BuildableName = \"VersionUpdater\"\n               BlueprintName = \"VersionUpdater\"\n               ReferencedContainer = \"container:\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"VersionUpdater\"\n            BuildableName = \"VersionUpdater\"\n            BlueprintName = \"VersionUpdater\"\n            ReferencedContainer = \"container:\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "AllTargetsTests/Empty.swift",
    "content": "//\n//  Empty.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-17.\n//\n\nimport XCTest\n\n/// Empty test class to help ensure we have at least one test case.\n///\n/// AllTargetsTests is a test target to link all other targets to ensure we produce coverage info for all code.\nfinal class Empty: XCTestCase {\n    func testEmpty() throws {\n    }\n}\n"
  },
  {
    "path": "Core/Analytics/AnalyticsLibrary.swift",
    "content": "//\n//  AnalyticsLibrary.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-12.\n//\n\npublic protocol AnalyticsLibrary: Sendable {\n    func logEvent(_ name: String, value: String)\n}\n"
  },
  {
    "path": "Core/AppMigrator/Sources/AppMigrator.swift",
    "content": "//\n//  AppMigrator.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 9/10/18.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2018  Quran.com\n//\n\nimport Foundation\nimport SystemDependencies\nimport VLogging\n\npublic protocol Migrator {\n    var blocksUI: Bool { get }\n    var uiTitle: String? { get }\n\n    func execute(update: LaunchVersionUpdate) async\n}\n\npublic enum MigrationStatus: Equatable {\n    case noMigration\n    case migrate(blocksUI: Bool, titles: Set<String>)\n}\n\npublic final class AppMigrator {\n    // MARK: Lifecycle\n\n    public convenience init() {\n        self.init(bundle: DefaultSystemBundle())\n    }\n\n    public init(bundle: SystemBundle) {\n        updater = AppVersionUpdater(bundle: bundle)\n    }\n\n    // MARK: Public\n\n    public var launchVersion: LaunchVersionUpdate { updater.launchVersion() }\n\n    public func register(migrator: Migrator, for version: AppVersion) {\n        migrators.append((version, migrator))\n    }\n\n    public func migrationStatus() -> MigrationStatus {\n        let updaters = versionUpdaters()\n        if updaters.isEmpty {\n            updater.commitUpdates()\n            return .noMigration\n        } else {\n            let blocksUI = updaters.contains { $0.blocksUI }\n            let titles = Set(updaters.compactMap(\\.uiTitle))\n            return .migrate(blocksUI: blocksUI, titles: titles)\n        }\n    }\n\n    public func migrate() async {\n        let launchVersion = updater.launchVersion()\n        logger.notice(\"Version Update: \\(launchVersion)\")\n\n        await withTaskGroup(of: Void.self) { taskGroup in\n            let updaters = versionUpdaters()\n            for updater in updaters {\n                taskGroup.addTask {\n                    await updater.execute(update: launchVersion)\n                }\n            }\n        }\n        updater.commitUpdates()\n    }\n\n    // MARK: Private\n\n    private var migrators: [(AppVersion, Migrator)] = []\n    private let updater: AppVersionUpdater\n\n    private func versionUpdaters() -> [Migrator] {\n        switch launchVersion {\n        case .update(let old, _), .firstLaunch(version: let old), .sameVersion(version: let old):\n            return updaters(for: old)\n        }\n    }\n\n    private func updaters(for version: String) -> [Migrator] {\n        migrators // Returns updaters where: oldVersion < updaters.version.\n            .filter { version.compare($0.0, options: .numeric) == .orderedAscending }\n            .map { $1 }\n    }\n}\n"
  },
  {
    "path": "Core/AppMigrator/Sources/AppVersionUpdater.swift",
    "content": "//\n//  AppVersionUpdater.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/2/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Preferences\nimport SystemDependencies\n\npublic typealias AppVersion = String\n\npublic enum LaunchVersionUpdate {\n    case sameVersion(version: AppVersion)\n    case firstLaunch(version: AppVersion)\n    case update(from: AppVersion, to: AppVersion)\n}\n\nstruct AppVersionPreferences {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Internal\n\n    static let shared = AppVersionPreferences()\n\n    @Preference(appVersion)\n    var appVersion: String?\n\n    static func reset() {\n        Preferences.shared.removeValueForKey(appVersion)\n    }\n\n    // MARK: Private\n\n    private static let appVersion = PreferenceKey<String?>(key: \"appVersion\", defaultValue: nil)\n}\n\nstruct AppVersionUpdater {\n    // MARK: Lifecycle\n\n    init(bundle: SystemBundle) {\n        self.bundle = bundle\n    }\n\n    // MARK: Internal\n\n    func launchVersion() -> LaunchVersionUpdate {\n        let current = current\n        let previous = preferences.appVersion\n\n        if let previous {\n            if previous == current {\n                return .sameVersion(version: current)\n            } else {\n                return .update(from: previous, to: current)\n            }\n        } else {\n            return .firstLaunch(version: current)\n        }\n    }\n\n    /// eventually we should update the app version\n    func commitUpdates() {\n        preferences.appVersion = current\n    }\n\n    // MARK: Private\n\n    private let bundle: SystemBundle\n    private let preferences = AppVersionPreferences.shared\n\n    private var current: String {\n        guard let version = bundle.infoValue(forKey: \"CFBundleShortVersionString\") as? String else {\n            fatalError(\"CFBundleShortVersionString should be set in your main bundle.\")\n        }\n        return version\n    }\n}\n"
  },
  {
    "path": "Core/AppMigrator/Tests/AppMigratorTests.swift",
    "content": "//\n//  AppMigratorTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-17.\n//\n\nimport SystemDependenciesFake\nimport XCTest\n@testable import AppMigrator\n\nfinal class AppMigratorTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUp() async throws {\n        try await super.setUp()\n        bundle = SystemBundleFake()\n        service = AppMigrator(bundle: bundle)\n\n        worker1 = MigratorTester(blocksUI: true, uiTitle: \"Worker 1\")\n        worker2 = MigratorTester(blocksUI: true, uiTitle: \"Worker 2\")\n        nonBlockingWorker = MigratorTester(blocksUI: false, uiTitle: nil)\n\n        service.register(migrator: worker1, for: \"1.16.0\")\n        service.register(migrator: worker2, for: \"1.17.0\")\n        service.register(migrator: nonBlockingWorker, for: \"1.18.0\")\n\n        bundle.info[\"CFBundleShortVersionString\"] = \"1.18.0\"\n    }\n\n    override func tearDown() async throws {\n        try await super.tearDown()\n        AppVersionPreferences.reset()\n    }\n\n    func test_futureNewInstallation() async {\n        await verifyNoMigration()\n    }\n\n    func test_currentNewInstallation() async {\n        bundle.info[\"CFBundleShortVersionString\"] = \"1.18.0\"\n\n        await verifyNoMigration()\n    }\n\n    func test_sameVersion() async {\n        preferences.appVersion = \"1.18.0\"\n        bundle.info[\"CFBundleShortVersionString\"] = preferences.appVersion\n\n        await verifyNoMigration()\n    }\n\n    func test_upgrade_noUpdater() async {\n        preferences.appVersion = \"1.18.0\"\n        bundle.info[\"CFBundleShortVersionString\"] = \"1.19.0\"\n\n        await verifyNoMigration()\n    }\n\n    func test_upgrade_runLastUpdater() async {\n        preferences.appVersion = \"1.17.0\"\n\n        let status = service.migrationStatus()\n        XCTAssertEqual(status, .migrate(blocksUI: false, titles: []))\n\n        await service.migrate()\n\n        XCTAssertNil(worker1.update)\n        XCTAssertNil(worker2.update)\n        XCTAssertNotNil(nonBlockingWorker.update)\n    }\n\n    func test_upgrade_runLastTwoUpdaters() async {\n        preferences.appVersion = \"1.16.0\"\n\n        let status = service.migrationStatus()\n        XCTAssertEqual(status, .migrate(blocksUI: true, titles: [\"Worker 2\"]))\n\n        await service.migrate()\n\n        XCTAssertNil(worker1.update)\n        XCTAssertNotNil(worker2.update)\n        XCTAssertNotNil(nonBlockingWorker.update)\n    }\n\n    func test_upgrade_runAllUpdaters() async {\n        preferences.appVersion = \"1.15.0\"\n\n        let status = service.migrationStatus()\n        XCTAssertEqual(status, .migrate(blocksUI: true, titles: [\"Worker 1\", \"Worker 2\"]))\n\n        await service.migrate()\n\n        XCTAssertNotNil(worker1.update)\n        XCTAssertNotNil(worker2.update)\n        XCTAssertNotNil(nonBlockingWorker.update)\n    }\n\n    // MARK: Private\n\n    private var service: AppMigrator!\n    private let preferences = AppVersionPreferences.shared\n    private var bundle: SystemBundleFake!\n\n    private var worker1: MigratorTester!\n    private var worker2: MigratorTester!\n    private var nonBlockingWorker: MigratorTester!\n\n    // MARK: - Helpers\n\n    private func verifyNoMigration(file: StaticString = #filePath, line: UInt = #line) async {\n        let status = service.migrationStatus()\n        XCTAssertEqual(status, .noMigration)\n\n        await service.migrate()\n\n        XCTAssertNil(worker1.update, file: file, line: line)\n        XCTAssertNil(worker2.update, file: file, line: line)\n        XCTAssertNil(nonBlockingWorker.update, file: file, line: line)\n    }\n}\n\nprivate final class MigratorTester: Migrator {\n    // MARK: Lifecycle\n\n    init(blocksUI: Bool, uiTitle: String?) {\n        self.blocksUI = blocksUI\n        self.uiTitle = uiTitle\n    }\n\n    // MARK: Internal\n\n    let blocksUI: Bool\n    let uiTitle: String?\n\n    var update: LaunchVersionUpdate?\n\n    func execute(update: LaunchVersionUpdate) async {\n        self.update = update\n    }\n}\n"
  },
  {
    "path": "Core/AsyncUtilitiesForTesting/AsyncAlgorithms++.swift",
    "content": "//\n//  AsyncAlgorithms++.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-28.\n//\n\nimport AsyncAlgorithms\n\nextension AsyncChannel {\n    public func next() async -> Element? {\n        var iterator = makeAsyncIterator()\n        return await iterator.next()\n    }\n}\n\nextension AsyncChannel where Element == Void {\n    public func send() async {\n        await send(())\n    }\n}\n"
  },
  {
    "path": "Core/AsyncUtilitiesForTesting/AsyncAsserts.swift",
    "content": "//\n//  AsyncAsserts.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-03.\n//\n\nimport Foundation\nimport XCTest\n\n// Credits to @pointfreeco\n// https://github.com/pointfreeco/combine-schedulers\nextension Task where Success == Failure, Failure == Never {\n    public static func megaYield(count: Int = 10) async {\n        for _ in 1 ... count {\n            await Task<Void, Never>.detached(priority: .background) { await Task.yield() }.value\n        }\n    }\n}\n\npublic func AsyncAssertEqual<T>(\n    _ expression1: @autoclosure () async throws -> T,\n    _ expression2: @autoclosure () async throws -> T,\n    _ message: @autoclosure () -> String = \"\",\n    file: StaticString = #filePath,\n    line: UInt = #line\n) async rethrows where T: Equatable {\n    let e1 = try await expression1()\n    let e2 = try await expression2()\n    XCTAssertEqual(e1, e2, message(), file: file, line: line)\n}\n\npublic func AsyncAssertThrows(\n    _ expression: @autoclosure () async throws -> Void,\n    _ expectedError: NSError?,\n    _ message: @autoclosure () -> String = \"Didn't throw\",\n    file: StaticString = #filePath,\n    line: UInt = #line\n) async {\n    do {\n        try await expression()\n        XCTFail(message(), file: file, line: line)\n    } catch {\n        if let expectedError {\n            XCTAssertEqual(error as NSError?, expectedError, message(), file: file, line: line)\n        }\n    }\n}\n\npublic func AsyncUnwrap<T>(\n    _ expression: @autoclosure () async throws -> T?,\n    _ message: @autoclosure () -> String = \"\",\n    file: StaticString = #filePath,\n    line: UInt = #line\n) async throws -> T {\n    let value = try await expression()\n    return try XCTUnwrap(value, message(), file: file, line: line)\n}\n"
  },
  {
    "path": "Core/AsyncUtilitiesForTesting/PublisherCollector.swift",
    "content": "//\n//  PublisherCollector.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-30.\n//\n\nimport Combine\n\npublic final class PublisherCollector<T> {\n    // MARK: Lifecycle\n\n    public init<P: Publisher>(_ publisher: P) where P.Output == T, P.Failure == Never {\n        cancellable = publisher.sink(receiveValue: { [weak self] item in\n            self?.items.append(item)\n        })\n    }\n\n    // MARK: Public\n\n    public var cancellable: AnyCancellable?\n    public var items: [T] = []\n}\n"
  },
  {
    "path": "Core/AsyncUtilitiesForTesting/XCTestCase+PromiseKit.swift",
    "content": "//\n//  XCTestCase+PromiseKit.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-19.\n//\n\nimport XCTest\n\nextension XCTestCase {\n    public static let defaultTimeout: TimeInterval = 5\n\n    @nonobjc\n    public func wait(for queue: DispatchQueue, timeout: TimeInterval = defaultTimeout) {\n        let expectation = expectation(description: \"DispatchQueue\")\n        queue.async(flags: .barrier) {\n            expectation.fulfill()\n        }\n        wait(for: [expectation], timeout: timeout)\n    }\n\n    // From: https://www.swiftbysundell.com/articles/testing-error-code-paths-in-swift/\n    public func assert<E: Error & Equatable>(\n        _ expression: @autoclosure () throws -> some Any,\n        throws error: E,\n        in file: StaticString = #file,\n        line: UInt = #line\n    ) {\n        var thrownError: Error?\n\n        XCTAssertThrowsError(\n            try expression(),\n            file: file,\n            line: line\n        ) {\n            thrownError = $0\n        }\n\n        XCTAssertTrue(\n            thrownError is E,\n            \"Unexpected error type: \\(type(of: thrownError))\",\n            file: file, line: line\n        )\n\n        XCTAssertEqual(\n            thrownError as? E, error,\n            file: file, line: line\n        )\n    }\n}\n"
  },
  {
    "path": "Core/AsyncUtilitiesForTesting/XCTestCase+Publisher.swift",
    "content": "//\n//  XCTestCase+Publisher.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-02-20.\n//\n\nimport Combine\nimport XCTest\n\nextension XCTestCase {\n    public func awaitPublisher<T: Publisher>(\n        _ publisher: T,\n        timeout: TimeInterval = 10,\n        file: StaticString = #file,\n        line: UInt = #line\n    ) throws -> T.Output {\n        // This time, we use Swift's Result type to keep track\n        // of the result of our Combine pipeline:\n        var result: Result<T.Output, Error>?\n        let expectation = expectation(description: \"Awaiting publisher\")\n\n        let cancellable = publisher.sink(\n            receiveCompletion: { completion in\n                switch completion {\n                case .failure(let error):\n                    result = .failure(error)\n                case .finished:\n                    break\n                }\n\n                expectation.fulfill()\n            },\n            receiveValue: { value in\n                result = .success(value)\n            }\n        )\n\n        // Just like before, we await the expectation that we\n        // created at the top of our test, and once done, we\n        // also cancel our cancellable to avoid getting any\n        // unused variable warnings:\n        waitForExpectations(timeout: timeout)\n        cancellable.cancel()\n\n        // Here we pass the original file and line number that\n        // our utility was called at, to tell XCTest to report\n        // any encountered errors at that original call site:\n        let unwrappedResult = try XCTUnwrap(\n            result,\n            \"Awaited publisher did not produce any output\",\n            file: file,\n            line: line\n        )\n\n        return try unwrappedResult.get()\n    }\n\n    public func awaitPublisher<T: Publisher>(\n        _ publisher: T,\n        numberOfElements: Int,\n        timeout: TimeInterval = 10,\n        file: StaticString = #file,\n        line: UInt = #line\n    ) throws -> [T.Output]\n        where T.Failure == Never\n    {\n        var elements: [T.Output] = []\n        let expectation = expectation(description: \"Awaiting publisher\")\n\n        let cancellable = publisher.sink { value in\n            elements.append(value)\n            if elements.count == numberOfElements {\n                expectation.fulfill()\n            }\n        }\n\n        waitForExpectations(timeout: timeout)\n        cancellable.cancel()\n\n        if elements.count < numberOfElements {\n            XCTFail(\"Received less than \\(numberOfElements) elements \\(elements)\")\n        }\n\n        return elements\n    }\n\n    public func awaitSingleItemPublisher<T: Publisher>(\n        _ publisher: T,\n        timeout: TimeInterval = 10,\n        file: StaticString = #file,\n        line: UInt = #line\n    ) throws -> T.Output\n        where T.Failure == Never\n    {\n        let elements = try awaitPublisher(\n            publisher,\n            numberOfElements: 1,\n            timeout: timeout,\n            file: file, line: line\n        )\n        return elements[0]\n    }\n}\n"
  },
  {
    "path": "Core/Caching/Sources/Cache.swift",
    "content": "//\n//  Cache.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 11/1/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\nimport UIKit\n\nprivate class ObjectWrapper {\n    // MARK: Lifecycle\n\n    init(_ value: Any) {\n        self.value = value\n    }\n\n    // MARK: Internal\n\n    let value: Any\n}\n\nprivate class KeyWrapper<KeyType: Hashable>: NSObject {\n    // MARK: Lifecycle\n\n    init(_ key: KeyType) {\n        self.key = key\n    }\n\n    // MARK: Internal\n\n    let key: KeyType\n\n    override var hash: Int {\n        key.hashValue\n    }\n\n    override func isEqual(_ object: Any?) -> Bool {\n        guard let other = object as? KeyWrapper<KeyType> else {\n            return false\n        }\n        return key == other.key\n    }\n}\n\npublic final class Cache<KeyType: Hashable, ObjectType>: Sendable {\n    // MARK: Lifecycle\n\n    public init(lowMemoryAware: Bool = true) {\n        guard lowMemoryAware else { return }\n        NotificationCenter.default.addObserver(\n            self,\n            selector: #selector(onLowMemory),\n            name: UIApplication.didReceiveMemoryWarningNotification,\n            object: nil\n        )\n    }\n\n    deinit {\n        NotificationCenter.default.removeObserver(self)\n    }\n\n    // MARK: Public\n\n    public var name: String {\n        get { cache.name }\n        set { cache.name = newValue }\n    }\n\n    public weak var delegate: NSCacheDelegate? {\n        get { cache.delegate }\n        set { cache.delegate = newValue }\n    }\n\n    public var countLimit: Int {\n        get { cache.countLimit }\n        set { cache.countLimit = newValue }\n    }\n\n    public func object(forKey key: KeyType) -> ObjectType? {\n        cache.object(forKey: KeyWrapper(key))?.value as? ObjectType\n    }\n\n    public func setObject(_ obj: ObjectType, forKey key: KeyType) { // 0 cost\n        cache.setObject(ObjectWrapper(obj), forKey: KeyWrapper(key))\n    }\n\n    public func removeObject(forKey key: KeyType) {\n        cache.removeObject(forKey: KeyWrapper(key))\n    }\n\n    public func removeAllObjects() {\n        cache.removeAllObjects()\n    }\n\n    // MARK: Private\n\n    private let cache: NSCache<KeyWrapper<KeyType>, ObjectWrapper> = NSCache()\n\n    @objc\n    private func onLowMemory() {\n        removeAllObjects()\n    }\n}\n\nextension NSCache: @retroactive @unchecked Sendable {}\n"
  },
  {
    "path": "Core/Caching/Sources/OperationCacheableService.swift",
    "content": "//\n//  OperationCacheableService.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 3/28/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Utilities\n\npublic typealias CacheableOperation<Input, Output> = @Sendable (Input) async throws -> Output\n\nfinal class OperationCacheableService<Input: Hashable & Sendable, Output: Sendable>: Sendable {\n    private struct State: Sendable {\n        let cache: Cache<Input, Output>\n        var inProgressOperations: [Input: MulticastContinuation<Output, Error>] = [:]\n    }\n\n    // MARK: Lifecycle\n\n    init(cache: Cache<Input, Output>, operation: @escaping CacheableOperation<Input, Output>) {\n        state = ManagedCriticalState(State(cache: cache))\n        self.operation = operation\n    }\n\n    // MARK: Internal\n\n    func invalidate() {\n        state.withCriticalRegion { state in\n            state.inProgressOperations.removeAll()\n            state.cache.removeAllObjects()\n        }\n    }\n\n    func get(_ input: Input) async throws -> Output {\n        if let cachedValue = getCached(input) {\n            return cachedValue\n        }\n\n        return try await withCheckedThrowingContinuation { continuation in\n            state.withCriticalRegion { state in\n                if let continuations = state.inProgressOperations[input] {\n                    continuations.addContinuation(continuation)\n                } else {\n                    let continuations = MulticastContinuation<Output, Error>()\n                    continuations.addContinuation(continuation)\n                    state.inProgressOperations[input] = continuations\n\n                    startOperation(input: input, continuations: continuations)\n                }\n            }\n        }\n    }\n\n    func getCached(_ input: Input) -> Output? {\n        state.withCriticalRegion { state in\n            state.cache.object(forKey: input)\n        }\n    }\n\n    // MARK: Private\n\n    private let state: ManagedCriticalState<State>\n\n    private let operation: CacheableOperation<Input, Output>\n\n    private func startOperation(input: Input, continuations: MulticastContinuation<Output, Error>) {\n        Task {\n            // Execute.\n            let result = await Swift.Result { try await operation(input) }\n\n            state.withCriticalRegion { state in\n                // Cache the result.\n                if case let .success(value) = result {\n                    state.cache.setObject(value, forKey: input)\n                }\n                continuations.resume(with: result)\n\n                // remove from in progress\n                state.inProgressOperations.removeValue(forKey: input)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Caching/Sources/PagesCacheableService.swift",
    "content": "//\n//  PagesCacheableService.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 3/21/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\npublic protocol Pageable: Hashable, Sendable {\n    var pageNumber: Int { get }\n}\n\npublic final class PagesCacheableService<Input: Pageable, Output: Sendable>: Sendable {\n    public typealias Page = Input\n\n    // MARK: Lifecycle\n\n    public init(\n        cache: Cache<Input, Output>,\n        previousPagesCount: Int,\n        nextPagesCount: Int,\n        pages: [Page],\n        operation: @escaping CacheableOperation<Input, Output>\n    ) {\n        service = OperationCacheableService(cache: cache, operation: operation)\n        self.pages = pages\n        self.nextPagesCount = nextPagesCount\n        self.previousPagesCount = previousPagesCount\n    }\n\n    // MARK: Public\n\n    public func invalidate() {\n        service.invalidate()\n    }\n\n    public func get(_ page: Page) async throws -> Output {\n        defer {\n            // schedule for closer pages\n            cachePagesCloserToPage(page)\n        }\n\n        // preload requested page with very high priority and QoS\n        return try await preload(page)\n    }\n\n    public func getCached(_ input: Page) -> Output? {\n        service.getCached(input)\n    }\n\n    // MARK: Private\n\n    private let previousPagesCount: Int\n    private let nextPagesCount: Int\n    private let pages: [Page]\n\n    private let service: OperationCacheableService<Input, Output>\n\n    private func cachePagesCloserToPage(_ page: Page) {\n        func cacheCloser(_ pageNumber: Int) {\n            if let page = pages.first(where: { $0.pageNumber == pageNumber }) {\n                Task {\n                    _ = try? await preload(page)\n                }\n            }\n        }\n\n        // load next pages\n        for index in 0 ..< nextPagesCount {\n            cacheCloser(page.pageNumber + 1 + index)\n        }\n\n        // load previous pages\n        for index in 0 ..< previousPagesCount {\n            cacheCloser(page.pageNumber - 1 - index)\n        }\n    }\n\n    private func preload(_ page: Page) async throws -> Output {\n        try await service.get(page)\n    }\n}\n"
  },
  {
    "path": "Core/Caching/Tests/CacheTests.swift",
    "content": "//\n//  CacheTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-27.\n//\n\nimport XCTest\n@testable import Caching\n\nclass CacheTests: XCTestCase {\n    let key1 = \"TestKey1\"\n    let object1 = 1234\n\n    let key2 = \"TestKey2\"\n    let object2 = 5678\n\n    var cache: Cache<String, Int>!\n\n    override func setUp() {\n        super.setUp()\n        cache = Cache<String, Int>()\n    }\n\n    override func tearDown() {\n        cache = nil\n        super.tearDown()\n    }\n\n    func testSetObject_and_objectForKey() {\n        // set object for key\n        cache.setObject(object1, forKey: key1)\n\n        // check if object is correctly retrieved\n        XCTAssertEqual(object1, cache.object(forKey: key1))\n    }\n\n    func testRemoveObject() {\n        // set object for key\n        cache.setObject(object1, forKey: key1)\n\n        // remove object for key\n        cache.removeObject(forKey: key1)\n\n        // check if object is correctly removed\n        XCTAssertNil(cache.object(forKey: key1), \"The object should be removed from the cache.\")\n    }\n\n    func testRemoveAllObjects() {\n        // set objects for keys\n        cache.setObject(object1, forKey: key1)\n        cache.setObject(object2, forKey: key2)\n\n        // remove all objects\n        cache.removeAllObjects()\n\n        // check if all objects are correctly removed\n        XCTAssertNil(cache.object(forKey: key1), \"All objects should be removed from the cache.\")\n        XCTAssertNil(cache.object(forKey: key2), \"All objects should be removed from the cache.\")\n    }\n}\n"
  },
  {
    "path": "Core/Caching/Tests/OperationCacheableServiceTests.swift",
    "content": "//\n//  OperationCacheableServiceTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-27.\n//\n\nimport XCTest\n@testable import Caching\n\nclass OperationCacheableServiceTests: XCTestCase {\n    let key = 1234\n    let object = 1945\n\n    var cache: Cache<Int, Int>!\n    var operationCacheableService: OperationCacheableService<Int, Int>!\n\n    override func setUp() {\n        super.setUp()\n        cache = Cache<Int, Int>()\n        operationCacheableService = OperationCacheableService(cache: cache, operation: { key in\n            // Mock operation, which just doubles the integer value of the key\n            key * 2\n        })\n    }\n\n    override func tearDown() {\n        operationCacheableService = nil\n        cache = nil\n        super.tearDown()\n    }\n\n    func testGetOperation() async throws {\n        // Call get operation\n        let result = try await operationCacheableService.get(key)\n\n        XCTAssertEqual(result, 2468, \"Result should be double the value of the key.\")\n    }\n\n    func testGetCached() {\n        // Set a cached object\n        cache.setObject(object, forKey: key)\n\n        // Get the cached object\n        let cachedObject = operationCacheableService.getCached(key)\n\n        XCTAssertEqual(cachedObject, object, \"Cached object should be the same as the set object.\")\n    }\n\n    func testInvalidate() {\n        // Set a cached object\n        cache.setObject(object, forKey: key)\n\n        // Invalidate the service\n        operationCacheableService.invalidate()\n\n        // Get the cached object\n        let cachedObject = operationCacheableService.getCached(key)\n\n        XCTAssertNil(cachedObject, \"Cached object should be nil after invalidate.\")\n    }\n}\n"
  },
  {
    "path": "Core/Caching/Tests/PagesCacheableServiceTests.swift",
    "content": "//\n//  PagesCacheableServiceTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-27.\n//\n\nimport AsyncUtilitiesForTesting\nimport XCTest\n@testable import Caching\n\nstruct TestPage: Pageable {\n    var pageNumber: Int\n\n    var next: TestPage {\n        TestPage(pageNumber: pageNumber + 1)\n    }\n\n    var previous: TestPage {\n        TestPage(pageNumber: pageNumber - 1)\n    }\n}\n\nclass PagesCacheableServiceTests: XCTestCase {\n    var cache: Cache<TestPage, Int>!\n    var pagesCacheableService: PagesCacheableService<TestPage, Int>!\n\n    override func setUp() {\n        super.setUp()\n\n        cache = Cache<TestPage, Int>()\n        let pages = (1 ... 10).map { TestPage(pageNumber: $0) }\n\n        pagesCacheableService = PagesCacheableService(\n            cache: cache,\n            previousPagesCount: 2,\n            nextPagesCount: 2,\n            pages: pages,\n            operation: { page in\n                // Mock operation: Returns the square of the page number\n                page.pageNumber * page.pageNumber\n            }\n        )\n    }\n\n    override func tearDown() {\n        pagesCacheableService = nil\n        cache = nil\n        super.tearDown()\n    }\n\n    func testGet() async throws {\n        let page = TestPage(pageNumber: 5)\n\n        // Call get operation\n        let result = try await pagesCacheableService.get(page)\n        XCTAssertEqual(result, 25, \"Result should be the square of the page number.\")\n\n        // Assert next values are preloaded\n        await Task.megaYield()\n        XCTAssertEqual(cache.object(forKey: page.next), 36)\n        XCTAssertEqual(cache.object(forKey: page.next.next), 49)\n        XCTAssertNil(cache.object(forKey: page.next.next.next))\n\n        // Assert previous values are preloaded\n        XCTAssertEqual(cache.object(forKey: page.previous), 16)\n        XCTAssertEqual(cache.object(forKey: page.previous.previous), 9)\n        XCTAssertNil(cache.object(forKey: page.previous.previous.previous))\n    }\n\n    func testGetFirstItem() async throws {\n        let page = TestPage(pageNumber: 1)\n\n        // Call get operation\n        let result = try await pagesCacheableService.get(page)\n        XCTAssertEqual(result, 1, \"Result should be the square of the page number.\")\n\n        // Assert next values are preloaded\n        await Task.megaYield()\n        XCTAssertEqual(cache.object(forKey: page.next), 4)\n        XCTAssertEqual(cache.object(forKey: page.next.next), 9)\n        XCTAssertNil(cache.object(forKey: page.next.next.next))\n\n        // Assert previous values are not preloaded\n        XCTAssertNil(cache.object(forKey: page.previous))\n    }\n\n    func testGetLastItem() async throws {\n        let page = TestPage(pageNumber: 10)\n\n        // Call get operation\n        let result = try await pagesCacheableService.get(page)\n        XCTAssertEqual(result, 100, \"Result should be the square of the page number.\")\n\n        // Assert next values are preloaded\n        await Task.megaYield()\n        XCTAssertNil(cache.object(forKey: page.next))\n\n        // Assert previous values are preloaded\n        XCTAssertEqual(cache.object(forKey: page.previous), 81)\n        XCTAssertEqual(cache.object(forKey: page.previous.previous), 64)\n        XCTAssertNil(cache.object(forKey: page.previous.previous.previous))\n    }\n\n    func testGetCached() {\n        let page = TestPage(pageNumber: 5)\n        let object = 31\n\n        // Set a cached object\n        cache.setObject(object, forKey: page)\n\n        // Get the cached object\n        let cachedObject = pagesCacheableService.getCached(page)\n\n        XCTAssertEqual(cachedObject, object, \"Cached object should be the same as the set object.\")\n    }\n\n    func testInvalidate() {\n        let page = TestPage(pageNumber: 5)\n        let object = 45\n\n        // Set a cached object\n        cache.setObject(object, forKey: page)\n\n        // Invalidate the service\n        pagesCacheableService.invalidate()\n\n        // Get the cached object\n        let cachedObject = pagesCacheableService.getCached(page)\n\n        XCTAssertNil(cachedObject, \"Cached object should be nil after invalidate.\")\n    }\n}\n"
  },
  {
    "path": "Core/Crashing/Crasher.swift",
    "content": "//\n//  Crasher.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/28/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\nimport Locking\n\npublic class CrasherKeyBase {}\n\npublic final class CrasherKey<Type>: CrasherKeyBase {\n    // MARK: Lifecycle\n\n    public init(key: String) {\n        self.key = key\n    }\n\n    // MARK: Public\n\n    public let key: String\n}\n\npublic protocol CrashInfoHandler {\n    func setValue<T>(_ value: T?, forKey key: CrasherKey<T>)\n    func recordError(_ error: Error, reason: String, file: StaticString, line: UInt)\n}\n\nprivate struct NoOpCrashInfoHandler: CrashInfoHandler {\n    func setValue<T>(_ value: T?, forKey key: CrasherKey<T>) {\n        print(\"[NoOpCrashInfoHandler] setValue called. Don't use NoOpCrashInfoHandler in production\")\n    }\n\n    func recordError(_ error: Error, reason: String, file: StaticString, line: UInt) {\n        print(\"[NoOpCrashInfoHandler] recordError called. Don't use NoOpCrashInfoHandler in production\")\n    }\n}\n\npublic enum CrashInfoSystem {\n    // MARK: Public\n\n    public static func bootstrap(_ factory: @escaping () -> CrashInfoHandler) {\n        lock.sync {\n            precondition(!initialized, \"CrashInfoSystem can only be initialized once.\")\n            self.factory = factory\n            initialized = true\n        }\n    }\n\n    // MARK: Internal\n\n    private(set) static var factory: (() -> CrashInfoHandler) = NoOpCrashInfoHandler.init\n\n    // MARK: Private\n\n    private static let lock = NSLock()\n    private static var initialized = false\n}\n\npublic struct Crasher {\n    // MARK: Lifecycle\n\n    public init() {\n        handler = CrashInfoSystem.factory()\n    }\n\n    // MARK: Public\n\n    public let handler: CrashInfoHandler\n\n    public func recordError(_ error: Error, reason: String, file: StaticString = #file, line: UInt = #line) {\n        handler.recordError(error, reason: reason, file: file, line: line)\n    }\n\n    public func setValue<T>(_ value: T?, forKey key: CrasherKey<T>) {\n        handler.setValue(value, forKey: key)\n    }\n}\n\nextension Crasher {\n    public func recordError<T>(_ message: String, _ body: @Sendable () async throws -> T) async throws -> T {\n        do {\n            return try await body()\n        } catch {\n            crasher.recordError(error, reason: message)\n            throw error\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Crashing/Global.swift",
    "content": "//\n//  Global.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-29.\n//\n\npublic let crasher = Crasher()\n"
  },
  {
    "path": "Core/Localization/Localizations.swift",
    "content": "//\n//  Localizations.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/13/18.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2018  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\n\npublic enum Language: String {\n    case arabic = \"ar\"\n    case english = \"en\"\n}\n\npublic enum Table: String {\n    case localizable = \"Localizable\"\n    case android = \"Android\"\n    case suras = \"Suras\"\n    case readers = \"Readers\"\n}\n\npublic func lFormat(_ key: String, table: Table = .localizable, language: Language? = nil, _ arguments: CVarArg...) -> String {\n    let localization = l(key, table: table, language: language)\n    return String(format: localization, locale: .fixedCurrentLocaleNumbers, arguments: arguments)\n}\n\npublic func l(_ key: String, table: Table = .localizable, language: Language? = nil) -> String {\n    if let language {\n        return localizedString(key, table: table, language: language)\n    }\n    let value = NSLocalizedString(key, tableName: table.rawValue, bundle: Bundle.fixedModule, comment: \"\")\n    if value != key || NSLocale.preferredLanguages.first == \"en\" {\n        return value\n    }\n\n    // Fall back to en\n    return localizedString(key, table: table, language: .english)\n}\n\nprivate func localizedString(_ key: String, table: Table = .localizable, language: Language) -> String {\n    guard\n        let path = Bundle.fixedModule.path(forResource: language.rawValue, ofType: \"lproj\"),\n        let bundle = Bundle(path: path)\n    else { return key }\n    return NSLocalizedString(key, tableName: table.rawValue, bundle: bundle, comment: \"\")\n}\n\npublic func lAndroid(_ key: String, language: Language? = nil) -> String {\n    l(key, table: .android, language: language)\n}\n"
  },
  {
    "path": "Core/Localization/NumberFormatter+Extension.swift",
    "content": "//\n//  NumberFormatter+Extension.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/1/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\n\nextension NumberFormatter {\n    @nonobjc\n    public func format(_ number: NSNumber) -> String {\n        string(from: number) ?? number.description\n    }\n\n    @nonobjc\n    public func format(_ number: Int) -> String {\n        format(NSNumber(value: number))\n    }\n\n    @nonobjc\n    public func format(_ number: Double) -> String {\n        format(NSNumber(value: number))\n    }\n\n    @nonobjc\n    public func format(_ number: Float) -> String {\n        format(NSNumber(value: number))\n    }\n\n    public static let shared: NumberFormatter = {\n        let formatter = NumberFormatter()\n        formatter.locale = formatter.locale?.fixedLocaleNumbers()\n        return formatter\n    }()\n\n    public static var arabicNumberFormatter: NumberFormatter = {\n        let formatter = NumberFormatter()\n        formatter.locale = Locale(identifier: \"ar-SA\")\n        return formatter\n    }()\n}\n\npublic extension Locale {\n    func fixedLocaleNumbers() -> Locale {\n        let latinSuffix = \"@numbers=latn\"\n        if identifier.hasSuffix(latinSuffix) {\n            let localId = identifier.replacingOccurrences(of: latinSuffix, with: \"\")\n            return Locale(identifier: localId)\n        } else {\n            return self\n        }\n    }\n\n    static var fixedCurrentLocaleNumbers: Locale {\n        current.fixedLocaleNumbers()\n    }\n}\n"
  },
  {
    "path": "Core/Localization/Resources/ar.lproj/Android.strings",
    "content": "\"about_contributors\" = \"المساهمون\";\n\"about_contributors_summary\" = \"قائمة بأسماء المساهمين في تطوير تطبيق قرآن أندرويد\";\n\"about_data_sources\" = \"مصادر المعلومات\";\n\"about_description\" = \"هذا التطبيق مجاني. لا تنسونا من صالح دعائكم.\";\n\"about_furqan\" = \"الباحث القرآني (tafsir.app)\";\n\"about_furqan_summary\" = \"النص العثماني والتفاسير العربية\";\n\"about_images\" = \"الصور\";\n\"about_madani_images\" = \"صور صفحات القرآن الموجودة بالتطبيق مصدرها مجمع الملك فهد لطباعة المصحف الشريف بالمدينة المنورة\";\n\"about_naskh_images\" = \"صور صفحات القرآن الموجودة بتطبيق النسخ مأخوذه بتصريح من SHL Info Systems\";\n\"about_noorhidayat\" = \"نور وهداية (Noorhidayat)\";\n\"about_noorhidayat_summary\" = \"خط نورحِرا وترجمة مفتي تقي\";\n\"about_open_source\" = \"مشاريع مفتوحة المصدر\";\n\"about_others\" = \"أخرى\";\n\"about_qaloon_images\" = \"صور صفحات القرآن برواية قالون مأخوذة بتصريح من Nous-Mêmes Éditions Et Diffusion (تونس)\";\n\"about_quran_enc\" = \"موسوعة القرآن الكريم\";\n\"about_quran_enc_summary\" = \"الترجمات لعدد من اللغات\";\n\"about_quran_ksu\" = \"مشروع المصحف الإلكتروني\";\n\"about_quran_ksu_summary\" = \"مشروع المصحف الإلكتروني بجامعة الملك سعود هو مصدر عدد من التفاسير والترجمات المستخدمة في التطبيق. وهو أيضا مصدر تلاوة الشيخ أيمن سويد.\";\n\"about_quranicaudio_summary\" = \"التلاوات الصوتية المتصلة\";\n\"about_tanzil\" = \"تنزيل\";\n\"about_tanzil_summary\" = \"ترجمات لبعض اللغات\";\n\"app_name\" = \"قرآن\";\n\"appearance\" = \"المظهر\";\n\"audio_manager\" = \"إدارة الصوتيات\";\n\"audio_manager_database\" = \"قاعدة بيانات الصوتيات\";\n\"audio_manager_database_delete\" = \"حذف قاعدة البيانات\";\n\"audio_manager_database_download\" = \"تنزيل قاعدة البيانات\";\n\"audio_manager_delete_selection\" = \"حذف التحديد\";\n\"audio_manager_download_all\" = \"تحميل الكل\";\n\"audio_manager_download_selection\" = \"تحميل التحديد\";\n\"audio_manager_remove_audio_msg\" = \"سيتم حذف الملف الصوتي ل%1$@. متأكد؟\";\n\"audio_manager_remove_audio_title\" = \"حذف الملف الصوتي؟\";\n\"audio_manager_remove_multiple_audio_msg\" = \"سيتم حذف الملفات الصوتيه. متأكد؟\";\n\"audio_manager_surah_delete\" = \"حذف السورة\";\n\"audio_manager_surah_download\" = \"تحميل السورة\";\n\"audio_updated_text\" = \"تم تحديث عدد من الملفات الصوتية. تطبيق قرآن حذف نسختك القديمة من هذه الملفات لتتمكن من تنزيل النسخ الجديدة عند تشغيلك لهذه الملفات في المرة القادمة.\";\n\"audio_updated_title\" = \"تحديث الملفات الصوتية\";\n\"available_translations\" = \"الملفات المتاحة للتحميل\";\n\"ayah_copied_popup\" = \"تم نسخ الآية\";\n\"bookmark_ayah\" = \"أضف الآية إلى المرجعيات\";\n\"bookmarks_list_empty\" = \"لا توجد أي مرجعيات\";\n\"cancel\" = \"إلغاء\";\n\"canceling\" = \"جاري إلغاء اﻷمر…\";\n\"comma\" = \"\\\"،\\\"\";\n\"copy_ayah\" = \"نسخ الآية\";\n\"delete_tag\" = \"حذف التصنيف\";\n\"delete_translation\" = \"حذف الترجمة\";\n\"dialog_ok\" = \"موافق\";\n\"download_amount_in_megabytes\" = \"%@ م ب\";\n\"download_cancel\" = \"إلغاء\";\n\"download_error_disk\" = \"لا توجد مساحة كافية للتخزين\";\n\"download_error_general\" = \"لم يتم تحميل الملفات\";\n\"download_error_invalid_download\" = \"الملفات المحملة تالفة\";\n\"download_error_invalid_download_retry\" = \"هناك ملف تالف، جاري إعادة التحميل\";\n\"download_error_network\" = \"لا يمكن اﻻتصال بالانترنت\";\n\"download_error_network_retry\" = \"لا يمكن اﻻتصال بالانترنت، جاري إعادة المحاولة…\";\n\"download_error_perms\" = \"الصلاحيات غير كافية لتحميل الملفات\";\n\"download_extra_data\" = \"لدعم الترجمة و المشاركة يجب تحميل بعض\\\nالملفات .. حمل الأن؟\";\n\"download_processing\" = \"جاري تجهيز الملفات…\";\n\"download_progress\" = \"تم تحميل %1$@ / %2$@\";\n\"download_retry\" = \"أعد المحاولة\";\n\"download_successful\" = \"تم التحميل\";\n\"download_sura_ayah_progress\" = \"جاري تحميل السورة %1$d الآية %2$d\";\n\"download_sura_progress\" = \"جاري التحميل من سورة %3$d - %1$@ / %2$@\";\n\"downloaded_translations\" = \"الملفات المحملة\";\n\"downloadImportantPrompt\" = \"هناك تحديث هام صغير على ملفات الصور على هاتفكم. هل تود  تحميل الملف حالا؟\";\n\"downloading_message\" = \"يرجى الإنتظار حتى نهاية التحميل\";\n\"downloadPrompt\" = \"لكي يعمل التطبيق بنجاح تحتاج لتحميل بعض الملفات الان. إن لم يتم التحميل الان قد لا يعمل التطبيق بشكل صحيح و ستحتاج للاتصال بالإنترنت للقراءة. هل تود التحميل الان؟\";\n\"downloadPrompt_no\" = \"لا\";\n\"downloadPrompt_ok\" = \"نعم\";\n\"downloadPrompt_title\" = \"حمل الملفات المطلوبه؟\";\n\"downloadTabletPrompt\" = \"تم تحسين الصور الخاصه بالتابلت. هل تود تحميلها الان؟\";\n\"edit_tag\" = \"تعديل الصنف\";\n\"email_us\" = \"إذا لم تجد إجابة سؤالكم بالأعلى فيمكنكم مراسلتنا على هذا البريد quranandroid@gmail.com للدعم. ونحيط بكم علما أنه تصلنا كثير من الأسئلة، ولهذا قد لا نرد على جميع الرسائل.‎\";\n\"error_getting_translation_list\" = \"لم يتم تحميل الملف المطلوب، من فضلك أعد المحاولة\";\n\"export_data_error\" = \"خطأ في استيراد البيانات.\";\n\"exported_data\" = \"صدرت البيانات إلى %1$@\";\n\"extracting_title\" = \"تجهيز…\";\n\"found_in_sura\" = \"سورة (%1$d) %2$@: %3$d (صفحة %4$d)\";\n\"from\" = \"من\";\n\"get_arabic_search_db\" = \"حمل قاعدة البيانات\";\n\"get_translations\" = \"حمّل التفسير أو الترجمة\";\n\"gotoPage\" = \"أدخل رقم الصفحة\";\n\"help\" = \"\\\n<b>كيف يتمّ تشغيل الصّوت؟</b>\\\n<br/>\\\nافتح صفحة القرآن ، انقر على الصفحة مرّةً واحدة. في أسفل الصّفحة ستجد زر تشغيل الصّوت و اسم القارئ الذي تودّ تحميله. لاختيار القارئ انقر على اسم القارئ الموجود لتظهر لك باقي قائمة القراء. ولتحميل الصّوت اضغط على زر التّشغيل للتّحميل وللاستماع للصّفحة التي أنت عليها أو لتحميل السّورة\\\n<br/>\\\n<br/><b>كيف أحصل على التّرجمة؟</b>\\\n<br/>افتح صفحةً من المصحف، انقر على الشّاشة مرّةً واحدةً، سيظهر لك شريطٌ بالأعلى ، ستجد أيقونةً بالأعلى على شكل كرةٍ أرضيّةٍ (وقد تجد أيقونة التّرجمة في بعض الأجهزة مدرجةً تحت زر القائمة الموجود بالشّريط العُلوي الذي على شكل ثلاث نقاطٍ بالطّول )، بالنّقر عليها ستذهب بك لصفحةٍ يمكنك من خلالها اختيار وتحميل التّرجمة التي تودّ تحميلها وبعد التّحميل عُد مرّةً أخرى وانقر على أيقونة الكرة الأرضيّة لترى التّرجمة التي تمّ تحميلها.\\\n<br/>\\\n<br/><b>كيف يتمّ إضافة صفحةٍ للمرجعيّات؟</b>\\\n<br/>انقر على الصفحة التي تودّ إضافتها للمرجعيّات، سيظهر لك شريطٌ بالأعلى وعلى يمين الشّريط ستجد أيقونةً على شكل نجمةٍ بالنّقر عليها سيتمّ تغيير شكلها إلى شكلٍ مُصمتٍ وبالتّالي يكون تمّ حفظ الصّفحة للمرجعيّات. ولحذف تلك الصّفحة من المرجعيّات قم مرّةً أخرى بالذَّهاب لتلك الصّفحة وانقر مرّةً أخرى على النّجمة لإلغاء كونها من المرجعيّات\\\n<br/>\\\n<br/><b>كيف يُمْكنني تكبير الخط؟</b>\\\n<br/> للصّفحات العربي يُمكنك وضع جهازك على الوضع الأُفقي، فيُمكنك من خلال ذلك الحصول على حجمٍ أكبر للخط. وللتّرجمة اذهب للإعدادات و اختر حجم التّرجمة.\\\n<br/>\\\n<br/><b>كيف يُمكنني إرسال آيةٍ؟</b>\\\n<br/>\\\nأثناء قراءتك اضغط على الآية ضغطةً طويلةً ستظهر لك قائمةٌ بها عِدّة اختياراتٍ منها الإرسال ومنها تسجيل الآية في المرجعيّات، نسخ الآية، و تفسير الآية.\\\n\";\n\"help_title\" = \"الأسئلة المتداولة\";\n\"highlighting_database\" = \"جاري تحميل الملفات المطلوبة\";\n\"import_data\" = \"استيراد البيانات\";\n\"import_data_and_override\" = \"\\\"اذا قمت باستيراد هذا الملف، سيتم استبدال المرجعيات ب  %1$d مرجعيات و %2$d تصنيفات. استيراد؟\\\"\";\n\"import_data_error\" = \"ملف النسخة الاحتياطية تالف (أو فشلت قراءة النسخة الاحتياطية)\";\n\"import_data_permissions_error\" = \"فشلت قراءة ملف النسخة الاحتياطية بسبب فقدان الإذن\";\n\"import_successful\" = \"تم الاستيراد بنجاح\";\n\"juz2_description\" = \"الجزء %1$@\";\n\"kitkat_external_message\" = \"بسبب قيود الأندرويد، إذا اخترت تخزين ملفات قرآن على الذاكرة الخارجية ثم مسحت التطبيق أو بيانات قرآن أندرويد، ستحذف جميع صفحات المصحف والصوت ولابد من تحميلها مجددا. هل ترغب في استعمال الذاكرة الخارجية؟\";\n\"loading\" = \"جاري التحميل…\";\n\"madani\" = \"مدنية\";\n\"makki\" = \"مكية\";\n\"manzil_description\" = \"منزل %1$@\";\n\"menu_about\" = \"عنا\";\n\"menu_back_to_page\" = \"إلى التلاوة\";\n\"menu_bookmarks\" = \"المرجعيات\";\n\"menu_bookmarks_ayah\" = \"مرجعيات الآيات\";\n\"menu_bookmarks_page\" = \"مرجعيات الصفحات\";\n\"menu_get_translations\" = \"حمل التفاسير/التراجم\";\n\"menu_help\" = \"مساعدة\";\n\"menu_jump\" = \"انتقال سريع\";\n\"menu_jump_last_page\" = \"الصفحة الأخيرة\";\n\"menu_other_apps\" = \"تطبيقات أخرى‎\";\n\"menu_search\" = \"بحث\";\n\"menu_settings\" = \"الإعدادات\";\n\"menu_show_date\" = \"إظهار تاريخ الإضافة\";\n\"menu_sort\" = \"تغيير الترتيب\";\n\"menu_sort_date\" = \"تاريخ الإضافة\";\n\"menu_sort_group_by_tags\" = \"رتب حسب التصنيفات\";\n\"menu_sort_location\" = \"موقعها في القرآن\";\n\"menu_translation\" = \"التفسير/الترجمة\";\n\"more_translations\" = \"المزيد من الترجمات والتفاسير\";\n\"move_down\" = \"تحريك للأسفل\";\n\"move_up\" = \"تحريك للأعلى\";\n\"need_translation\" = \"لم يتم تحميل أي تفسير أو ترجمة\";\n\"new_tag\" = \"صنف جديد\";\n\"next\" = \"التالي\";\n\"no_arabic_search_available\" = \"لتفعيل البحث بالعربية يجب تحميل قاعدة البيانات.. هل ترغب في ذلك ؟\";\n\"no_results\" = \"لا توجد نتائج ل \\\"%@\\\"\";\n\"not_tagged\" = \"غير مصنف\";\n\"notification_channel_audio\" = \"تلاوة القرآن\";\n\"notification_channel_download\" = \"تحميل ملفات القرآن\";\n\"notification_download_canceled\" = \"تم إلغاء التحميل\";\n\"page_description\" = \"صفحة %1$@، جزء %2$@\";\n\"pause\" = \"وقف مؤقت\";\n\"play\" = \"تشغيل\";\n\"play_apply\" = \"تطبيق\";\n\"play_apply_and_play\" = \"تطبيق وتشغيل\";\n\"play_each_verse\" = \"تشغيل كل آية:\";\n\"play_from_here\" = \"بدء التلاوة من هذه الآية\";\n\"play_restrict_range\" = \"\\\" شغل ما تم اختياره من الآيات فقط\\\"\";\n\"play_verses_range\" = \"تشغيل مجموعة الآيات:\";\n\"playback_prompt_title\" = \"بدء التشغيل من:\";\n\"playback_speed\" = \"سرعة التشغيل:\";\n\"please_grant_permissions\" = \"رجاء امنح الإذن في الإعدادات\";\n\"please_wait\" = \"الرجاء الانتظار…\";\n\"prefs_app_location_summary\" = \"اختر الذاكرة التي سيتم تخزين الملفات عليها\";\n\"prefs_app_location_title\" = \"مكان التطبيق\";\n\"prefs_app_size\" = \"مساحة التطبيق\";\n\"prefs_audio_manager_summary\" = \"تحميل وإدارة الملفات الصوتية\";\n\"prefs_ayah_before_translation_summary\" = \"اختر لعرض الآية مع التفسير\";\n\"prefs_ayah_before_translation_title\" = \"عرض اﻵية مع التفسير\";\n\"prefs_calculating_app_size\" = \"جاري حساب مساحة التطبيق\";\n\"prefs_category_advanced\" = \"خيارات متقدمة\";\n\"prefs_category_advanced_summary\" = \"استيراد وتصدير المرجعيات وإعدادات أخرى\";\n\"prefs_category_display_settings\" = \"إعدادات العرض\";\n\"prefs_category_download\" = \"خيارات التحميل\";\n\"prefs_category_dual_screen\" = \"تفضيلات الصفحتين المتجاورتين\";\n\"prefs_category_reading\" = \"إعدادات القراءة\";\n\"prefs_category_translation\" = \"إعدادات التفسير والترجمة\";\n\"prefs_copying_app_files\" = \"جاري نسخ ملفات التطبيق\";\n\"prefs_display_marker_summary\" = \"عرض تنبيه عند الوصول إلى بداية الربع أو الجزء\";\n\"prefs_display_marker_title\" = \"التنبيه\";\n\"prefs_download_amount_summary\" = \"كم التحميل للتلاوات غير المتصلة\";\n\"prefs_download_amount_title\" = \"كم التحميل\";\n\"prefs_dual_page_mode_disabled\" = \"عرض صفحة واحدة في الوضع الأفقي\";\n\"prefs_dual_page_mode_enabled\" = \"عرض صفحتين متجاورتين في الوضع الأفقي\";\n\"prefs_dual_page_mode_title\" = \"وضع الصفحتين المتجاورتين\";\n\"prefs_err_moving_app_files\" = \"حدث خطأ اثناء نقل ملفات التطبيق\";\n\"prefs_export_summary\" = \"تصدير نسخة من المرجعيات و التصنيفات.\";\n\"prefs_export_title\" = \"تصدير\";\n\"prefs_highlight_bookmarks_summary\" = \"علم الآيات التي وضعت في المرجعيات\";\n\"prefs_highlight_bookmarks_title\" = \"تعليم المرجعيات\";\n\"prefs_import_summary\" = \"استيراد الإشارات المرجعية والعلامات\";\n\"prefs_import_title\" = \"استيراد\";\n\"prefs_megabytes_int\" = \"%1$d م ب\";\n\"prefs_new_background_title\" = \"الخلفية الجديدة\";\n\"prefs_night_mode_background_brightness_summary\" = \"إضاءة الصفحة عند تفعيل القراءة الليلية\";\n\"prefs_night_mode_background_brightness_title\" = \"إضاءة الخلفية\";\n\"prefs_night_mode_summary\" = \"الخلفية باللون اﻷسود والخطوط باللون اﻷبيض\";\n\"prefs_night_mode_text_brightness_summary\" = \"إضاءة الخط عند تفعيل القراءة الليلية\";\n\"prefs_night_mode_text_brightness_title\" = \"إضاءة الخط\";\n\"prefs_night_mode_title\" = \"القراءة الليلية\";\n\"prefs_no_enough_space_to_move_files\" = \"لا يوجد مساحة كافية لنقل ملفات التطبيق\";\n\"prefs_overlay_page_info_summary\" = \"عرض رقم الصفحة، اسم السورة، ورقم الجزء أثناء القراءة\";\n\"prefs_overlay_page_info_title\" = \"عرض بيانات الصفحة\";\n\"prefs_page_type_summary\" = \"اختر نوع الصفحات\";\n\"prefs_page_type_title\" = \"نوع طباعة المصحف (تجريبي )\";\n\"prefs_preview\" = \"معاينة\";\n\"prefs_sdcard_external\" = \"الذاكرة الخارجية %1$d\";\n\"prefs_sdcard_internal\" = \"الذاكرة الداخلية\";\n\"prefs_send_logs_summary\" = \"إرسال سجلات التصحيح للمطور\";\n\"prefs_send_logs_title\" = \"إرسال السجلات\";\n\"prefs_split_page_and_translation_summary\" = \"عند تفعيل الصفحتين المتجاورتين، تعرض صفحة المصحف والترجمة معا\";\n\"prefs_split_page_and_translation_title\" = \"عرض صفحة من المصحف وأخرى من الترجمة\";\n\"prefs_streaming_summary\" = \"\\\" سيتم تشغيل الصوت عبر اﻻنترنت (لن يتم تنزيل الملفات على الجهاز)\\\"\";\n\"prefs_streaming_title\" = \"استماع عبر اﻻنترنت\";\n\"prefs_sura_translated_name_summary\" = \"إظهار أسماء السور مترجمة\";\n\"prefs_sura_translated_name_title\" = \"ترجمة أسماء السور\";\n\"prefs_translation_text_title\" = \"خط التفسير والترجمة\";\n\"prefs_translations\" = \"التفسير والترجمة\";\n\"prefs_translations_summary\" = \"حمّل واختر التفاسير والتراجم\";\n\"prefs_use_arabic_summary_on\" = \"سيتم تحويل التطبيق إلى اللغة العربية\";\n\"prefs_use_arabic_title\" = \"الوضع العربي\";\n\"prefs_use_dyslexic_font_summary\" = \"Display translations in dyslexia friendly font\";\n\"prefs_use_dyslexic_font_title\" = \"Dyslexia friendly font\";\n\"prefs_volume_key_navigation_summary\" = \"استخدم مفاتيح الصوت للتصفح بين الصفحات\";\n\"prefs_volume_key_navigation_title\" = \"تصفح بمفاتيح الصوت\";\n\"previous\" = \"السابق\";\n\"process_progress\" = \"جاري اﻹعداد %1$d / %2$d\";\n\"qarilist_dismiss\" = \"رفض\";\n\"qarilist_gapless\" = \"تلاوات متواصلة\";\n\"qarilist_gapped\" = \"تلاوات غير متواصلة\";\n\"qarilist_qaris_with_downloads\" = \"قراء تم تحميلهم\";\n\"qarilist_ready_to_play\" = \"جاهز للتشغيل\";\n\"qarilist_select_qari\" = \"اختر قارئ\";\n\"qarilist_selected\" = \"تم الإختيار\";\n\"quran_ayah\" = \"آية %1$d\";\n\"quran_ayah_details\" = \"%1$@ - آية %2$@، جزء %3$@\";\n\"quran_hizb\" = \"الحزب\";\n\"quran_juz2\" = \"الجزء\";\n\"quran_nos\" = \"نصف\";\n\"quran_page\" = \"الصفحة\";\n\"quran_rob3\" = \"ربع\";\n\"quran_sura\" = \"سورة\";\n\"quran_sura_title\" = \"سُورَةُ %1$@\";\n\"quran_talt_arb3\" = \"ثلاثة أرباع\";\n\"quranSearchType\" = \"آيات القرآن\";\n\"recent_pages\" = \"آخر المتصفحات\";\n\"recite_from_here\" = \"اقرأ من هنا\";\n\"remove_button\" = \"احذف\";\n\"remove_dlg_msg\" = \"هل ترغب في حذف %1$@؟\";\n\"remove_dlg_title\" = \"امسح التفسير/الترجمة؟\";\n\"repeatValues[0]\" = \"مرة واحدة\";\n\"repeatValues[1]\" = \"مرتان\";\n\"repeatValues[2]\" = \"ثلاث مرات\";\n\"repeatValues[3]\" = \"لانهائي\";\n\"scoped_storage_message\" = \"بسبب القيود الجديدة في أندرويد 11، تخزين بيانات التطبيق في\\\nمكان غير مجلد التطبيق الافتراضي قد يؤدي إلى عدم تمكن التطبيق من الوصول لملفاته في إصدارات أندرويد\\\nالقادمة، هل ترغب في نقل البيانات على أية حال؟\\\n\";\n\"sdcard_error\" = \"لم يتم العثور على بطاقه الذاكرة الرقمية. أعد وضعها و حاول مرة أخرى.\";\n\"search_data\" = \"بيانات البحث\";\n\"search_entire_mushaf\" = \"ابحث في المصحف بأكمله\";\n\"search_full_results\" = \"نتائج كاملة\";\n\"search_hint\" = \"بحث في القرآن\";\n\"search_key\" = \"للبحث عن آية\";\n\"see_tafseer_of_verse\" = \"تفسير الآية تابع للآية %d (انقر للعرض).\";\n\"share_ayah\" = \"شارك رابط الآية\";\n\"share_ayah_text\" = \"شارك نص الآية\";\n\"starting_page_label\" = \"أول الصفحة\";\n\"stop\" = \"إيقاف\";\n\"storage_permission_please_restart\" = \"يرجى إعادة تشغيل التطبيق لتفعيل الإذن\";\n\"storage_permission_rationale\" = \"تطبيق قرآن يحتاج إلى إذنك بالوصول إلى الذاكرة الخارجية. التطبيق سيعمل دون الإذن، لكن عند مسح البيانات أو حذف التطبيق، ستحذف جميع صفحات المصحف والبيانات والصوت. هل تريد الإذن لتطبيق قرآن؟\";\n\"sura_and_ayah\" = \"السورة والآية\";\n\"sura_ayah_notification_str\" = \"سُورَةُ %1$@، آية %2$d\";\n\"sura_ayah_sharing_str\" = \"سُورَةُ %1$@: %2$d\";\n\"tag_ayah\" = \"تصنيف الآية\";\n\"tag_blank_tag_error\" = \"لا يمكن أن يكون اسم التصنيف فارغًا\";\n\"tag_bookmark\" = \"تصنيف المرجعية\";\n\"tag_dlg_title\" = \"صنف\";\n\"tag_duplicate_tag_error\" = \"التصنيف مكرر، اكتب تصنيفا جديدا\";\n\"tag_name\" = \"اسم الصنف\";\n\"timing_database\" = \"جاري تحميل الملفات المطلوبة\";\n\"to\" = \"إلى\";\n\"translation_ayah\" = \"تفسير/ترجمة الآية\";\n\"translation_dialog_later\" = \"لاحقا\";\n\"translation_dialog_yes\" = \"نعم\";\n\"translation_updates_available\" = \"هناك تحديثات للتراجم والتفاسير. هل ترغب في تحميلها الآن؟\";\n\"undo\" = \"تراجع\";\n\"update_available\" = \"هناك تحديثات\";\n\"warning\" = \"تحذير\";\n"
  },
  {
    "path": "Core/Localization/Resources/ar.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>audio_manager_files_downloaded</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_files_downloaded@</string>\n            <key>audio_manager_files_downloaded</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>zero</key>\n                <string>لم يتم تحميل سور بعد‎</string>\n                <key>one</key>\n                <string>تم تحميل سورة واحده</string>\n                <key>two</key>\n                <string>تم تحميل سورتان</string>\n                <key>few</key>\n                <string>تم تحميل %1$d سور</string>\n                <key>many</key>\n                <string>تم تحميل %1$d سورة</string>\n                <key>other</key>\n                <string>تم تحميل %1$d سورة</string>\n            </dict>\n        </dict>\n        <key>bookmark_tag_deleted</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@bookmark_tag_deleted@</string>\n            <key>bookmark_tag_deleted</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>zero</key>\n                <string>لم يتم حذف عناصر</string>\n                <key>one</key>\n                <string>تم حذف عنصر واحد</string>\n                <key>two</key>\n                <string>تم حذف عنصران</string>\n                <key>few</key>\n                <string>تم حذف %d عناصر</string>\n                <key>many</key>\n                <string>تم حذف %d عنصر</string>\n            </dict>\n        </dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>zero</key>\n                <string>لا توجد نتائج في البحث عن \\&quot;%1$d\\&quot;</string>\n                <key>one</key>\n                <string>نتيجة واحده في البحث عن \\&quot;%1$d\\&quot;</string>\n                <key>two</key>\n                <string>نتيجتان في البحث عن \\&quot;%1$d\\&quot;</string>\n                <key>few</key>\n                <string>%2$d نتائج في البحث عن \\&quot;%1$d\\&quot;</string>\n                <key>many</key>\n                <string>%2$d نتيجة في البحث عن \\&quot;%1$d\\&quot;</string>\n                <key>other</key>\n                <string>%2$d نتيجة في البحث عن \\&quot;%1$d\\&quot;</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>zero</key>\n                <string>آية</string>\n                <key>one</key>\n                <string>آية</string>\n                <key>two</key>\n                <string>آيتان</string>\n                <key>few</key>\n                <string>%d آيات</string>\n                <key>many</key>\n                <string>%d آية</string>\n                <key>other</key>\n                <string>%d آية</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/ar.lproj/Localizable.strings",
    "content": "\n\n// MARK: - General\n\n\"button.done\" = \"تم\";\n\"button.delete\" = \"حذف\";\n\n// MARK: - Errors\n\n\"error.dialog.title\" = \"خطأ\";\n\"error.message.connection_lost\" = \"فقد الإتصال بشبكة الإنترنت. من فضلك تحرك إلى مكان به إشارة أفضل.\";\n\"error.message.international_roaming_off\" = \"لا يسمح باستخدام التجوال الدولي. من فضلك قم بتغيير إعدادات خدمة التجوال الدولي، أو إتصل بالإنترنت عن طريق Wi-Fi.\";\n\"error.message.not_connected_to_internet\" = \"لا يوجد إتصال بشبكة الإنترنت. من فضلك قم بتشغيل Wi-Fi، أو السماح باتصال البيانات الخلوية.\";\n\"error.message.general\" = \"عفوا. حدث خطأ، حاول مرة اخرى.\";\n\"error.message.no_disk_space\" = \"لا توجد مساحة كافيه في ذاكرة الهاتف لحفظ التنزيلات.\";\n\n// MARK: - Quran\n\n\"ayah\" = \"آية\";\n\"surah\" = \"السورة\";\n\"quran_alquran\" = \"القرآن\";\n\n// MARK: - Translation\n\n\"translation.text-type.translation\" = \"الترجمة إلى الإنجليزية\";\n\"translation.text-type.transliteration\" = \"نسخ الحروف للإنجليزية\";\n\"translation.selectedTranslations\" = \"المختار\";\n\"translation.translator\" = \"المفسر: \";\n\"translation.text.see-referenced-verse\" = \"انظر آية رقم %d.\";\n\"translation.text.read-more\" = \"اقرأ المزيد\";\n\"error.translation.text-retrieval\" = \"عفوا. حدث خطأ، حاول مرة اخرى.\";\n\"error.translation.text-not-available\" = \"لا توجد ترجمة متاحة لهذه الآية.\";\n\n// MARK: - Search\n\n\"search.recents.title\" = \"عمليات البحث الأخيرة\";\n\"search.popular.title\" = \"اختبر البحث بإستخدام\";\n\"search.placeholder.text\" = \"سور أو آيات أو تفاسير أو ترجمات أو الأرقام\";\n\"search.result.count\" = \"(%2$d) %1$@\";\n\n// MARK: - Settings\n\n\"setting.write_review\" = \"قيم التطبيق على المتجر الالكتروني‎...\";\n\"setting.contact_us\" = \"اتصل بنا\";\n\"setting.donate\" = \"تبرع\";\n\"setting.share_app\" = \"مشاركة التطبيق...\";\n\"setting.app_version\" = \"نسخة التطبيق\";\n\"setting.quran_account.sign_in\" = \"تسجيل الدخول\";\n\"setting.quran_account.profile\" = \"ملف Quran.com\";\n\"setting.quran_account.sign_out\" = \"تسجيل الخروج\";\n\"setting.quran_account.sync_devices\" = \"مزامنة العلامات عبر جميع الأجهزة\";\n\"setting.quran_account.custom_collections\" = \"إبقاء مجموعاتك المخصصة متزامنة\";\n\"setting.quran_account.attach_notes\" = \"إبقاء ملاحظات الآيات متزامنة\";\n\n// MARK: - Quran Menu\n\n\"menu.arabic\" = \"عربي\";\n\"menu.translation\" = \"التفاسير والتراجم\";\n\"menu.select_translation\" = \"اختر التفاسير والتراجم\";\n\"menu.pointer\" = \"مؤشر ترجمة الكلمات\";\n\"menu.pointer.select_translation\" = \"لغة المؤشر\";\n\"menu.fontSizeLetter\" = \"أ\";\n\"menu.translationFontSize\" = \"حجم خط تفسير\";\n\"menu.arabicFontSize\" = \"حجم خط القرآن\";\n\"menu.twoPages\" = \"عرض صفحتين في الوضع الأفقي\";\n\"menu.verticalScrolling\" = \"تمرير رأسي\";\n\"menu.theme_settings\" = \"المظهر والإعدادات\";\n\n// MARK: - Theme\n\n\"theme.light\" = \"فاتح\";\n\"theme.dark\" = \"داكن\";\n\"theme.auto\" = \"تلقائي\";\n\"theme.auto.message\" = \"سوف يلتزم تطبيق القرآن بإعداد مظهر iPhone الخاص بك\";\n\n// MARK: - Tabs\n\n\"tab.notes\" = \"الملاحظات\";\n\n// MARK: - Update\n\n\"update.filesystem.title\" = \"جاري تحديث قواعد البيانات ...\";\n\"downloading_title\" = \"جاري التحميل....\";\n\n// MARK: - Reciters\n\n\"reciters.title\" = \"اختر القارئ\";\n\"reciters.recent\" = \"الأخيرة\";\n\"reciters.downloaded\" = \"التنزيلات\";\n\"reciters.all\" = \"الكل\";\n\n// MARK: - Audio\n\n\"audio.playing.action.modify\" = \"تغير\";\n\"audio.playing.message\" = \"تشغيل الصوت من %@ إلى %@\";\n\"audio.downloading.message\" = \"تنزيل الصوت من %@ إلى %@\";\n\n\"audio.playing-verses.label\" = \"سماع آيات\";\n\"audio.adjust-end-verse-to-the-end.label\" = \"ضبط نهاية الآية لنهاية\";\n\n\"audio.select-start-verse\" = \"حدد بداية التشغيل الصوتي\";\n\"audio.select-end-verse\" = \"حدد نهاية التشغيل الصوتي\";\n\n\"audio.download-play-amount\" = \"تحميل وتشغيل الصوت لنهاية\";\n\"audio.download-play-amount.description\" = \"عند بدء تشغيل الصوت، سيتوقف مع نهاية\";\n\n// MARK: - Bookmarks\n\n\"bookmarks.no-data.title\" = \"إضافة الإشارات المرجعية...\";\n\"bookmarks.no-data.text\" = \"عندما تقرأ القرآن، اضغط على زر الإشارة المرجعية لإضافة الصفحة.\";\n\n\"bookmarks.sync.title\" = \"زامن العلامات المرجعية\";\n\"bookmarks.sync.body\" = \"سجّل الدخول إلى Quran.com للاحتفاظ بعلاماتك المرجعية متاحة عبر أجهزتك.\";\n\"bookmarks.sync.action\" = \"تسجيل الدخول\";\n\n// MARK: - Notes\n\n\"notes.no-data.title\" = \"إضافة آيات مرجعية...\";\n\"notes.no-data.text\" = \"اضغط مع الاستمرار على الآيات. يمكنك تمديد التحديد ليشمل عدة آيات ، ثم اضغط على زر الإشارة المرجعية.\";\n\"notes.verses-count\" = \"(+%d آيات)\";\n\"notes.delete.alert.title\" = \"حذف الإشارة المرجعية\";\n\"notes.delete.alert.body\" = \"سيتم حذف الملاحظة أيضًا.\";\n\"notes.icloud.alert.title\" = \"مزامنة iCloud\";\n\"notes.icloud.alert.body\" = \"يستخدم التطبيق iCloud لمزامنة الإشارات المرجعية والملاحظات عبر أجهزتك. يمكنك تعطيله من جهازك من خلال إعدادات iCloud.\";\n\n// MARK: - Ayah Menu\n\n\"ayah.menu.copy\" = \"نسخ\";\n\"ayah.menu.share\" = \"مشاركة...\";\n\"ayah.menu.play-end-juz\" = \"إلى نهاية الجزء\";\n\"ayah.menu.play-end-surah\" = \"إلى نهاية السورة\";\n\"ayah.menu.play-end-page\" = \"إلى نهاية الصفحة\";\n\"ayah.menu.play-end-quran\" = \"إلى نهاية القرآن\";\n\"ayah.menu.repeat\" = \"كرر\";\n\"ayah.menu.selected-verse\" = \"الآية المختارة\";\n\"ayah.menu.selected-verses\" = \"الآيات المختارة\";\n\"ayah.menu.highlight\" = \"تحديد\";\n\"ayah.menu.highlight-select-color\" = \"اختر لون\";\n\"ayah.menu.add-note\" = \"اضف ملاحظة\";\n\"ayah.menu.edit-note\" = \"تحرير الملاحظة\";\n\"ayah.menu.delete-note\" = \"حذف الملاحظة\";\n\"ayah.menu.delete-highlight\" = \"حذف التحديد\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n\"reading.selector.selectMushaf.short\" = \"اختر\";\n\"reading.selector.selectMushaf.long\" = \"اختر هذا المصحف\";\n\"reading.selector.title\" = \"اختر المصحف\";\n\"reading.selector.selection-description\" = \"اضغط على المصحف للمزيد من المعلومات.\";\n\"reading.selector.property.hafs\" = \"مصحف حفص عن عاصم\";\n\"reading.selector.property.pages.604\" = \"٦٠٤ صفحة\";\n\"reading.selector.property.lines.15\" = \"١٥ سطرًا بالصفحة\";\n\"reading.selector.property.word-translation.supported\" = \"يدعم ترجمة الكلمات\";\n\"reading.selector.property.word-translation.not-supported\" = \"لا يدعم ترجمة الكلمات\";\n\n// Hafs 1405\n\"reading.hafs-1405.title\" = \"حفص، مصحف المدينة المنورة النمطي، ١٤٠٥هـ\";\n\"reading.hafs-1405.description\" = \"مصحف حفص عن عاصم، إصدر المدينة المنورة عام ١٤٠٥ هـ. كان التطبيق يقدم هذا الإصدار لفترة طويلة. \\n إصدار مجمع الملك فهد لطباعة المصحف.\";\n\"reading.hafs-1405.issue\" = \"إصدار ١٤٠٥ هجري\";\n\n// Hafs 1421\n\"reading.hafs-1421.title\" = \"حفص، مصحف المدينة المنورة النمطي، ١٤٢١هـ\";\n\"reading.hafs-1421.description\" = \"مصحف حفص عن عاصم، إصدر المدينة المنورة عام ١٤٢١ هـ. إصدار مجمع الملك فهد لطباعة المصحف.\";\n\"reading.hafs-1421.issue\" = \"إصدار ١٤٢١ هجري\";\n\n// Hafs 1440\n\"reading.hafs-1440.title\" = \"حفص، مصحف المدينة المنورة النمطي، ١٤٤٠هـ\";\n\"reading.hafs-1440.description\" = \"مصحف حفص عن عاصم، إصدر المدينة المنورة عام ١٤٤٠ هـ. إصدار مجمع الملك فهد لطباعة المصحف.\";\n\"reading.hafs-1440.issue\" = \"إصدار ١٤٤٠ هجري\";\n\n// Hafs 1439\n\"reading.hafs-1439.title\" = \"مصحف المدينة (١٤٣٩)\";\n\"reading.hafs-1439.description\" = \"مصحف المدينة الطبعة من عام ١٤٣٩ من مجمع الملك فهد لطباعة المصحف الشريف، وملائم للشاشات الأطول.\";\n\"reading.hafs-1439.issue\" = \"إصدار ١٤٣٩ هجري\";\n\n// Hafs 1441\n\"reading.hafs-1441.title\" = \"مصحف المدينة (١٤٤١)\";\n\"reading.hafs-1441.description\" = \"مصحف المدينة إصدار ١٤٤١ من مجمع الملك فهد لطباعة المصحف الشريف، ومهيأ للشاشات الأكبر.\";\n\"reading.hafs-1441.issue\" = \"إصدار ١٤٤١ هجري\";\n\n// Hafs Tajweed\n\"reading.tajweed.title\" = \"مصحف التجويد\";\n\"reading.tajweed.description\" = \"مصحف التجويد (حفص عن عاصم) – دار المعرفة\";\n\n// MARK: - Diagnostics\n\n\"diagnostics.title\" = \"تشخيص التطبيق\";\n\"diagnostics.details\" = \"يستخدم المطور هذه الإعدادات خصيصًا لأغراض التصحيح والتشخيص.\";\n\n\"diagnostics.share_app_logs\" = \"مشاركة سجلات التطبيق\";\n\"diagnostics.enable_debug_logs\" = \"تمكين تسجيل التصحيح\";\n\"diagnostics.enable_debug_logs.details\" = \"سيكون للإعداد تأثير عند إعادة تشغيل التطبيق التالية.\";\n\n\n// MARK: - What's new\n\n\"new.title\" = \"المضاف حديثاً\";\n\"new.action\" = \"استمر\";\n\n// Mushafs\n\"new.mushafs\" = \"مصاحف جديدة:\";\n\"new.mushafs.details\" = \"* مصحف حفص بالتجويد: القرآن الكريم - طبعة دار المعرفة.\\n* مصحف المدينة 1421 هجري.\\n* مصحف المدينة 1440 هجري.\\n* بالإضافة إلى الاستمتاع بالنسخة الكلاسيكية 1405 هجري المستخدمة منذ بداية البرنامج.\";\n\n// Reciters\n\"new.reciters\" = \"قراء جدد:\";\n\n// Miscellaneous\n\"new.miscellaneous\" = \"متفرقات:\";\n\"new.miscellaneous.details\" = \"* تحديث مظهر التطبيق.\\n* تحسين ميزة البحث (قادم قريباً خوارزمية بحث جديدة).\\n* دعم توطين التطبيق باللغة الفيتنامية.\\n* الوصول إلى خيارات الصوت المتقدمة متاح عند عدم تشغيل التلاوة.\\n* التطبيق أصبح مفتوح المصدر: https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades\" = \"صوتيات:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades.details\" = \"* التحكم في سرعة التلاوة: 0.5x، 0.75x، 1x، 1.25x، 1.5x - بفضل @adnan29979.\\n* يتذكر تشغيل تلاوة جديدة السرعة المفضلة لديك - بفضل @adnan29979.\";\n\n// Personalization\n\"new.personalization\" = \"الأنماط:\";\n\"new.personalization.details\" = \"* دعم لعدة أنماط. افتح صفحة من القرآن -> القائمة العلوية اليمنى -> السمات والإعدادات.\\n* استخدم \\\"الأصلي\\\" إذا كنت تريد العودة إلى النمط السابق.\";\n\n// Library & Navigation\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation\" = \"التنقل:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation.details\" = \"* قم بترتيب السور والأجزاء على الصفحة الرئيسية، وعرض أرقام السور حتى تتمكن من الانتقال إلى ما تحتاجه بشكل أسرع - بفضل @yismailuofa.\";\n"
  },
  {
    "path": "Core/Localization/Resources/ar.lproj/Readers.strings",
    "content": "\"qari_abdulaziz_zahrani_gapless\" = \"عبد العزيز بن صالح الزهراني\";\n\"qari_abdulbaset\" = \"عبد الباسط عبد الصمد (غير متصل)\";\n\"qari_abdulbaset_gapless\" = \"عبد الباسط\";\n\"qari_abdulbaset_mujawwad\" = \"عبد الباسط عبد الصمد مجود (غير متصل)\";\n\"qari_abdulbaset_mujawwad_gapless\" = \"عبد الباسط مجود\";\n\"qari_abdulhadi_kanakeri_gapless\" = \"عبدالهادي كناكري\";\n\"qari_abdullah_matroud_gapless\" = \"عبدالله المطرود\";\n\"qari_abdulmuhsin_qasim_gapless\" = \"عبدالمحسن القاسم\";\n\"qari_abdulrahman_alshahat_gapless\" = \"عبد الرحمن الشحات\";\n\"qari_abdurrashid_sufi_gapless\" = \"عبد الرشيد صوفي\";\n\"qari_afasy\" = \"مشاري بن راشد العفاسي (غير متصل)\";\n\"qari_afasy_cali_gapless\" = \"مشاري العفاسي (كاليفورنيا)\";\n\"qari_afasy_gapless\" = \"مشاري بن راشد العفاسي\";\n\"qari_ahmad_nauina_gapless\" = \"أحمد نعينع\";\n\"qari_ahmed_al_nufais_gapless\" = \"أحمد النفيس\";\n\"qari_ajamy_gapless\" = \"أحمد بن علي العجمي\";\n\"qari_akram_al_alaqmi\" = \"اكرم العلقمي  (غير متصل)\";\n\"qari_ali_hajjaj_alsouasi_gapless\" = \"علي حجاج السويسي\";\n\"qari_ali_jaber_gapless\" = \"علي جابر\";\n\"qari_alijon_qari_gapless\" = \"علي بن فيض الله مخدوم\";\n\"qari_aloosi_gapless\" = \"عبدالرحمن العوسي\";\n\"qari_alzain_ahmad_gapless\" = \"الزين محمد أحمد\";\n\"qari_ayman_suwaid_gapless\" = \"أيمن سويد\";\n\"qari_ayman_suwaid_gapped\" = \"أيمن سويد (غير متصل)\";\n\"qari_ayyoub\" = \"محمد أيوب (غير متصل)\";\n\"qari_ayyoub_gapless\" = \"محمد أيوب\";\n\"qari_aziz_alili_gapless\" = \"عزيز عليلي\";\n\"qari_badr_al_turki_gapless\" = \"بدر التركي\";\n\"qari_bandar_baleela_gapless\" = \"بندر بليلة\";\n\"qari_basfar\" = \"عبد الله بصفر (غير متصل)\";\n\"qari_basfar_gapless\" = \"عبد الله بصفر\";\n\"qari_dussary\" = \"ياسر الدوسري (غير متصل)\";\n\"qari_fares_abbad_gapless\" = \"فارس عباد\";\n\"qari_farman_shawani_gapless\" = \"فرمان شواني\";\n\"qari_hady_toure_gapless\" = \"محمد الهادي توري\";\n\"qari_hani_rifai\" = \"هاني الرفاعي (غير متصل)\";\n\"qari_hani_rifai_gapless\" = \"هاني الرفاعي\";\n\"qari_hudhayfi\" = \"الحذيفي (غير متصل)\";\n\"qari_hudhayfi_gapless\" = \"الحذيفي\";\n\"qari_husary_gapless\" = \"الحصري\";\n\"qari_husary_iza3a_gapless\" = \"الحصري تسجيل الإذاعة\";\n\"qari_husary_muallim_gapless\" = \"الحصري (معلم)\";\n\"qari_husary_mujawwad\" = \"الحصري مجود (غير متصل)\";\n\"qari_husary_mujawwad_gapless\" = \"الحصري (مجود)\";\n\"qari_ibrahim_alakhdar_gapless\" = \"إبراهيم الأخضر\";\n\"qari_idrees_abkar_gapless\" = \"إدريس أبكر\";\n\"qari_jibreel\" = \"محمد جبريل (غير متصل)\";\n\"qari_jibreel_gapless\" = \"محمد جبريل\";\n\"qari_juhany_gapless\" = \"عبدالله الجهني\";\n\"qari_khaled_muhanna_gapless\" = \"خالد المهنا\";\n\"qari_khalid_jalil_gapless\" = \"خالد الجليل\";\n\"qari_khalid_qahtani_gapless\" = \"خالد القحطاني\";\n\"qari_khalifa_taniji_gapless\" = \"خليفة الطنيجي\";\n\"qari_luhaidan_gapless\" = \"محمد اللحيدان\";\n\"qari_mahmoud_ali_albana_gapless\" = \"محمود علي البنا\";\n\"qari_minshawi_mujawwad\" = \"المنشاوي مجود (غير متصل)\";\n\"qari_minshawi_mujawwad_gapless\" = \"المنشاوي مجود\";\n\"qari_minshawi_murattal_gapless\" = \"المنشاوي\";\n\"qari_mishari_walk_gapless\" = \"مشاري و إبراهيم والك (ترجمة انجليزية)\";\n\"qari_mohammad_altablawi_gapless\" = \"محمد الطبلاوي\";\n\"qari_mokhtasar_asmari_gapless\" = \"عبدالله الأسمري (المختصر الصوتي)\";\n\"qari_mostafa_ismaeel_gapless\" = \"مصطفي إسماعيل\";\n\"qari_muaiqly\" = \"ماهر المعيقلي (غير متصل)\";\n\"qari_muaiqly_gapless\" = \"ماهر المعيقلي\";\n\"qari_muaiqly_haramain_gapless\" = \"ماهر المعيقلي (الحرمين)\";\n\"qari_muhammad_rashad_shereef_gapless\" = \"محمد رشاد الشريف\";\n\"qari_nabil_rifa3i_gapless\" = \"نبيل الرفاعي\";\n\"qari_noreen_siddiq_gapless\" = \"نورين محمد صديق\";\n\"qari_peshawa_qadir_al_qurdi_gapless\" = \"بيشاوا قادر الكردي\";\n\"qari_qatami_gapless\" = \"ناصر القطامي\";\n\"qari_raad_al_kurdi_gapless\" = \"رعد الكردي\";\n\"qari_saad_al_ghamdi\" = \"سعد الغامدي (غير متصل)\";\n\"qari_saad_al_ghamidi_gapless\" = \"سعد الغامدي\";\n\"qari_sahl_yaseen_gapless\" = \"سهل ياسين\";\n\"qari_salah_budair_gapless\" = \"صلاح بدير\";\n\"qari_salah_bukhatir_gapless\" = \"صلاح بوخاطر\";\n\"qari_shatri\" = \"أبو بكر الشاطري (غير متصل)\";\n\"qari_shatri_gapless\" = \"أبو بكر الشاطري\";\n\"qari_shuraym\" = \"سعود الشريم (غير متصل)\";\n\"qari_shuraym_gapless\" = \"سعود الشريم\";\n\"qari_suadis\" = \"عبد الرحمن السديس (غير متصل)\";\n\"qari_sudais_gapless\" = \"عبد الرحمن السديس\";\n\"qari_tablawy\" = \"محمد الطبلاوي (غير متصل)\";\n\"qari_tawfeeq_as_sawaigh_gapless\" = \"توفيق الصايغ\";\n\"qari_wadee3_alyamani_gapless\" = \"وديع اليمني\";\n\"qari_walk\" = \"إبراهيم والك (ترجمة انجليزية)\";\n\"qari_walk_gapless\" = \"إبراهيم والك (ترجمة انجليزية)\";\n\"qari_yasser_dussary_gapless\" = \"ياسر الدوسري\";\n\"qari_yasser_salama_hadr_gapless\" = \"ياسر سلامة (حدر)\";\n"
  },
  {
    "path": "Core/Localization/Resources/ar.lproj/Suras.strings",
    "content": "\"sura_names[0]\" = \"الفَاتِحَةِ\";\n\"sura_names[1]\" = \"البَقَرَةِ\";\n\"sura_names[2]\" = \"آلِ عِمۡرَانَ\";\n\"sura_names[3]\" = \"النِّسَاءِ\";\n\"sura_names[4]\" = \"المَائـِدَةِ\";\n\"sura_names[5]\" = \"الأَنۡعَامِ\";\n\"sura_names[6]\" = \"الأَعۡرَافِ\";\n\"sura_names[7]\" = \"الأَنفَالِ\";\n\"sura_names[8]\" = \"التَّوۡبَةِ\";\n\"sura_names[9]\" = \"يُونُسَ\";\n\"sura_names[10]\" = \"هُودٍ\";\n\"sura_names[11]\" = \"يُوسُفَ\";\n\"sura_names[12]\" = \"الرَّعۡدِ\";\n\"sura_names[13]\" = \"إِبۡرَاهِيمَ\";\n\"sura_names[14]\" = \"الحِجۡرِ\";\n\"sura_names[15]\" = \"النَّحۡلِ\";\n\"sura_names[16]\" = \"الإِسۡرَاءِ\";\n\"sura_names[17]\" = \"الكَهۡفِ\";\n\"sura_names[18]\" = \"مَرۡيَمَ\";\n\"sura_names[19]\" = \"طه\";\n\"sura_names[20]\" = \"الأَنبِيَاءِ\";\n\"sura_names[21]\" = \"الحَجِّ\";\n\"sura_names[22]\" = \"المُؤۡمِنُونَ\";\n\"sura_names[23]\" = \"النُّورِ\";\n\"sura_names[24]\" = \"الفُرۡقَانِ\";\n\"sura_names[25]\" = \"الشُّعَرَاءِ\";\n\"sura_names[26]\" = \"النَّمۡلِ\";\n\"sura_names[27]\" = \"القَصَصِ\";\n\"sura_names[28]\" = \"العَنكَبُوتِ\";\n\"sura_names[29]\" = \"الرُّومِ\";\n\"sura_names[30]\" = \"لُقۡمَانَ\";\n\"sura_names[31]\" = \"السَّجۡدَةِ\";\n\"sura_names[32]\" = \"الأَحۡزَابِ\";\n\"sura_names[33]\" = \"سَبَإٍ\";\n\"sura_names[34]\" = \"فَاطِرٍ\";\n\"sura_names[35]\" = \"يسٓ\";\n\"sura_names[36]\" = \"الصَّافَّاتِ\";\n\"sura_names[37]\" = \"صٓ\";\n\"sura_names[38]\" = \"الزُّمَرِ\";\n\"sura_names[39]\" = \"غَافِرٍ\";\n\"sura_names[40]\" = \"فُصِّلَتۡ\";\n\"sura_names[41]\" = \"الشُّورَىٰ\";\n\"sura_names[42]\" = \"الزُّخۡرُفِ\";\n\"sura_names[43]\" = \"الدُّخَانِ\";\n\"sura_names[44]\" = \"الجَاثِيَةِ\";\n\"sura_names[45]\" = \"الأَحۡقَافِ\";\n\"sura_names[46]\" = \"مُحَمَّدٍ\";\n\"sura_names[47]\" = \"الفَتۡحِ\";\n\"sura_names[48]\" = \"الحُجُرَاتِ\";\n\"sura_names[49]\" = \"قٓ\";\n\"sura_names[50]\" = \"الذَّارِيَاتِ\";\n\"sura_names[51]\" = \"الطُّورِ\";\n\"sura_names[52]\" = \"النَّجۡمِ\";\n\"sura_names[53]\" = \"القَمَرِ\";\n\"sura_names[54]\" = \"الرَّحۡمَٰن\";\n\"sura_names[55]\" = \"الوَاقِعَةِ\";\n\"sura_names[56]\" = \"الحَدِيدِ\";\n\"sura_names[57]\" = \"المُجَادلَةِ\";\n\"sura_names[58]\" = \"الحَشۡرِ\";\n\"sura_names[59]\" = \"المُمۡتَحنَةِ\";\n\"sura_names[60]\" = \"الصَّفِّ\";\n\"sura_names[61]\" = \"الجُمُعَةِ\";\n\"sura_names[62]\" = \"المُنَافِقُونَ\";\n\"sura_names[63]\" = \"التَّغَابُنِ\";\n\"sura_names[64]\" = \"الطَّلَاقِ\";\n\"sura_names[65]\" = \"التَّحۡرِيمِ\";\n\"sura_names[66]\" = \"المُلۡكِ\";\n\"sura_names[67]\" = \"القَلَمِ\";\n\"sura_names[68]\" = \"الحَاقَّةِ\";\n\"sura_names[69]\" = \"المَعَارِجِ\";\n\"sura_names[70]\" = \"نُوحٍ\";\n\"sura_names[71]\" = \"الجِنِّ\";\n\"sura_names[72]\" = \"المُزَّمِّلِ\";\n\"sura_names[73]\" = \"المُدَّثِّرِ\";\n\"sura_names[74]\" = \"القِيَامَةِ\";\n\"sura_names[75]\" = \"الإِنسَانِ\";\n\"sura_names[76]\" = \"المُرۡسَلَاتِ\";\n\"sura_names[77]\" = \"النَّبَإِ\";\n\"sura_names[78]\" = \"النَّازِعَاتِ\";\n\"sura_names[79]\" = \"عَبَسَ\";\n\"sura_names[80]\" = \"التَّكۡوِيرِ\";\n\"sura_names[81]\" = \"الانفِطَارِ\";\n\"sura_names[82]\" = \"المُطَفِّفِينَ\";\n\"sura_names[83]\" = \"الانشِقَاقِ\";\n\"sura_names[84]\" = \"البُرُوجِ\";\n\"sura_names[85]\" = \"الطَّارِقِ\";\n\"sura_names[86]\" = \"الأَعۡلَىٰ\";\n\"sura_names[87]\" = \"الغَاشِيَةِ\";\n\"sura_names[88]\" = \"الفَجۡرِ\";\n\"sura_names[89]\" = \"البَلَدِ\";\n\"sura_names[90]\" = \"الشَّمۡسِ\";\n\"sura_names[91]\" = \"اللَّيۡلِ\";\n\"sura_names[92]\" = \"الضُّحَىٰ\";\n\"sura_names[93]\" = \"الشَّرۡحِ\";\n\"sura_names[94]\" = \"التِّينِ\";\n\"sura_names[95]\" = \"العَلَقِ\";\n\"sura_names[96]\" = \"القَدۡرِ\";\n\"sura_names[97]\" = \"البَيِّنَةِ\";\n\"sura_names[98]\" = \"الزَّلۡزَلَةِ\";\n\"sura_names[99]\" = \"العَادِيَاتِ\";\n\"sura_names[100]\" = \"القَارِعَةِ\";\n\"sura_names[101]\" = \"التَّكَاثُرِ\";\n\"sura_names[102]\" = \"العَصۡرِ\";\n\"sura_names[103]\" = \"الهُمَزَةِ\";\n\"sura_names[104]\" = \"الفِيلِ\";\n\"sura_names[105]\" = \"قُرَيۡشٍ\";\n\"sura_names[106]\" = \"المَاعُونِ\";\n\"sura_names[107]\" = \"الكَوۡثَرِ\";\n\"sura_names[108]\" = \"الكَافِرُونَ\";\n\"sura_names[109]\" = \"النَّصۡرِ\";\n\"sura_names[110]\" = \"المَسَدِ\";\n\"sura_names[111]\" = \"الإِخۡلَاصِ\";\n\"sura_names[112]\" = \"الفَلَقِ\";\n\"sura_names[113]\" = \"النَّاسِ\";\n"
  },
  {
    "path": "Core/Localization/Resources/de.lproj/Android.strings",
    "content": "\"about_contributors\" = \"Mitwirkende\";\n\"about_contributors_summary\" = \"Eine Liste von Personen, die zur Entwicklung von Quran für Android beigetragen haben\";\n\"about_data_sources\" = \"Datenquellen\";\n\"about_description\" = \"Quran für Android ist eine kostenlose Korananwendung. Bitte vergessen Sie die Spender nicht in Ihren Gebeten.\";\n\"about_furqan_summary\" = \"Uthmani-Text und arabischer Tafaseer\";\n\"about_images\" = \"Bilder\";\n\"about_madani_images\" = \"Die Koranbilder basieren auf den Schriftarten des König-Fahd-Komplex zum Druck vom Qurʾān\";\n\"about_naskh_images\" = \"Die Koranbilder für die Naskh-App stammen (mit Genehmigung) von SHL Info Systems\";\n\"about_noorhidayat_summary\" = \"Noorehira Schrift und Mufti Taqi Übersetzung\";\n\"about_open_source\" = \"Open-Source-Projekte\";\n\"about_others\" = \"Andere\";\n\"about_qaloon_images\" = \"Die Bilder von Qaloon werden mit Genehmigung von Nous-Mêmes Éditions Et Diffusion (Tunesien) verwendet.\";\n\"about_quran_enc\" = \"Die Enzyklopädie von dem heiligen Quran\";\n\"about_quran_enc_summary\" = \"Übersetzungen für viele Sprachen\";\n\"about_quran_ksu\" = \"Elektronisches Moshaf-Projekt\";\n\"about_quran_ksu_summary\" = \"Das elektronische Moshaf-Projekt der König Saud Universität ist die Quelle der App für den arabischen Tafaseer und die Übersetzungen für verschiedene Sprachen. Es ist auch die Quelle für die Rezitation von Dr. Ayman Suwaid.\";\n\"about_quranicaudio_summary\" = \"Lückenlose mp3-Koranrezitationen\";\n\"about_tanzil_summary\" = \"Übersetzungen für einige Sprachen\";\n\"app_name\" = \"Quran\";\n\"audio_manager\" = \"Audioverwaltung\";\n\"audio_manager_delete_selection\" = \"Auswahl löschen\";\n\"audio_manager_download_all\" = \"Alle herunterladen\";\n\"audio_manager_download_selection\" = \"Auswahl herunterladen\";\n\"audio_manager_remove_audio_msg\" = \"Sind Sie sicher, dass Sie %1$@ entfernen möchten?\";\n\"audio_manager_remove_audio_title\" = \"Sūra entfernen?\";\n\"audio_manager_remove_multiple_audio_msg\" = \"Sind Sie sicher, dass Sie entfernen möchten?\";\n\"audio_manager_surah_delete\" = \"Sūra löschen\";\n\"audio_manager_surah_download\" = \"Sūra herunterladen\";\n\"audio_updated_text\" = \"Mehrere Quran-Audiodateien wurden aktualisiert. Quran für Android hat Ihre Kopie dieser Dateien entfernt, damit die neuesten Versionen heruntergeladen werden können, wenn Sie sie das nächste Mal abspielen zurück.\";\n\"audio_updated_title\" = \"Quran Audio Dateien Update\";\n\"available_translations\" = \"Zum Download verfügbar\";\n\"ayah_copied_popup\" = \"Vers kopiert\";\n\"bookmark_ayah\" = \"Lesezeichen für diesen Vers hinzufügen\";\n\"bookmarks_list_empty\" = \"Keine Lesezeichen\";\n\"cancel\" = \"Abbrechen\";\n\"canceling\" = \"Abbrechen…\";\n\"copy_ayah\" = \"Kopiere Vers\";\n\"delete_tag\" = \"Schlagwort löschen\";\n\"delete_translation\" = \"Übersetzung entfernen\";\n\"dialog_ok\" = \"Ok\";\n\"download_amount_in_megabytes\" = \"%@ MB\";\n\"download_cancel\" = \"Abbrechen\";\n\"download_error_disk\" = \"Sie verfügen nicht über genug Speicherplatz um die Dateien\\\nherunterzuladen.\\\n\";\n\"download_error_general\" = \"Download fehlgeschlagen\";\n\"download_error_invalid_download\" = \"Die heruntergeladene Datei war fehlerhaft.\";\n\"download_error_invalid_download_retry\" = \"Fehlerhafte Datei, es wird versucht die Datei\\\nerneut herunterzuladen.\\\n\";\n\"download_error_network\" = \"Die Datei konnte wegen eines Netzwerk-Fehlers nicht\\\nheruntergeladen werden.\\\n\";\n\"download_error_network_retry\" = \"Netzwerk-Fehler, es wird versucht eine Verbindung\\\naufzubauen…\";\n\"download_error_perms\" = \"Die Datei konnte mangels Berechtigungen nicht heruntergeladen\\\nwerden.\\\n\";\n\"download_extra_data\" = \"Wir müssen einige kleine Dateien herunterladen, um von der\\\nTeilen- und Übersetzungs-Funktion Gebrauch machen zu können. Möchten Sie die Dateien jetzt\\\nherunterladen?\\\n\";\n\"download_processing\" = \"Download wird durchgeführt…\";\n\"download_progress\" = \"Heruntergeladen %1$@ / %2$@\";\n\"download_retry\" = \"Nochmals versuchen\";\n\"download_successful\" = \"Download erfolgreich\";\n\"download_sura_ayah_progress\" = \"Herunterladen von Sure %1$d Vers %2$d\";\n\"download_sura_progress\" = \"Heruntergeladen %1$@ / %2$@ von Sure %3$d\";\n\"downloaded_translations\" = \"Heruntergeladen\";\n\"downloadImportantPrompt\" = \"Es ist eine kleine, aber wichtige Aktualisierung der\\\nQuran-Abbildungen auf ihrem Gerät vorhanden. Wollen Sie diese Aktualisierung jetzt\\\nherunterladen?\\\n\";\n\"downloading_message\" = \"Bitte warten Sie bis die Dateien heruntergeladen wurden.\\\nSie dürfen den Vorgang unterbrechen, falls es nötig sein sollte.\\\n\";\n\"downloadPrompt\" = \"Für die optimale Leistung müssen einige Dateien\\\nheruntergeladen werden. Wenn Sie sich dagegen entscheiden, wird das\\\nLaden jeder Seite spürbar länger dauern. Wollen Sie die benötigten\\\nDateien herunterladen?\\\n\";\n\"downloadPrompt_no\" = \"Nein\";\n\"downloadPrompt_ok\" = \"Ja\";\n\"downloadPrompt_title\" = \"Möchten Sie die benötigten Dateien herunterladen?\";\n\"downloadTabletPrompt\" = \"Wir haben kürzlich verbesserte Bilder für Tablets hinzugefügt.\\\nWollen Sie diese Bilder jetzt herunterladen?\\\n\";\n\"edit_tag\" = \"Schlagwort bearbeiten\";\n\"email_us\" = \"Wenn Ihre Frage oben nicht beantwortet werden konnte und Sie\\\nUnterstützung benötigen, dann können Sie uns eine E-Mail an quranandroid@gmail.com senden.\\\nBitte haben Sie Verständnis dafür, dass wir sehr viele E-Mails bekommen und wir möglicherweise\\\nnicht im Stande sein werden alle zu beantworten.\\\n\";\n\"error_getting_translation_list\" = \"Es ist zurzeit nicht möglich die Liste\\\nmit den Übersetzungen herunterzuladen. Versuchen Sie es später erneut.\\\n\";\n\"export_data_error\" = \"Fehler beim Exportieren von Daten\";\n\"exported_data\" = \"In %1$@ exportierte Daten\";\n\"extracting_title\" = \"Dateien werden verarbeitet…\";\n\"found_in_sura\" = \"Gefunden in Sure (%1$d) %2$@: %3$d (Seite %4$d)\";\n\"from\" = \"Von\";\n\"get_arabic_search_db\" = \"Lade die arabische Such-Datenbank herunter\";\n\"get_translations\" = \"Übersetzungen herunterladen\";\n\"gotoPage\" = \"Gehe zur Seite\";\n\"help\" = \"\\\n<b>Wie starte ich die Wiedergabe der Audio-Dateien?</b>\\\n<br/>Öffnen Sie eine beliebige Seite im Quran. Berühren Sie nun den Bildschirm einmal.\\\nAm unteren Bildschirmrand werden ein Abspiel-Knopf in der Form eines Pfeiles und der Name\\\ndes Rezitators erscheinen. Berühren Sie den Namen des Rezitators um zwischen den Rezitatoren\\\nzu wechseln.\\\nDrücken Sie den Abspiel-Knopf um die ausgewählte Seite oder Sure herunterzuladen, falls Sie\\\ndas bereits getan haben, wird die Seite oder Sure sofort wiedergegeben, ansonsten müssen Sie\\\nsich gedulden bis die Dateien heruntergeladen wurden, danach wird auch sofort die Wiedergabe\\\ngestartet.\\\n<br/>\\\n<br/><b>Wie kann ich eine Übersetzung öffnen?</b>\\\n<br/>Öffnen Sie eine beliebige Seite im Quran. Berühren Sie nun den Bildschirm einmal.\\\nAm oberen Bildschirmrand wird eine kleine Weltkugel erscheinen. Um nun die Übersetzungen zu\\\nöffnen müssen Sie auf die Weltkugel tippen. Möglicherweise wird bei Ihnen keine Weltkugel\\\nangezeigt,\\\nsondern nur ein Symbol mit drei Punkten, in solch einem Fall tippen Sie auf die drei Punkte und\\\nwählen\\\ndie Option \\'Übersetzungen\\' aus.).\\\n<br/>\\\nFalls Sie keine Übersetzung heruntergeladen haben, wird Sie dieser Vorgang zu einer Seite\\\nweiterleiten auf der Sie die Übersetzungen herunterladen können. Wählen Sie auf dieser Seite\\\nnun eine Übersetzung aus. Durch das bloße antippen der Übersetzung wird das Herunterladen\\\nbeginnen. Sobald das Herunterladen abgeschlossen ist können Sie zur vorherigen Seite\\\nzurückkehren\\\nund erneut auf die Weltkugel tippen beziehungsweise die Option \\'Übersetzungen\\' auswählen.\\\n<br/>\\\n<br/><b>Wie füge ich ein Lesezeichen hinzu?</b>\\\n<br/>Öffnen Sie eine beliebige Seite im Quran. Berühren Sie nun den Bildschirm einmal.\\\nIn der oberen rechten Ecke werden Sie daraufhin einen kleinen Stern sehen. Berühren Sie nun\\\nden Stern um ein Lesezeichen hinzuzufügen. Der Stern wird dadurch ausgefüllt. Um das Lesezeichen\\\nwieder zu entfernen, müssen Sie den Stern nochmals berühren.\\\n<br/>\\\n<br/><b>Wie mache ich den Text größer?</b>\\\n<br/>Für die arabischen Seiten können Sie Ihr Handy ins Querformat drehen. Das macht den Text\\\ngrößer. Um den Text von Übersetzungen zu vergrößern, müssen Sie in die Einstellungen gehen und\\\ndort die gewünschte Schrittgröße auswählen.\\\n<br/>\\\n<br/><b>Wie teile ich einen Vers?</b>\\\n<br/>Um einen Vers zu teilen müssen Sie die Original Schrift öffnen, dürfen also keine\\\nÜbersetzung ansehen, halten Sie dann einen Vers solange gedrückt bis nicht ein Kontextmenü\\\nerscheint. In diesem Menu können Sie nun ein Lesezeichen hinzufügen, den Vers teilen, die\\\nÜbersetzung anzeigen lassen oder den Vers kopieren.\\\n<br/>\\\n<br/><b>Malayalm/Tamil/Bangla/Urdu Schriften funktionieren nicht!</b>\\\n<br/>Leider unterstützen Android Versionen vor 4.0 diese Schriften nicht, da können\\\nwir Ihnen leider auch nicht weiterhelfen.\\\n\";\n\"help_title\" = \"Häufig gestellte Fragen\";\n\"highlighting_database\" = \"Benötigte Dateien\";\n\"import_data\" = \"Daten importieren\";\n\"import_data_and_override\" = \"Wenn Sie diese Datei importieren, ersetzt sie alle Ihre Lesezeichen durch %1$d Lesezeichen und %2$d Tags. Importieren?\";\n\"import_data_error\" = \"Ungültige Sicherungsdatei (oder Sicherungsdatei kann nicht gelesen werden).\";\n\"import_data_permissions_error\" = \"Die Sicherungsdatei kann aufgrund eines Berechtigungsfehlers nicht gelesen werden.\";\n\"import_successful\" = \"Import erfolgreich\";\n\"juz2_description\" = \"Juz\\' %1$@\";\n\"kitkat_external_message\" = \"Aufgrund von Systemeinschränkungen durch Android, werden im\\\nFalle der Speicherung der Daten auf einer externen SD-Karte, diese Daten nach einer\\\nDeinstallation oder einer Löschung der Applikationsdaten dauerhaft gelöscht und es ist ein\\\nerneutes Herunterladen erforderlich. Sind Sie sicher, dass Sie die externe SD-Karte benutzen\\\nwollen?\\\n\";\n\"loading\" = \"Lade…\";\n\"madani\" = \"Medinensisch\";\n\"makki\" = \"Mekkanisch\";\n\"menu_about\" = \"Über uns\";\n\"menu_back_to_page\" = \"Quran anzeigen\";\n\"menu_bookmarks\" = \"Lesezeichen\";\n\"menu_bookmarks_ayah\" = \"Vers-Lesezeichen\";\n\"menu_bookmarks_page\" = \"Seiten-Lesezeichen\";\n\"menu_get_translations\" = \"Lade die Übersetzungen\";\n\"menu_help\" = \"Hilfe\";\n\"menu_jump\" = \"Springe zu\";\n\"menu_jump_last_page\" = \"Letzte Seite\";\n\"menu_other_apps\" = \"Andere Apps\";\n\"menu_search\" = \"Suche\";\n\"menu_settings\" = \"Einstellungen\";\n\"menu_show_date\" = \"Datum anzeigen\";\n\"menu_sort\" = \"Sortieren\";\n\"menu_sort_date\" = \"Hinzufügedatum\";\n\"menu_sort_group_by_tags\" = \"Gruppieren nach Tags\";\n\"menu_sort_location\" = \"Position im Quran\";\n\"menu_translation\" = \"Übersetzung anzeigen\";\n\"more_translations\" = \"Weitere Übersetzungen\";\n\"move_down\" = \"Abwärts bewegen\";\n\"move_up\" = \"Aufsteigen\";\n\"need_translation\" = \"Sie haben noch keine Übersetzung/Koranexegese heruntergeladen.\\\n\";\n\"new_tag\" = \"Neues Schlagwort\";\n\"next\" = \"Weiter\";\n\"no_arabic_search_available\" = \"Sie haben das arabische Such-Paket noch nicht\\\nheruntergeladen. Bitte laden Sie dieses herunter und versuchen Sie es danach erneut.\\\n\";\n\"no_results\" = \"Es wurden keine Resultate für \\\"%@\\\" gefunden.\";\n\"not_tagged\" = \"Noch kein Schlagwort hinzugefügt\";\n\"notification_channel_audio\" = \"Koran-Rezitation\";\n\"notification_channel_download\" = \"Koran Downloads\";\n\"notification_download_canceled\" = \"Download abgebrochen\";\n\"page_description\" = \"Seite %1$@, Juz\\' %2$@\";\n\"pause\" = \"Pause\";\n\"play\" = \"Abspielen\";\n\"play_apply\" = \"Anwenden\";\n\"play_apply_and_play\" = \"Anwenden und Abspielen\";\n\"play_each_verse\" = \"Abspielen Sie jede Ayah:\";\n\"play_from_here\" = \"Ab hier abspielen\";\n\"play_restrict_range\" = \"Nur die oben genannten Verse abspielen\";\n\"play_verses_range\" = \"Abspielen einer Reihe von Ayat:\";\n\"playback_prompt_title\" = \"Starten Sie die Wiedergabe von:\";\n\"playback_speed\" = \"Wiedergabegeschwindigkeit:\";\n\"please_grant_permissions\" = \"Bitte erlauben Sie dies in den Anwendungseinstellungen\";\n\"please_wait\" = \"Bitte warten...\";\n\"prefs_app_location_summary\" = \"Wählen Sie den Speicherort der Dateien aus.\";\n\"prefs_app_location_title\" = \"Speicherort\";\n\"prefs_app_size\" = \"Der vom Programm verwendete Speicherplatz ist\";\n\"prefs_audio_manager_summary\" = \"Verwalten Sie Ihre Audiodateien.\";\n\"prefs_ayah_before_translation_summary\" = \"Das arabische Original vor jedem übersetzten\\\nVers anzeigen.\\\n\";\n\"prefs_ayah_before_translation_title\" = \"Original vor dem Vers\";\n\"prefs_calculating_app_size\" = \"Die Größe des Programms wird berechnet\";\n\"prefs_category_advanced\" = \"Erweiterte Optionen\";\n\"prefs_category_advanced_summary\" = \"Lesezeichen importieren/exportieren, Koran-Datenverzeichnis festlegen usw.\";\n\"prefs_category_display_settings\" = \"Bildschirmoptionen\";\n\"prefs_category_download\" = \"Downloadoptionen\";\n\"prefs_category_dual_screen\" = \"Voreinstellungen für zwei Seiten\";\n\"prefs_category_reading\" = \"Lese Optionen\";\n\"prefs_category_translation\" = \"Übersetzungsoptionen\";\n\"prefs_copying_app_files\" = \"Programmdateien werden kopiert\";\n\"prefs_display_marker_summary\" = \"Ein Fenster anzeigen beim Erreichen eines neuen Juz\\',\\\neiner neuen Hizb, etc.\\\n\";\n\"prefs_display_marker_title\" = \"Meilenstein-Fenster anzeigen\";\n\"prefs_download_amount_summary\" = \"Bevorzugte Downloadgröße für nicht\\\nunterbrechungsfreie Wiedergabe.\\\n\";\n\"prefs_download_amount_title\" = \"Downloadgröße\";\n\"prefs_dual_page_mode_disabled\" = \"Im Querformat wird nur eine Seite dargestellt.\";\n\"prefs_dual_page_mode_enabled\" = \"Im Querformat werden zwei Seiten nebeneinander\\\ndargestellt.\\\n\";\n\"prefs_dual_page_mode_title\" = \"Tablet-Modus\";\n\"prefs_err_moving_app_files\" = \"Die Programmdateien konnten nicht verschoben werden.\\\n\";\n\"prefs_export_summary\" = \"Exportieren einer Kopie von Lesezeichen und Tags\";\n\"prefs_export_title\" = \"Exportieren\";\n\"prefs_highlight_bookmarks_summary\" = \"Markieren von mit Lesezeichen versehenen Ayahs beim Lesen\";\n\"prefs_highlight_bookmarks_title\" = \"Lesezeichen hervorheben\";\n\"prefs_import_summary\" = \"Lesezeichen und Tags importieren\";\n\"prefs_import_title\" = \"Importieren\";\n\"prefs_megabytes_int\" = \"%1$d MB\";\n\"prefs_new_background_title\" = \"Neuen Hintergrund verwenden\";\n\"prefs_night_mode_background_brightness_summary\" = \"Helligkeit der Seite im Nachtmodus.\";\n\"prefs_night_mode_background_brightness_title\" = \"Helligkeit des Hintergrunds\";\n\"prefs_night_mode_summary\" = \"Es werden ein dunkler Hintergrund und eine helle Schrift\\\nbenutzt.\\\n\";\n\"prefs_night_mode_text_brightness_summary\" = \"Die Helligkeit des Textes im Nachtmodus.\\\n\";\n\"prefs_night_mode_text_brightness_title\" = \"Helligkeit des Textes\";\n\"prefs_night_mode_title\" = \"Nachtmodus\";\n\"prefs_no_enough_space_to_move_files\" = \"Sie haben nicht genug Speicherplatz um die\\\nDateien zu verschieben.\\\n\";\n\"prefs_overlay_page_info_summary\" = \"Blendet die Seitennummer, den Namen der Sure und\\\ndie Juz\\' Nummer während dem Lesen ein.\\\n\";\n\"prefs_overlay_page_info_title\" = \"Seiteninfo anzeigen\";\n\"prefs_page_type_summary\" = \"Wählen Sie die Art der Leseseiten\";\n\"prefs_page_type_title\" = \"Seitentyp (experimentell)\";\n\"prefs_preview\" = \"Vorschau\";\n\"prefs_sdcard_external\" = \"Externe SD-Karte %1$d\";\n\"prefs_sdcard_internal\" = \"Interner Speicher\";\n\"prefs_send_logs_summary\" = \"Senden von Debug-Protokollen an den Entwickler\";\n\"prefs_send_logs_title\" = \"Protokolle senden\";\n\"prefs_split_page_and_translation_summary\" = \"Im Doppelseitenmodus mit Übersetzungen werden die Koranseite und die Übersetzung angezeigt\";\n\"prefs_split_page_and_translation_title\" = \"Koran und Übersetzung im Doppelmodus\";\n\"prefs_streaming_summary\" = \"Wenn möglich, Audio streamen\";\n\"prefs_streaming_title\" = \"Streaming\";\n\"prefs_sura_translated_name_summary\" = \"Zeigen Sie die Übersetzung des Namens der Sūra an\";\n\"prefs_sura_translated_name_title\" = \"Sūra übersetzt Name\";\n\"prefs_translation_text_title\" = \"Schrittgröße der Übersetzungen\";\n\"prefs_translations\" = \"Übersetzungen\";\n\"prefs_translations_summary\" = \"Verwalte und lade Übersetzungen herunter.\";\n\"prefs_use_arabic_summary_on\" = \"Das Programm wird ins Arabische umgestellt\";\n\"prefs_use_arabic_title\" = \"Arabischer Modus (الوضع العربي)\";\n\"prefs_use_dyslexic_font_summary\" = \"Display translations in dyslexia friendly font\";\n\"prefs_use_dyslexic_font_title\" = \"Dyslexia friendly font\";\n\"prefs_volume_key_navigation_summary\" = \"Wechseln Sie zwischen verschiedenen Seiten\\\nmittels der Lautstärketasten.\\\n\";\n\"prefs_volume_key_navigation_title\" = \"Navigation mittels Lautstärketasten\";\n\"previous\" = \"Vorherige\";\n\"process_progress\" = \"Datei wird verarbeitet %1$d / %2$d\";\n\"qarilist_dismiss\" = \"Ablehnen\";\n\"qarilist_gapless\" = \"kontinuierlich\";\n\"qarilist_gapped\" = \"nicht-kontinuierlich\";\n\"qarilist_qaris_with_downloads\" = \"Qaris mit Downloads\";\n\"qarilist_ready_to_play\" = \"Bereit zum Zuhören\";\n\"qarilist_select_qari\" = \"Wählen Sie einen Qari\";\n\"qarilist_selected\" = \"Ausgewählte\";\n\"quran_ayah\" = \"Vers %1$d\";\n\"quran_ayah_details\" = \"%1$@ - Ayah %2$@, Ğuzʾ %3$@\";\n\"quran_hizb\" = \"Hizb\";\n\"quran_juz2\" = \"Juz\\'\";\n\"quran_nos\" = \"½\";\n\"quran_page\" = \"Seite\";\n\"quran_rob3\" = \"¼\";\n\"quran_sura\" = \"Sūrah\";\n\"quran_sura_title\" = \"Sure %1$@\";\n\"quran_talt_arb3\" = \"¾\";\n\"quranSearchType\" = \"Quranverse\";\n\"recent_pages\" = \"Neueste Seiten\";\n\"recite_from_here\" = \"Ab hier rezitieren\";\n\"remove_button\" = \"Entfernen\";\n\"remove_dlg_msg\" = \"Sind Sie sicher, dass Sie die %1$@ entfernen wollen?\";\n\"remove_dlg_title\" = \"Übersetzung entfernen?\";\n\"repeatValues[0]\" = \"einmal\";\n\"repeatValues[1]\" = \"zweimal\";\n\"repeatValues[2]\" = \"dreimal\";\n\"repeatValues[3]\" = \"unendlich\";\n\"scoped_storage_message\" = \"Aufgrund von Android-Änderungen zur Erhöhung des Datenschutzes kann das Kopieren von Dateien außerhalb der App-Verzeichnisse den Zugriff auf die Daten von Quran für Android in zukünftigen Android-Versionen verhindern. Sind Sie sicher, dass Sie diesen Pfad verwenden möchten?\";\n\"sdcard_error\" = \"Die SD-Karte konnte nicht gefunden werden. Bitte setzen Sie die Karte\\\nerneut ein und versuchen Sie es nochmals.\\\n\";\n\"search_data\" = \"Suche Dateien\";\n\"search_entire_mushaf\" = \"Suche im gesamten Mushaf\";\n\"search_full_results\" = \"Vollständige Ergebnisse\";\n\"search_hint\" = \"Durchsuche den Quran\";\n\"search_key\" = \"Drücken Sie die Suchtaste zum Nachschlagen eines Verses\";\n\"see_tafseer_of_verse\" = \"Der Tafseer dieser Ayah ist im Tafseer der Ayah %d enthalten (Zum Erweitern klicken).\";\n\"share_ayah\" = \"Vers Link teilen\";\n\"share_ayah_text\" = \"Versinhalt teilen\";\n\"starting_page_label\" = \"Anfang der Seite\";\n\"stop\" = \"Stoppen\";\n\"storage_permission_please_restart\" = \"Bitte starten Sie die App neu, damit dies wirksam wird.\";\n\"storage_permission_rationale\" = \"Quran für Android möchte Ihre Erlaubnis, seine Daten auf einem externen Speicher zu speichern. Quran für Android funktioniert auch ohne diese Erlaubnis, aber wenn Sie die Daten löschen oder die App deinstallieren, werden alle heruntergeladenen Seiten, Audios und Daten entfernt. Erlauben Sie Quran für Android die Speicherung?\";\n\"sura_ayah_notification_str\" = \"Sure %1$@, Vers %2$d\";\n\"sura_ayah_sharing_str\" = \"Sure %1$@: %2$d\";\n\"tag_ayah\" = \"Ein Schlagwort zum Vers hinzufügen\";\n\"tag_blank_tag_error\" = \"Tag-Namen dürfen nicht leer sein!\";\n\"tag_bookmark\" = \"Ein Schlagwort zum Lesezeichen hinzufügen\";\n\"tag_dlg_title\" = \"Schlagwort\";\n\"tag_duplicate_tag_error\" = \"Der Tag-Name existiert bereits!\";\n\"tag_name\" = \"Name\";\n\"timing_database\" = \"Benötigte Dateien\";\n\"to\" = \"Bis\";\n\"translation_ayah\" = \"Vers Übersetzung/Koranexegese\";\n\"translation_dialog_later\" = \"Später\";\n\"translation_dialog_yes\" = \"Ja\";\n\"translation_updates_available\" = \"Es ist ein Update für eine Ihrer Übersetzungen\\\nvorhanden. Wollen Sie die Übersetzung jetzt aktualisieren?\\\n\";\n\"undo\" = \"Rückgängig machen\";\n\"update_available\" = \"Update vorhanden\";\n\"warning\" = \"Achtung\";\n"
  },
  {
    "path": "Core/Localization/Resources/de.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>audio_manager_files_downloaded</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_files_downloaded@</string>\n            <key>audio_manager_files_downloaded</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>1 Sure heruntergeladen</string>\n                <key>other</key>\n                <string>%1$d Suren heruntergeladen</string>\n            </dict>\n        </dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Resultat für \\&quot;%1$d\\&quot;:</string>\n                <key>other</key>\n                <string>%2$d Resultate für \\&quot;%1$d\\&quot;:</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>%d Vers</string>\n                <key>other</key>\n                <string>%d Verse</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/de.lproj/Localizable.strings",
    "content": "\n\n// MARK: - General\n\n// Metadata: Translated by ChatGPT; human review required.\n\"button.done\" = \"Fertig\";\n// Metadata: Translated by ChatGPT; human review required.\n\"button.delete\" = \"Löschen\";\n\n// MARK: - Errors\n\n// Metadata: Translated by ChatGPT; human review required.\n\"error.dialog.title\" = \"Fehler\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.connection_lost\" = \"Internetverbindung ist verloren. Bewegen Sie sich an einen Ort, wo eine stabilere Verbindung verfügbar ist, oder warten Sie, bis die Verbindung wieder stabil ist.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.international_roaming_off\" = \"Internationales Roaming ist nicht erlaubt. Ändern Sie die Einstellungen für internationales Roaming oder schalten Sie WLAN ein.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.not_connected_to_internet\" = \"Nicht mit dem Internet verbunden. Schalten Sie WLAN ein oder erlauben Sie die Datenverbindung über Mobilfunk.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.general\" = \"Hoppla! Etwas ist schief gelaufen. Bitte versuchen Sie es erneut.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.no_disk_space\" = \"Kein verfügbarer Speicherplatz auf der Festplatte, um die Downloads zu speichern.\";\n\n// MARK: - Quran\n\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah\" = \"Vers\";\n// Metadata: Translated by ChatGPT; human review required.\n\"surah\" = \"Sure\";\n// Metadata: Translated by AI; human review required.\n\"quran_alquran\" = \"Der Koran\";\n\n// MARK: - Translation\n\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.translation\" = \"Übersetzung\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.transliteration\" = \"Transliteration\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.selectedTranslations\" = \"Ausgewählt\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.translator\" = \"Übersetzer: \";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.see-referenced-verse\" = \"Siehe Ayah %d.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.read-more\" = \"Mehr lesen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-retrieval\" = \"Hoppla! Etwas ist schiefgelaufen. Wir konnten die Übersetzung nicht abrufen.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-not-available\" = \"Keine Übersetzung für diese Ayah verfügbar.\";\n\n// MARK: - Search\n\n// Metadata: Translated by ChatGPT; human review required.\n\"search.recents.title\" = \"Letzte Suchanfragen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.popular.title\" = \"Probieren Sie die Suche mit\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.placeholder.text\" = \"Sure, Vers, Übersetzung, Tafsir und Nummern\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.result.count\" = \"%@ (%d)\";\n\n// MARK: - Settings\n\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.write_review\" = \"Eine App Store-Bewertung schreiben...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.contact_us\" = \"Kontaktieren Sie uns\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.donate\" = \"Spenden\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.share_app\" = \"Teilen Sie die App...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.app_version\" = \"App-Version\";\n\n// MARK: - Quran Menu\n\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabic\" = \"Arabisch\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translation\" = \"Übersetzung/Tafsir\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.select_translation\" = \"Übersetzungen/Tafsir auswählen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer\" = \"Wortübersetzungszeiger\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer.select_translation\" = \"Zeigeranzeige\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.fontSizeLetter\" = \"A\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translationFontSize\" = \"Übersetzung Größe\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabicFontSize\" = \"Quran-Größe\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.twoPages\" = \"2 Seiten nebeneinander (im Querformat)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.verticalScrolling\" = \"Vertikales Scrollen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.theme_settings\" = \"Themen & Einstellungen\";\n\n// MARK: - Theme\n\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.light\" = \"Hell\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.dark\" = \"Dunkel\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto\" = \"Auto\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto.message\" = \"Quran-App folgt den Erscheinungseinstellungen Ihres iPhones\";\n\n// MARK: - Tabs\n\n// Metadata: Translated by ChatGPT; human review required.\n\"tab.notes\" = \"Notizen\";\n\n// MARK: - Update\n\n// Metadata: Translated by ChatGPT; human review required.\n\"update.filesystem.title\" = \"Datenbanken aktualisieren...\";\n\"downloading_title\" = \"Dateien werden heruntergeladen…\";\n\n// MARK: - Reciters\n\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.title\" = \"Wählen Sie den Rezitator zum Zuhören\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.recent\" = \"Kürzlich\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.downloaded\" = \"Heruntergeladen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.all\" = \"Alle\";\n\n// MARK: - Audio\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.action.modify\" = \"Ändern\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.message\" = \"Audio wird von %@ bis %@ abgespielt\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.downloading.message\" = \"Audio von %@ bis %@ wird heruntergeladen\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing-verses.label\" = \"Wiedergabe der Verse\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.adjust-end-verse-to-the-end.label\" = \"Das Ende des Verses an das Ende anpassen\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-start-verse\" = \"Startvers auswählen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-end-verse\" = \"Endvers auswählen\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount\" = \"Herunterladen/Abspielen bis zu\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount.description\" = \"Beim Abspielen von Audio wird bis zum Ende des\";\n\n// MARK: - Bookmarks\n\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.title\" = \"Lesezeichen hinzufügen...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.text\" = \"Wenn Sie den Koran lesen, tippen Sie auf die Lesezeichen-Taste, um die aktuelle Seite zu markieren.\";\n\n// MARK: - Notes\n\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.title\" = \"Ayah-Highlights hinzufügen...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.text\" = \"Tippen und halten Sie auf eine Ayah. Sie können die Auswahl erweitern, um mehrere Ayat einzuschließen, und dann auf die Lesezeichen-Taste tippen.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.verses-count\" = \"(+%d Verse)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.title\" = \"Highlight löschen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.body\" = \"Die zugehörige Notiz wird ebenfalls gelöscht.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.title\" = \"iCloud-Synchronisation\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.body\" = \"Die App verwendet iCloud, um Lesezeichen und Notizen auf Ihren Geräten zu synchronisieren. Sie können es in den iCloud-Einstellungen Ihres Geräts deaktivieren.\";\n\n// MARK: - Ayah Menu\n\n\"ayah.menu.copy\" = \"Kopieren\";\n\"ayah.menu.share\" = \"Teilen …\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-juz\" = \"bis zum Ende von Juz'\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-surah\" = \"bis zum Ende der Sure\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-page\" = \"bis zum Ende der Seite\";\n// Metadata: Translated by AI; human review required.\n\"ayah.menu.play-end-quran\" = \"bis zum Ende des Korans\";\n\"ayah.menu.repeat\" = \"Wiederholen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verse\" = \"ausgewählter Vers\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verses\" = \"ausgewählte Verse\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight\" = \"Hervorheben\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight-select-color\" = \"Farbe wählen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.add-note\" = \"Notiz hinzufügen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.edit-note\" = \"Notiz bearbeiten\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-note\" = \"Notiz löschen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-highlight\" = \"Hervorhebung löschen\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.short\" = \"Auswählen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.long\" = \"Als aktuellen Mushaf festlegen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.title\" = \"Mushaf auswählen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selection-description\" = \"Tippen Sie auf einen Mushaf für mehr Informationen.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.hafs\" = \"Hafs Mushaf\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.pages.604\" = \"604 Seiten\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.lines.15\" = \"15-Zeilen-Seite\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.supported\" = \"Wort-für-Wort-Übersetzung\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.not-supported\" = \"Keine Wort-für-Wort-Übersetzung\";\n\n// Hafs 1405\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.title\" = \"Hafs, klassisches Medina, 1405 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.description\" = \"Der klassische Hafs Mushaf, 1405 Hijri in Medina herausgegeben. Die App hat diese Version lange Zeit angeboten.\\nAus dem König Fahd Koran-Druckkomplex.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.issue\" = \"Herausgegeben im Jahr 1405 Hijri\";\n\n// Hafs 1421\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.title\" = \"Hafs, Medina, 1421 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.description\" = \"Der Hafs Mushaf, 1421 Hijri in Medina herausgegeben. Vom König Fahd Koran-Druckkomplex.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.issue\" = \"Herausgegeben im Jahr 1421 Hijri\";\n\n// Hafs 1440\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.title\" = \"Hafs, Medina, 1440 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.description\" = \"Der Hafs Mushaf, 1440 Hijri in Medina herausgegeben. Vom König Fahd Koran-Druckkomplex.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.issue\" = \"Herausgegeben im Jahr 1440 Hijri\";\n\n// Hafs Tajweed\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.title\" = \"Hafs, Tajweed\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.description\" = \"Der Tajweed Hafs Mushaf. Al-Quran Al-Kareem - Ausgabe Dar al-Marefa.\";\n\n// MARK: - Diagnostics\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.title\" = \"Diagnose\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.details\" = \"Diese Einstellungen werden vom App-Entwickler speziell für Debugging- und Diagnosezwecke verwendet.\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.share_app_logs\" = \"App-Protokolle teilen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs\" = \"Debug-Logging aktivieren\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs.details\" = \"Die Einstellung wird beim nächsten Neustart der App wirksam.\";\n\n\n// MARK: - What's new\n\n// Metadata: Translated by ChatGPT; human review required.\n\"new.title\" = \"Was gibt's Neues\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.action\" = \"Fortfahren\";\n\n// Mushafs\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs\" = \"Neue Mushafs:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs.details\" = \"* Tajweed Hafs Mushaf: Al-Quran Al-Kareem - Dar al-Marefa Edition.\\n* Medina Mushaf 1421 hijri.\\n* Medina Mushaf 1440 hijri.\\n* Außerdem weiterhin die klassische Version von 1405 hijri genießen.\";\n\n// Reciters\n// Metadata: Translated by ChatGPT; human review required.\n\"new.reciters\" = \"Neue Rezitatoren:\";\n\n// Miscellaneous\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous\" = \"Verschiedenes:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous.details\" = \"* Aktualisiertes App-Design.\\n* Verbesserte Suchfunktion (neuer Algorithmus in Kürze).\\n* Unterstützung für vietnamesische Lokalisierung.\\n* Erweiterter Zugang zu Audiooptionen verfügbar, wenn keine Rezitation läuft.\\n* App ist jetzt Open Source: https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades\" = \"Audio:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades.details\" = \"* Einstellbare Rezitationsgeschwindigkeit: 0,5x, 0,75x, 1x, 1,25x, 1,5x - danke an @adnan29979.\\n* Die Wiedergabe merkt sich Ihre bevorzugte Geschwindigkeit - danke an @adnan29979.\";\n\n// Personalization\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization\" = \"Lesethemen:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization.details\" = \"* Unterstützung für mehrere Themen. Öffnen Sie eine Seite des Quran -> Menü oben rechts -> Themen & Einstellungen.\\n* Verwenden Sie \\\"Original\\\", wenn Sie zum vorherigen Stil zurückkehren möchten.\";\n\n// Library & Navigation\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation\" = \"Bibliothek & Navigation:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation.details\" = \"* Sortieren Sie Suren und Juz auf der Startseite und zeigen Sie Surennummern an, damit Sie schneller zu dem gelangen, was Sie brauchen - danke an @yismailuofa.\";\n"
  },
  {
    "path": "Core/Localization/Resources/de.lproj/Readers.strings",
    "content": "\"qari_abdulaziz_zahrani_gapless\" = \"Abdulaziz Az-Zahrani\";\n\"qari_abdulbaset\" = \"Abd Al-Basit (gespalten)\";\n\"qari_abdulbaset_gapless\" = \"Abd Al-Basit\";\n\"qari_abdulbaset_mujawwad\" = \"Abd Al-Basit Mujawwad (gespalten)\";\n\"qari_abdulbaset_mujawwad_gapless\" = \"Abd Al-Basit Mujawwad\";\n\"qari_abdulhadi_kanakeri_gapless\" = \"AbdulHadi Kanakeri\";\n\"qari_abdullah_matroud_gapless\" = \"Abdullah Matroud\";\n\"qari_abdulmuhsin_qasim_gapless\" = \"Abdul Mohsen Al-Qasim\";\n\"qari_abdulrahman_alshahat_gapless\" = \"Abdulrahman Al-Shahat\";\n\"qari_abdurrashid_sufi_gapless\" = \"Abdur-Rashid Sufi\";\n\"qari_afasy\" = \"Mishary Al-Afasy (gespalten)\";\n\"qari_afasy_cali_gapless\" = \"Mishari Al-Afasy (Kalifornien)\";\n\"qari_afasy_gapless\" = \"Mishary Al-Afasy\";\n\"qari_ahmad_nauina_gapless\" = \"Ahmad Nauina\";\n\"qari_ahmed_al_nufais_gapless\" = \"Ahmed Al-Nufais\";\n\"qari_ajamy_gapless\" = \"Ahmed ibn Ali al-Ajamy\";\n\"qari_akram_al_alaqmi\" = \"Akram Al-Alaqmi\";\n\"qari_ali_hajjaj_alsouasi_gapless\" = \"Ali Hajjaj Alsouasi\";\n\"qari_ali_jaber_gapless\" = \"Ali Jaber\";\n\"qari_alijon_qari_gapless\" = \"Alijon Qari\";\n\"qari_aloosi_gapless\" = \"Abdul Rahman Aloosi\";\n\"qari_alzain_ahmad_gapless\" = \"Alzain Muhammad Ahmad\";\n\"qari_ayman_suwaid_gapless\" = \"Ayman Suwaid\";\n\"qari_ayman_suwaid_gapped\" = \"Ayman Suwaid (gespalten)\";\n\"qari_ayyoub\" = \"Muhammad Ayyoub (gespalten)\";\n\"qari_ayyoub_gapless\" = \"Muhammad Ayyoub\";\n\"qari_aziz_alili_gapless\" = \"Aziz Alili\";\n\"qari_badr_al_turki_gapless\" = \"Badr Al-Turki\";\n\"qari_bandar_baleela_gapless\" = \"Bandar Baleela\";\n\"qari_basfar\" = \"Abdullah Basfar (gespalten)\";\n\"qari_basfar_gapless\" = \"Abdullah Basfar\";\n\"qari_dussary\" = \"Yasser Ad-Dussary (gespalten)\";\n\"qari_fares_abbad_gapless\" = \"Fares Abbad\";\n\"qari_farman_shawani_gapless\" = \"Farman Shawani\";\n\"qari_hady_toure_gapless\" = \"Hady Toure\";\n\"qari_hani_rifai\" = \"Hani Ar-Rifai (gespalten)\";\n\"qari_hani_rifai_gapless\" = \"Hani Ar-Rifai\";\n\"qari_hudhayfi\" = \"Ali Al-Hudhaify (gespalten)\";\n\"qari_hudhayfi_gapless\" = \"Ali Al-Hudhaify\";\n\"qari_husary_gapless\" = \"Husary\";\n\"qari_husary_iza3a_gapless\" = \"Husary Broadcast\";\n\"qari_husary_muallim_gapless\" = \"Husar (Muallim)\";\n\"qari_husary_mujawwad\" = \"Husary Mujawwad (gespalten)\";\n\"qari_husary_mujawwad_gapless\" = \"Husary (Mujawwad)\";\n\"qari_ibrahim_alakhdar_gapless\" = \"Ibrahim Al-Akhdar\";\n\"qari_idrees_abkar_gapless\" = \"Idrees Abkar\";\n\"qari_jibreel\" = \"Muhammad Jibreel (gespalten)\";\n\"qari_jibreel_gapless\" = \"Muhammad Jibreel\";\n\"qari_juhany_gapless\" = \"Abdullah Al-Juhany\";\n\"qari_khaled_muhanna_gapless\" = \"Khaled Al-Muhanna\";\n\"qari_khalid_jalil_gapless\" = \"Khalid Al-Jalil\";\n\"qari_khalid_qahtani_gapless\" = \"Khalid Al Qahtani\";\n\"qari_khalifa_taniji_gapless\" = \"Khalifa Taniji\";\n\"qari_luhaidan_gapless\" = \"Muhammad Al-Luhaidan\";\n\"qari_mahmoud_ali_albana_gapless\" = \"Mahmoud Ali al Bana\";\n\"qari_minshawi_mujawwad\" = \"Minshawy Mujawwad (gespalten)\";\n\"qari_minshawi_mujawwad_gapless\" = \"Minshawy Mujawwad\";\n\"qari_minshawi_murattal_gapless\" = \"Minshawi Murattal\";\n\"qari_mishari_walk_gapless\" = \"Mishari & Ibrahim Walk (Englische)\";\n\"qari_mohammad_altablawi_gapless\" = \"Mohammad al Tablawy\";\n\"qari_mokhtasar_asmari_gapless\" = \"Abdullah Al-Asmari (Arabischer Kommentar)\";\n\"qari_mostafa_ismaeel_gapless\" = \"Mostafa Ismaeel\";\n\"qari_muaiqly\" = \"Maher Al Muaiqly (gespalten)\";\n\"qari_muaiqly_gapless\" = \"Maher Al Muaiqly\";\n\"qari_muaiqly_haramain_gapless\" = \"Maher Al Muaiqly (Haramain)\";\n\"qari_muhammad_rashad_shereef_gapless\" = \"Muhammad Rashad Al-Scherif\";\n\"qari_nabil_rifa3i_gapless\" = \"Nabil Ar-Rifai\";\n\"qari_noreen_siddiq_gapless\" = \"Noreen Siddiq\";\n\"qari_peshawa_qadir_al_qurdi_gapless\" = \"Peshewa Qadir al-Kurdi\";\n\"qari_qatami_gapless\" = \"Nasser Al Qatami\";\n\"qari_raad_al_kurdi_gapless\" = \"Raad Al-Kurdi\";\n\"qari_saad_al_ghamdi\" = \"Saad Al-Ghamdi (gespalten)\";\n\"qari_saad_al_ghamidi_gapless\" = \"Saad Al-Ghamdi\";\n\"qari_sahl_yaseen_gapless\" = \"Sahl Yaseen\";\n\"qari_salah_budair_gapless\" = \"Salah Budair\";\n\"qari_salah_bukhatir_gapless\" = \"Salah Bukhatir\";\n\"qari_shatri\" = \"Abu Bakr Ash-Shatri (gespalten)\";\n\"qari_shatri_gapless\" = \"Abu Bakr Ash-Shatri\";\n\"qari_shuraym\" = \"Saood Ash-Shuraym (gespalten)\";\n\"qari_shuraym_gapless\" = \"Saood Ash-Shuraym\";\n\"qari_suadis\" = \"Abdurrahmaan As-Sudais (gespalten)\";\n\"qari_sudais_gapless\" = \"Abdurrahman As-Sudais\";\n\"qari_tablawy\" = \"Mohammad al Tablaway (gespalten)\";\n\"qari_tawfeeq_as_sawaigh_gapless\" = \"Tawfeeq as-Sawaigh\";\n\"qari_wadee3_alyamani_gapless\" = \"Wadee\\' Al-Yamani\";\n\"qari_walk\" = \"Ibrahim Walk (Englische Übersetzung)\";\n\"qari_walk_gapless\" = \"Ibrahim Walk (Englische Übersetzung)\";\n\"qari_yasser_dussary_gapless\" = \"Yasser Ad-Dussary\";\n\"qari_yasser_salama_hadr_gapless\" = \"Yasser Salama (hadr)\";\n"
  },
  {
    "path": "Core/Localization/Resources/de.lproj/Suras.strings",
    "content": "\"sura_names_translation[0]\" = \"Die Eröffnende\";\n\"sura_names_translation[1]\" = \"Die Kuh\";\n\"sura_names_translation[2]\" = \"Die Sippe ʿImrāns\";\n\"sura_names_translation[3]\" = \"Die Frauen\";\n\"sura_names_translation[4]\" = \"Der Tisch (mit Speisen)\";\n\"sura_names_translation[5]\" = \"Das Vieh\";\n\"sura_names_translation[6]\" = \"Die Höhen\";\n\"sura_names_translation[7]\" = \"Die Kriegsbeute\";\n\"sura_names_translation[8]\" = \"Die Reue\";\n\"sura_names_translation[9]\" = \"Jonas\";\n\"sura_names_translation[10]\" = \"Hūd\";\n\"sura_names_translation[11]\" = \"Josef\";\n\"sura_names_translation[12]\" = \"Der Donner\";\n\"sura_names_translation[13]\" = \"Abraham\";\n\"sura_names_translation[14]\" = \"Das steinige Land\";\n\"sura_names_translation[15]\" = \"Die Bienen\";\n\"sura_names_translation[16]\" = \"Die Nachtreise\";\n\"sura_names_translation[17]\" = \"Die Höhle\";\n\"sura_names_translation[18]\" = \"Maria\";\n\"sura_names_translation[19]\" = \"(Die Buchstaben) Ṭā-Hā\";\n\"sura_names_translation[20]\" = \"Die Propheten\";\n\"sura_names_translation[21]\" = \"Die Pilgerfahrt\";\n\"sura_names_translation[22]\" = \"Die Gläubigen\";\n\"sura_names_translation[23]\" = \"Das Licht\";\n\"sura_names_translation[24]\" = \"Die Unterscheidung\";\n\"sura_names_translation[25]\" = \"Die Dichter\";\n\"sura_names_translation[26]\" = \"Die Ameisen\";\n\"sura_names_translation[27]\" = \"Die Geschichte\";\n\"sura_names_translation[28]\" = \"Die Spinne\";\n\"sura_names_translation[29]\" = \"Die Römer\";\n\"sura_names_translation[30]\" = \"Luqmān\";\n\"sura_names_translation[31]\" = \"Die Niederwerfung\";\n\"sura_names_translation[32]\" = \"Die Verbündeten\";\n\"sura_names_translation[33]\" = \"Saba (Königreich aus der Antike)\";\n\"sura_names_translation[34]\" = \"Der Schöpfer (der Existenz)\";\n\"sura_names_translation[35]\" = \"(Die Buchstaben) Yā-Sīn\";\n\"sura_names_translation[36]\" = \"Die Sich-Reihenden\";\n\"sura_names_translation[37]\" = \"(Der Buchstabe) Ṣād\";\n\"sura_names_translation[38]\" = \"Die Gruppen\";\n\"sura_names_translation[39]\" = \"Der Vergebende\";\n\"sura_names_translation[40]\" = \"Sie sind ausführlich erläutert (die Verse)\";\n\"sura_names_translation[41]\" = \"Die Beratung\";\n\"sura_names_translation[42]\" = \"Die Verzierung\";\n\"sura_names_translation[43]\" = \"Der Rauch\";\n\"sura_names_translation[44]\" = \"Das Knien\";\n\"sura_names_translation[45]\" = \"Die Sanddünen\";\n\"sura_names_translation[46]\" = \"Muḥammad ﷺ\";\n\"sura_names_translation[47]\" = \"Der Sieg\";\n\"sura_names_translation[48]\" = \"Die Gemächer\";\n\"sura_names_translation[49]\" = \"(Der Buchstabe) Qāf\";\n\"sura_names_translation[50]\" = \"Die Zerstreuenden (Winde)\";\n\"sura_names_translation[51]\" = \"Der Berg\";\n\"sura_names_translation[52]\" = \"Der Stern\";\n\"sura_names_translation[53]\" = \"Der Mond\";\n\"sura_names_translation[54]\" = \"Der Allerbarmer\";\n\"sura_names_translation[55]\" = \"Das eintreffende Ereignis\";\n\"sura_names_translation[56]\" = \"Das Eisen\";\n\"sura_names_translation[57]\" = \"Die Diskussion\";\n\"sura_names_translation[58]\" = \"Die Versammlung\";\n\"sura_names_translation[59]\" = \"Die Geprüfte (Frau)\";\n\"sura_names_translation[60]\" = \"Die Reihe; die Einreihung\";\n\"sura_names_translation[61]\" = \"Der Freitag\";\n\"sura_names_translation[62]\" = \"Die Heuchler\";\n\"sura_names_translation[63]\" = \"(Der Tag von) Gewinn und Verlust\";\n\"sura_names_translation[64]\" = \"Die Scheidung\";\n\"sura_names_translation[65]\" = \"Das Verbot\";\n\"sura_names_translation[66]\" = \"Die Herrschaft\";\n\"sura_names_translation[67]\" = \"Das Schreibrohr; der Stift\";\n\"sura_names_translation[68]\" = \"Die unabwendbare Wahrheit\";\n\"sura_names_translation[69]\" = \"Die Aufstiegswege\";\n\"sura_names_translation[70]\" = \"Noah\";\n\"sura_names_translation[71]\" = \"Die Dschinn\";\n\"sura_names_translation[72]\" = \"Der Eingehüllte\";\n\"sura_names_translation[73]\" = \"Der Zugedeckte\";\n\"sura_names_translation[74]\" = \"Die Auferstehung\";\n\"sura_names_translation[75]\" = \"Der Mensch\";\n\"sura_names_translation[76]\" = \"Die Entsandten\";\n\"sura_names_translation[77]\" = \"Die Kunde\";\n\"sura_names_translation[78]\" = \"Die Entreißenden\";\n\"sura_names_translation[79]\" = \"Er runzelte die Stirn\";\n\"sura_names_translation[80]\" = \"Das Umschlingen; das Zusammenrollen\";\n\"sura_names_translation[81]\" = \"Das Zerbrechen (des Himmels)\";\n\"sura_names_translation[82]\" = \"Die das Maß Kürzenden (betrügende Händler)\";\n\"sura_names_translation[83]\" = \"Das Auseinanderspalten (des Himmels)\";\n\"sura_names_translation[84]\" = \"Die Türme\";\n\"sura_names_translation[85]\" = \"Der Pochende (helle Stern)\";\n\"sura_names_translation[86]\" = \"Der Allerhöchste\";\n\"sura_names_translation[87]\" = \"Die Überdeckende (Stunde)\";\n\"sura_names_translation[88]\" = \"Die Morgendämmerung; das Frühlicht\";\n\"sura_names_translation[89]\" = \"Die Ortschaft\";\n\"sura_names_translation[90]\" = \"Die Sonne\";\n\"sura_names_translation[91]\" = \"Die Nacht\";\n\"sura_names_translation[92]\" = \"Die Morgenhelle; der Vormittag\";\n\"sura_names_translation[93]\" = \"Das Auftun; das Weiten (der Brust)\";\n\"sura_names_translation[94]\" = \"Die Feige\";\n\"sura_names_translation[95]\" = \"Das Anhängsel; der Blutklumpen\";\n\"sura_names_translation[96]\" = \"Die (Nacht der) Bestimmung\";\n\"sura_names_translation[97]\" = \"Der klare Beweis\";\n\"sura_names_translation[98]\" = \"Das Beben\";\n\"sura_names_translation[99]\" = \"Die Rennenden (Pferde)\";\n\"sura_names_translation[100]\" = \"Das Verhängnis\";\n\"sura_names_translation[101]\" = \"Die Vermehrung; das Streben nach Mehr\";\n\"sura_names_translation[102]\" = \"Das Zeitalter; die Zeit; der Nachmittag\";\n\"sura_names_translation[103]\" = \"Der Stichler (der mit der Rede verleumdet)\";\n\"sura_names_translation[104]\" = \"Der Elefant\";\n\"sura_names_translation[105]\" = \"Die Quraisch (arab. Stamm)\";\n\"sura_names_translation[106]\" = \"Die Hilfeleistung\";\n\"sura_names_translation[107]\" = \"Die Überfülle; der Überfluss\";\n\"sura_names_translation[108]\" = \"Die Ungläubigen\";\n\"sura_names_translation[109]\" = \"Die Hilfe\";\n\"sura_names_translation[110]\" = \"Die Palmfasern\";\n\"sura_names_translation[111]\" = \"Die Aufrichtigkeit\";\n\"sura_names_translation[112]\" = \"Der Tagesanbruch; das Morgengrauen\";\n\"sura_names_translation[113]\" = \"Die Menschen\";\n\"sura_names[0]\" = \"Al-Fātiḥah\";\n\"sura_names[1]\" = \"Al-Baqarah\";\n\"sura_names[2]\" = \"Āl ʿImrān\";\n\"sura_names[3]\" = \"An-Nisāʾ\";\n\"sura_names[4]\" = \"Al-Māʾidah\";\n\"sura_names[5]\" = \"Al-Anʿām\";\n\"sura_names[6]\" = \"Al-Aʿrāf\";\n\"sura_names[7]\" = \"Al-Anfāl\";\n\"sura_names[8]\" = \"At-Tauwbah\";\n\"sura_names[9]\" = \"Yūnus\";\n\"sura_names[10]\" = \"Hūd\";\n\"sura_names[11]\" = \"Yūsuf\";\n\"sura_names[12]\" = \"Ar-Raʿd\";\n\"sura_names[13]\" = \"Ibrāhīm\";\n\"sura_names[14]\" = \"Al-Ḥiǧr\";\n\"sura_names[15]\" = \"An-Naḥl\";\n\"sura_names[16]\" = \"Al-Isrāʾ\";\n\"sura_names[17]\" = \"Al-Kahf\";\n\"sura_names[18]\" = \"Maryam\";\n\"sura_names[19]\" = \"Ṭā-Hā\";\n\"sura_names[20]\" = \"Al-Anbiyāʾ\";\n\"sura_names[21]\" = \"Al-Ḥaǧǧ\";\n\"sura_names[22]\" = \"Al-Muʾminūn\";\n\"sura_names[23]\" = \"An-Nūr\";\n\"sura_names[24]\" = \"Al-Furqān\";\n\"sura_names[25]\" = \"Aš-Šuʿarāʾ\";\n\"sura_names[26]\" = \"An-Naml\";\n\"sura_names[27]\" = \"Al-Qaṣaṣ\";\n\"sura_names[28]\" = \"Al-ʿAnkabūt\";\n\"sura_names[29]\" = \"Ar-Rūm\";\n\"sura_names[30]\" = \"Luqmān\";\n\"sura_names[31]\" = \"As-Saǧdah\";\n\"sura_names[32]\" = \"Al-Aḥzāb\";\n\"sura_names[33]\" = \"Sabaʾ\";\n\"sura_names[34]\" = \"Fāṭir\";\n\"sura_names[35]\" = \"Yā-Sīn\";\n\"sura_names[36]\" = \"Aṣ-Ṣāffāt\";\n\"sura_names[37]\" = \"Ṣād\";\n\"sura_names[38]\" = \"Az-Zumar\";\n\"sura_names[39]\" = \"Ġāfir\";\n\"sura_names[40]\" = \"Fuṣṣilat\";\n\"sura_names[41]\" = \"Aš-Šūrā\";\n\"sura_names[42]\" = \"Az-Zuḫruf\";\n\"sura_names[43]\" = \"Ad-Duḫān\";\n\"sura_names[44]\" = \"Al-Ǧāṯiyah\";\n\"sura_names[45]\" = \"Al-Aḥqāf\";\n\"sura_names[46]\" = \"Muḥammad\";\n\"sura_names[47]\" = \"Al-Fatḥ\";\n\"sura_names[48]\" = \"Al-Ḥuǧurāt\";\n\"sura_names[49]\" = \"Qāf\";\n\"sura_names[50]\" = \"Aḏ-Ḏāriyāt\";\n\"sura_names[51]\" = \"Aṭ-Ṭūr\";\n\"sura_names[52]\" = \"An-Naǧm\";\n\"sura_names[53]\" = \"Al-Qamar\";\n\"sura_names[54]\" = \"Ar-Raḥmān\";\n\"sura_names[55]\" = \"Al-Wāqiʿah\";\n\"sura_names[56]\" = \"Al-Ḥadīd\";\n\"sura_names[57]\" = \"Al-Muǧādalah\";\n\"sura_names[58]\" = \"Al-Ḥašr\";\n\"sura_names[59]\" = \"Al-Mumtaḥinah\";\n\"sura_names[60]\" = \"Aṣ-Ṣaff\";\n\"sura_names[61]\" = \"Al-Ǧumʿah\";\n\"sura_names[62]\" = \"Al-Munāfiqūn\";\n\"sura_names[63]\" = \"At-Taġābun\";\n\"sura_names[64]\" = \"Aṭ-Ṭalāq\";\n\"sura_names[65]\" = \"At-Taḥrīm\";\n\"sura_names[66]\" = \"Al-Mulk\";\n\"sura_names[67]\" = \"Al-Qalam\";\n\"sura_names[68]\" = \"Al-Ḥāqqah\";\n\"sura_names[69]\" = \"Al-Maʿāriǧ\";\n\"sura_names[70]\" = \"Nūḥ\";\n\"sura_names[71]\" = \"Al-Ǧinn\";\n\"sura_names[72]\" = \"Al-Muzzammil\";\n\"sura_names[73]\" = \"Al-Muddaṯṯir\";\n\"sura_names[74]\" = \"Al-Qiyāmah\";\n\"sura_names[75]\" = \"Al-Insān\";\n\"sura_names[76]\" = \"Al-Mursalāt\";\n\"sura_names[77]\" = \"An-Nabaʾ\";\n\"sura_names[78]\" = \"An-Nāziʿāt\";\n\"sura_names[79]\" = \"ʿAbasa\";\n\"sura_names[80]\" = \"At-Takwīr\";\n\"sura_names[81]\" = \"Al-Infiṭār\";\n\"sura_names[82]\" = \"Al-Muṭaffifīn\";\n\"sura_names[83]\" = \"Al-Inšiqāq\";\n\"sura_names[84]\" = \"Al-Burūǧ\";\n\"sura_names[85]\" = \"Aṭ-Ṭāriq\";\n\"sura_names[86]\" = \"Al-Aʿlā\";\n\"sura_names[87]\" = \"Al-Ġāšiyah\";\n\"sura_names[88]\" = \"Al-Faǧr\";\n\"sura_names[89]\" = \"Al-Balad\";\n\"sura_names[90]\" = \"Aš-Šams\";\n\"sura_names[91]\" = \"Al-Layl\";\n\"sura_names[92]\" = \"Aḍ-Ḍuḥā\";\n\"sura_names[93]\" = \"Aš-Šarḥ\";\n\"sura_names[94]\" = \"At-Tīn\";\n\"sura_names[95]\" = \"Al-ʿAlaq\";\n\"sura_names[96]\" = \"Al-Qadr\";\n\"sura_names[97]\" = \"Al-Bayyinah\";\n\"sura_names[98]\" = \"Az-Zalzalah\";\n\"sura_names[99]\" = \"Al-ʿĀdiyāt\";\n\"sura_names[100]\" = \"Al-Qāriʿah\";\n\"sura_names[101]\" = \"At-Takāṯur\";\n\"sura_names[102]\" = \"Al-ʿAṣr\";\n\"sura_names[103]\" = \"Al-Humazah\";\n\"sura_names[104]\" = \"Al-Fīl\";\n\"sura_names[105]\" = \"Qurayš\";\n\"sura_names[106]\" = \"Al-Māʿūn\";\n\"sura_names[107]\" = \"Al-Kauwṯar\";\n\"sura_names[108]\" = \"Al-Kāfirūn\";\n\"sura_names[109]\" = \"An-Naṣr\";\n\"sura_names[110]\" = \"Al-Masad\";\n\"sura_names[111]\" = \"Al-Iḫlāṣ\";\n\"sura_names[112]\" = \"Al-Falaq\";\n\"sura_names[113]\" = \"An-Nās\";\n"
  },
  {
    "path": "Core/Localization/Resources/en.lproj/Android.strings",
    "content": "\"about_androidx\" = \"AndroidX\";\n\"about_androidx_url\" = \"https://developer.android.com/jetpack/androidx\";\n\"about_contributors\" = \"Contributors\";\n\"about_contributors_summary\" = \"A list of people who contributed to the development of Quran for Android\";\n\"about_contributors_url\" = \"https://github.com/quran/quran_android/blob/main/CONTRIBUTORS.md\";\n\"about_dagger2\" = \"Dagger 2\";\n\"about_dagger2_url\" = \"https://google.github.io/dagger\";\n\"about_data_sources\" = \"Data Sources\";\n\"about_description\" = \"Quran for Android is a free Quran application. Please do not forget the contributors in your prayers.\";\n\"about_dnsjava\" = \"dnsjava\";\n\"about_dnsjava_url\" = \"http://dnsjava.org\";\n\"about_furqan\" = \"Al-Bāḥith al-Qur’ānī (tafsir.app)\";\n\"about_furqan_summary\" = \"Uthmani text and Arabic Tafaseer\";\n\"about_furqan_url\" = \"https://tafsir.app\";\n\"about_images\" = \"Images\";\n\"about_kotlin\" = \"Kotlin\";\n\"about_kotlin_url\" = \"https://kotlinlang.org\";\n\"about_madani_images\" = \"The Quran images are based on the fonts from the King Fahd Quran Printing Complex\";\n\"about_madani_images_url\" = \"https://github.com/quran/quran.com-images\";\n\"about_material_components\" = \"Material Components for Android\";\n\"about_material_components_url\" = \"https://github.com/material-components/material-components-android\";\n\"about_moshi\" = \"Moshi\";\n\"about_moshi_url\" = \"https://github.com/square/moshi\";\n\"about_naskh_images\" = \"The Quran images for the Naskh app are taken (with permission) from SHL Info Systems\";\n\"about_naskh_images_url\" = \"http://www.shlinfosystems.com\";\n\"about_noorhidayat\" = \"Noorhidayat\";\n\"about_noorhidayat_summary\" = \"Noorehira font and Mufti Taqi Translation\";\n\"about_noorhidayat_url\" = \"http://www.noorehidayat.org\";\n\"about_numberPicker\" = \"Number Picker\";\n\"about_numberPicker_url\" = \"https://github.com/ShawnLin013/NumberPicker\";\n\"about_okhttp\" = \"OkHttp\";\n\"about_okhttp_url\" = \"https://github.com/square/okhttp\";\n\"about_open_source\" = \"Open Source Projects\";\n\"about_others\" = \"Others\";\n\"about_qaloon_images\" = \"Qaloon images are used with the permission of Nous Memes Editions Et Diffusion (Tunisia)\";\n\"about_quran_enc\" = \"Noble Quran Encyclopedia (QuranEnc)\";\n\"about_quran_enc_summary\" = \"Translations for many languages\";\n\"about_quran_enc_url\" = \"https://quranenc.com\";\n\"about_quran_ksu\" = \"Electronic Moshaf Project\";\n\"about_quran_ksu_summary\" = \"The King Saud University Electronic Moshaf Project is the app\\'s source of Arabic Tafaseer and translations for various languages. It is also the source for Dr. Ayman Suwaid\\'s recitation.\";\n\"about_quran_ksu_url\" = \"https://quran.ksu.edu.sa\";\n\"about_quranicaudio\" = \"QuranicAudio\";\n\"about_quranicaudio_summary\" = \"Gapless mp3 Quran recitations\";\n\"about_quranicaudio_url\" = \"https://quranicaudio.com\";\n\"about_rxandroid\" = \"RxAndroid\";\n\"about_rxandroid_url\" = \"https://github.com/ReactiveX/RxAndroid\";\n\"about_rxjava\" = \"RxJava\";\n\"about_rxjava_url\" = \"https://github.com/ReactiveX/RxJava\";\n\"about_sliding_panel\" = \"AndroidSlidingUpPanel\";\n\"about_sliding_panel_url\" = \"https://github.com/umano/AndroidSlidingUpPanel\";\n\"about_tanzil\" = \"Tanzil\";\n\"about_tanzil_summary\" = \"Translations for a few languages\";\n\"about_tanzil_url\" = \"http://tanzil.net\";\n\"about_timber\" = \"Timber\";\n\"about_timber_url\" = \"https://github.com/JakeWharton/timber\";\n\"app_name\" = \"Quran\";\n\"appearance\" = \"Appearance\";\n\"audio_manager\" = \"Audio Manager\";\n\"audio_manager_database\" = \"Audio Database\";\n\"audio_manager_database_delete\" = \"Delete database\";\n\"audio_manager_database_download\" = \"Download database\";\n\"audio_manager_delete_selection\" = \"Delete selection\";\n\"audio_manager_download_all\" = \"Download all\";\n\"audio_manager_download_selection\" = \"Download selection\";\n\"audio_manager_post_notifications_permission_description\" = \"This is only used to give updates on download status, or to warn when audio files are automatically updated.\";\n\"audio_manager_post_notifications_permission_title\" = \"Allow posting notifications?\";\n\"audio_manager_remove_audio_msg\" = \"Are you sure you would like to remove %1$@?\";\n\"audio_manager_remove_audio_title\" = \"Remove Surah?\";\n\"audio_manager_remove_multiple_audio_msg\" = \"Are you sure you would like to remove?\";\n\"audio_manager_surah_delete\" = \"Delete surah\";\n\"audio_manager_surah_download\" = \"Download surah\";\n\"audio_updated_text\" = \"Several Quran audio files have been updated. Quran has removed\\\nyour copy of these files so that the newest versions can be downloaded the next time you play them\\\nback.\";\n\"audio_updated_title\" = \"Quran Audio files Update\";\n\"available_translations\" = \"Available for download\";\n\"ayah_copied_popup\" = \"Ayah Copied\";\n\"bookmark_ayah\" = \"Bookmark this Ayah\";\n\"bookmarks_list_empty\" = \"No Bookmarks\";\n\"cancel\" = \"Cancel\";\n\"canceling\" = \"Canceling…\";\n\"comma\" = \",\";\n\"copy_ayah\" = \"Copy Ayah\";\n\"delete_tag\" = \"Delete Tag\";\n\"delete_translation\" = \"Remove Translation\";\n\"dialog_ok\" = \"OK\";\n\"download_amount_in_megabytes\" = \"%@ MB\";\n\"download_cancel\" = \"Cancel\";\n\"download_error_disk\" = \"Not enough disk space to download\";\n\"download_error_general\" = \"Download failed\";\n\"download_error_invalid_download\" = \"Downloaded file was corrupted\";\n\"download_error_invalid_download_retry\" = \"Corrupted file, attempting to re-download\";\n\"download_error_network\" = \"Could not download due to network error\";\n\"download_error_network_retry\" = \"Network error, trying to resume…\";\n\"download_error_perms\" = \"Could not download due to permissions error\";\n\"download_extra_data\" = \"We need to download one or two small files to support sharing and translation. Download now?\";\n\"download_processing\" = \"Processing Download…\";\n\"download_progress\" = \"Downloaded %1$@ / %2$@\";\n\"download_retry\" = \"Retry\";\n\"download_successful\" = \"Download Successful\";\n\"download_sura_ayah_progress\" = \"Downloading surah %1$d ayah %2$d\";\n\"download_sura_progress\" = \"Downloaded %1$@ / %2$@ of surah %3$d\";\n\"downloaded_translations\" = \"Downloaded\";\n\"downloadImportantPrompt\" = \"There is a small yet important update\\\nfor the Quran images you have on your device. Would you like to download this\\\npatch now?\\\n\";\n\"downloading_message\" = \"Please wait for the files to download (resume supported).\";\n\"downloadPrompt\" = \"In order for Quran Android to work properly,\\\nwe need to download some files. If you do not do this now, the app\\\nmay not work reliably and will require an Internet connection for reading.\\\nWould you like to download the required files now?\\\n\";\n\"downloadPrompt_no\" = \"No\";\n\"downloadPrompt_ok\" = \"Yes\";\n\"downloadPrompt_title\" = \"Download Required Files?\";\n\"downloadTabletPrompt\" = \"We recently added improved images for\\\ntablets. Would you like to download these images now?\";\n\"edit_tag\" = \"Edit Tag\";\n\"email_us\" = \"If your question is not answered above, you can email quranandroid@gmail.com for support.\\\nPlease note that we receive lots of emails, so we may not be able to reply to all of them.\";\n\"error_getting_translation_list\" = \"Unable to download the list of translations. Please try again later.\";\n\"export_data_error\" = \"Error exporting data\";\n\"exported_data\" = \"Data exported to %1$@\";\n\"extracting_title\" = \"Processing…\";\n\"found_in_sura\" = \"Found in Surah (%1$d) %2$@: %3$d (page %4$d)\";\n\"from\" = \"From\";\n\"get_arabic_search_db\" = \"Get Arabic Search Database\";\n\"get_translations\" = \"Get Translations\";\n\"gotoPage\" = \"Go to page\";\n\"help\" = \"\\\n<b>How do I play audio?</b>\\\n<br/>Open any Quran page. Tap on the screen once. At the bottom, you will notice\\\na play button and some text with the name of a qari. Click the name of the qari to\\\nchoose a different qari. Click play to download and play the current page or sura.\\\n<br/>\\\n<br/><b>How do I view translation?</b>\\\n<br/>Open any Quran page. Tap on the screen once. In the top, you will notice a\\\nglobe icon (or, if you don\\'t see it, click an icon with three square dots) - click\\\nthis and choose translation to view the translation.\\\n<br/>\\\nIf you do not have any translations downloaded, it will take\\\nyou to a screen where you can download translations. Choose and download a translation,\\\nthen return back and tap the globe icon again to view the translation.\\\n<br/>\\\n<br/><b>How do I bookmark a page?</b>\\\n<br/>Open any Quran page. Tap on the screen once. In the top right, you will see a\\\nbookmark icon. Tap the bookmark icon to bookmark the page (the color will turn solid white). Tap the bookmark icon\\\nagain to remove the bookmark.\\\n<br/>\\\n<br/><b>How do I make the text larger?</b>\\\n<br/>For the Arabic pages, hold your phone in landscape. This makes the text larger.\\\nFor translations, go to settings and set translation text size.\\\n<br/>\\\n<br/><b>How do I share an ayah?</b>\\\n<br/>While on any Arabic page, press and hold on any ayah to get a menu where you can\\\nchoose to bookmark, tag, share or copy that ayah to the clipboard, see the translation,\\\nor listen to its recitation.<br/>\\\n<br/><b>Malayalam/Tamil/Bengali/Urdu fonts don\\'t work!</b>\\\n<br/>Unfortunately, Android versions prior to 4.0 do not support these fonts, and there is\\\nlittle we can do to help with this.\\\n\";\n\"help_title\" = \"Frequently Asked Questions\";\n\"highlighting_database\" = \"Required Files\";\n\"import_data\" = \"Import Data\";\n\"import_data_and_override\" = \"If you import this file, it will replace all your bookmarks with %1$d bookmark(s) and %2$d tag(s). Import?\";\n\"import_data_error\" = \"Invalid backup file (or unable to read backup file).\";\n\"import_data_permissions_error\" = \"Unable to read backup file due to permissions error.\";\n\"import_successful\" = \"Import Successful\";\n\"infinity\" = \"∞\";\n\"juz2_description\" = \"Juz\\' %1$@\";\n\"kitkat_external_message\" = \"Due to Android limitations, if you choose to place Quran\\\ndata on your external SD card and later uninstall or clear data for Quran Android, all Quran\\\nAndroid pages and audio will be deleted and you will have to download them again. Are you\\\nsure you want to use the external SD card?\";\n\"loading\" = \"Loading…\";\n\"logs_email\" = \"quranandroid+logs@gmail.com\";\n\"madani\" = \"Madani\";\n\"madani_description\" = \"The classic Madani script.\";\n\"madani_title\" = \"Classic Madani Mushaf\";\n\"makki\" = \"Makki\";\n\"manzil_description\" = \"Manzil %1$@\";\n\"menu_about\" = \"About Us\";\n\"menu_back_to_page\" = \"Show Quran\";\n\"menu_bookmarks\" = \"Bookmarks\";\n\"menu_bookmarks_ayah\" = \"Ayah Bookmarks\";\n\"menu_bookmarks_page\" = \"Page Bookmarks\";\n\"menu_get_translations\" = \"Get Translations\";\n\"menu_help\" = \"Help\";\n\"menu_jump\" = \"Go to page\";\n\"menu_jump_last_page\" = \"Last page\";\n\"menu_other_apps\" = \"Other apps\";\n\"menu_search\" = \"Search\";\n\"menu_settings\" = \"Settings\";\n\"menu_show_date\" = \"Show Date\";\n\"menu_show_recents\" = \"Recent pages\";\n\"menu_sort\" = \"Sort\";\n\"menu_sort_date\" = \"Date Added\";\n\"menu_sort_group_by_tags\" = \"Group by Tags\";\n\"menu_sort_location\" = \"Location in Quran\";\n\"menu_translation\" = \"Show Translation\";\n\"more_arabic\" = \"المزيد…\";\n\"more_translations\" = \"More Translations\";\n\"move_down\" = \"Move Down\";\n\"move_up\" = \"Move Up\";\n\"need_translation\" = \"You don\\'t have any translations/tafaseer downloaded yet.\";\n\"new_tag\" = \"New Tag\";\n\"next\" = \"Next\";\n\"no_arabic_search_available\" = \"You have not downloaded the Arabic search pack. Please download it and try your search again.\";\n\"no_results\" = \"No results found for \\\"%@\\\"\";\n\"not_tagged\" = \"Not Tagged\";\n\"notification_channel_audio\" = \"Quran Recitation\";\n\"notification_channel_download\" = \"Quran Downloads\";\n\"notification_download_canceled\" = \"Download canceled\";\n\"page_description\" = \"Page %1$@, Juz\\' %2$@\";\n\"pause\" = \"Pause\";\n\"play\" = \"Play\";\n\"play_apply\" = \"Apply\";\n\"play_apply_and_play\" = \"Apply and Play\";\n\"play_each_verse\" = \"Play each verse:\";\n\"play_from\" = \"From\";\n\"play_from_here\" = \"Play from Here\";\n\"play_restrict_range\" = \"Only play the above verses\";\n\"play_to\" = \"To\";\n\"play_verses_range\" = \"Play set of verses:\";\n\"playback_prompt_title\" = \"Start playback from:\";\n\"playback_speed\" = \"Playback Speed:\";\n\"please_grant_permissions\" = \"Please grant permission in application settings\";\n\"please_wait\" = \"Please wait…\";\n\"post_notification_permission\" = \"Allow Quran for Android to post notifications? This is only used to give updates on download status, or to warn when audio files are automatically updated.\";\n\"prefs_app_location_summary\" = \"Choose where to store Quran files\";\n\"prefs_app_location_title\" = \"Quran data directory\";\n\"prefs_app_size\" = \"Current data size is\";\n\"prefs_audio_manager\" = \"Audio Manager\";\n\"prefs_audio_manager_summary\" = \"Manage and download Quranic audio\";\n\"prefs_ayah_before_translation_summary\" = \"Show ayah in Arabic above the translation\";\n\"prefs_ayah_before_translation_title\" = \"Ayah before translation\";\n\"prefs_ayah_text_title\" = \"Ayah text size\";\n\"prefs_calculating_app_size\" = \"Calculating App Size\";\n\"prefs_category_advanced\" = \"Advanced Options\";\n\"prefs_category_advanced_summary\" = \"Import/export bookmarks, set Quran data directory, etc.\";\n\"prefs_category_display_settings\" = \"Display Settings\";\n\"prefs_category_download\" = \"Download Options\";\n\"prefs_category_dual_screen\" = \"Dual Page Preferences\";\n\"prefs_category_reading\" = \"Reading Preferences\";\n\"prefs_category_translation\" = \"Translation Preferences\";\n\"prefs_copying_app_files\" = \"Copying App files\";\n\"prefs_display_marker_summary\" = \"Display popup on reaching juz\\', hizb, etc.\";\n\"prefs_display_marker_title\" = \"Display marker popups\";\n\"prefs_download_amount_summary\" = \"Preferred download amount for non-gapless audio\";\n\"prefs_download_amount_title\" = \"Download amount\";\n\"prefs_dual_page_mode_disabled\" = \"In landscape, only one page will appear.\";\n\"prefs_dual_page_mode_enabled\" = \"In landscape, two pages will appear side by side.\";\n\"prefs_dual_page_mode_title\" = \"Dual Page Mode\";\n\"prefs_err_moving_app_files\" = \"Failed to move app files\";\n\"prefs_export_csv_summary\" = \"Export a copy of bookmarks and tags in CSV\";\n\"prefs_export_csv_title\" = \"Export CSV\";\n\"prefs_export_summary\" = \"Export a copy of bookmarks and tags\";\n\"prefs_export_title\" = \"Export\";\n\"prefs_highlight_bookmarks_summary\" = \"Highlight bookmarked ayahs while reading\";\n\"prefs_highlight_bookmarks_title\" = \"Highlight bookmarks\";\n\"prefs_import_summary\" = \"Import bookmarks and tags\";\n\"prefs_import_title\" = \"Import\";\n\"prefs_megabytes_int\" = \"%1$d MB\";\n\"prefs_megabytes_str\" = \"%@ MB\";\n\"prefs_new_background_title\" = \"New background\";\n\"prefs_night_mode_background_brightness_summary\" = \"Brightness of the page when night mode is active\";\n\"prefs_night_mode_background_brightness_title\" = \"Background brightness\";\n\"prefs_night_mode_summary\" = \"Use dark background and light fonts\";\n\"prefs_night_mode_text_brightness_summary\" = \"Brightness of the text when night mode is active\";\n\"prefs_night_mode_text_brightness_title\" = \"Text brightness\";\n\"prefs_night_mode_title\" = \"Night mode\";\n\"prefs_no_enough_space_to_move_files\" = \"Insufficient space to move app files\";\n\"prefs_overlay_page_info_summary\" = \"Overlay page number, surah name, and juz\\' number while reading\";\n\"prefs_overlay_page_info_title\" = \"Show page info\";\n\"prefs_page_type_summary\" = \"Select the type of reading pages\";\n\"prefs_page_type_title\" = \"Page Type (experimental)\";\n\"prefs_preview\" = \"Preview\";\n\"prefs_sdcard_external\" = \"External storage %1$d\";\n\"prefs_sdcard_internal\" = \"Internal storage\";\n\"prefs_send_logs_summary\" = \"Send debug logs to the developer\";\n\"prefs_send_logs_title\" = \"Send logs\";\n\"prefs_split_page_and_translation_summary\" = \"In dual page mode with translations, Quran page and translation is shown\";\n\"prefs_split_page_and_translation_title\" = \"Quran and translation in dual mode\";\n\"prefs_streaming_summary\" = \"Stream audio instead of downloading\";\n\"prefs_streaming_title\" = \"Streaming\";\n\"prefs_sura_translated_name_summary\" = \"Show the translation of surah name\";\n\"prefs_sura_translated_name_title\" = \"Surah translated name\";\n\"prefs_translation_text_title\" = \"Translation text size\";\n\"prefs_translations\" = \"Translations\";\n\"prefs_translations_summary\" = \"Download and manage translations\";\n\"prefs_use_arabic_summary_on\" = \"Use Arabic for application interface\";\n\"prefs_use_arabic_title\" = \"Arabic mode (الوضع العربي)\";\n\"prefs_use_dyslexic_font_summary\" = \"Display translations in dyslexia friendly font\";\n\"prefs_use_dyslexic_font_title\" = \"Dyslexia friendly font\";\n\"prefs_volume_key_navigation_summary\" = \"Navigate between pages using volume keys\";\n\"prefs_volume_key_navigation_title\" = \"Volume key navigation\";\n\"previous\" = \"Previous\";\n\"process_progress\" = \"Processing file %1$d / %2$d\";\n\"qarilist_dismiss\" = \"Dismiss\";\n\"qarilist_gapless\" = \"Gapless\";\n\"qarilist_gapped\" = \"Gapped\";\n\"qarilist_qaris_with_downloads\" = \"Qaris with Downloads\";\n\"qarilist_ready_to_play\" = \"Ready to Play\";\n\"qarilist_select_qari\" = \"Select a Qari\";\n\"qarilist_selected\" = \"Selected\";\n\"quran_ayah\" = \"Ayah %1$d\";\n\"quran_ayah_details\" = \"%1$@ - Ayah %2$@, Juz\\' %3$@\";\n\"quran_hizb\" = \"Hizb\";\n\"quran_juz2\" = \"Juz\\'\";\n\"quran_nos\" = \"½\";\n\"quran_page\" = \"Page\";\n\"quran_rob3\" = \"¼\";\n\"quran_sura\" = \"Surahs\";\n\"quran_sura_title\" = \"Surah %1$@\";\n\"quran_talt_arb3\" = \"¾\";\n\"quranSearchType\" = \"Verses of the Quran\";\n\"recent_pages\" = \"Recent pages\";\n\"recite_from_here\" = \"Recite from here\";\n\"remove_button\" = \"Remove\";\n\"remove_dlg_msg\" = \"Are you sure you would like to remove the %1$@?\";\n\"remove_dlg_title\" = \"Remove Translation?\";\n\"repeatValues[0]\" = \"1 time\";\n\"repeatValues[1]\" = \"2 times\";\n\"repeatValues[2]\" = \"3 times\";\n\"repeatValues[3]\" = \"loop\";\n\"scoped_storage_message\" = \"Due to Android changes to increase user privacy, copying\\\nfiles outside of the app directories might stop Quran from accessing its data in future versions\\\nof Android. Are you sure you\\'d like to use this path?\";\n\"sdcard_error\" = \"Could not find SD card. Please mount it and try again.\";\n\"search_data\" = \"Search Data\";\n\"search_entire_mushaf\" = \"Search the entire mushaf\";\n\"search_full_results\" = \"Full Results\";\n\"search_hint\" = \"Search the Quran\";\n\"search_key\" = \"Press the search key to look up a verse\";\n\"see_tafseer_of_verse\" = \"This ayah\\'s tafseer is included with the tafseer of ayah %d (Click to expand).\";\n\"share_ayah\" = \"Share Ayah Link\";\n\"share_ayah_text\" = \"Share Ayah Text\";\n\"starting_page_label\" = \"Beginning of Page\";\n\"stop\" = \"Stop\";\n\"storage_permission_please_restart\" = \"Please restart the app for this to take effect.\";\n\"storage_permission_rationale\" = \"Quran wants your permission to store its data on\\\nexternal storage. Quran will work without this permission, but if you clear data or\\\nuninstall the app, all downloaded pages, audio, and data will be removed. Grant\\\nQuran permission?\";\n\"sura_and_ayah\" = \"Sura and Ayah\";\n\"sura_ayah\" = \"%1$d:%2$d\";\n\"sura_ayah_notification_str\" = \"Surah %1$@, Ayah %2$d\";\n\"sura_ayah_sharing_str\" = \"Surah %1$@: %2$d\";\n\"tag_ayah\" = \"Tag this Ayah\";\n\"tag_blank_tag_error\" = \"Tag names cannot be blank!\";\n\"tag_bookmark\" = \"Tag Bookmark\";\n\"tag_dlg_title\" = \"Tag\";\n\"tag_duplicate_tag_error\" = \"Tag name already exists!\";\n\"tag_name\" = \"Name\";\n\"timing_database\" = \"Required Files\";\n\"to\" = \"To\";\n\"translation_ayah\" = \"Ayah Translation/Tafseer\";\n\"translation_dialog_later\" = \"Later\";\n\"translation_dialog_yes\" = \"Yes\";\n\"translation_updates_available\" = \"An update is available for some of your translations. Visit the translations screen now?\";\n\"translations\" = \"Translations\";\n\"undo\" = \"Undo\";\n\"update_available\" = \"Update Available\";\n\"warning\" = \"Warning\";\n"
  },
  {
    "path": "Core/Localization/Resources/en.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>audio_manager_delete_surah_error</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_delete_surah_error@</string>\n            <key>audio_manager_delete_surah_error</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>There was an error while deleting the surah</string>\n                <key>other</key>\n                <string>There was an error while deleting %1$d surahs</string>\n            </dict>\n        </dict>\n        <key>audio_manager_delete_surah_success</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_delete_surah_success@</string>\n            <key>audio_manager_delete_surah_success</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Successfully deleted the surah</string>\n                <key>other</key>\n                <string>Successfully deleted %1$d surahs</string>\n            </dict>\n        </dict>\n        <key>audio_manager_files_downloaded</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_files_downloaded@</string>\n            <key>audio_manager_files_downloaded</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>1 surah downloaded</string>\n                <key>other</key>\n                <string>%1$d surahs downloaded</string>\n            </dict>\n        </dict>\n        <key>bookmark_tag_deleted</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@bookmark_tag_deleted@</string>\n            <key>bookmark_tag_deleted</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Deleted one item</string>\n                <key>other</key>\n                <string>Deleted %d items</string>\n            </dict>\n        </dict>\n        <key>plural_recent_pages</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@plural_recent_pages@</string>\n            <key>plural_recent_pages</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Last page</string>\n                <key>other</key>\n                <string>Recent pages</string>\n            </dict>\n        </dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>One result for \\&quot;%1$d\\&quot;:</string>\n                <key>other</key>\n                <string>%2$d results for \\&quot;%1$d\\&quot;:</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>One verse</string>\n                <key>other</key>\n                <string>%d verses</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/en.lproj/Localizable.strings",
    "content": "/*\n  Quran iOS app localization. Other localizations are from Android repo.\n */\n\n\n// MARK: - General\n\n\"button.done\" = \"Done\";\n\"button.delete\" = \"Delete\";\n\n// MARK: - Errors\n\n\"error.dialog.title\" = \"Error\";\n\"error.message.connection_lost\" = \"Internet connection is lost. Move to a location where more stable connection is available, or wait until the connection returns to be stable.\";\n\"error.message.international_roaming_off\" = \"International roaming is not allowed. Change the international roaming setting, or turn on Wi-Fi.\";\n\"error.message.not_connected_to_internet\" = \"Not connected to the internet. Turn on Wi-Fi, or allow cellular data connection.\";\n\"error.message.general\" = \"Oops! Something went wrong. Please try again.\";\n\"error.message.no_disk_space\" = \"No available disk space to save the downloads.\";\n\n// MARK: - Quran\n\n\"ayah\" = \"Ayah\";\n\"surah\" = \"Surah\";\n// Metadata: Translated by AI; human review required.\n\"quran_alquran\" = \"Quran\";\n\n// MARK: - Translation\n\n\"translation.text-type.translation\" = \"Translation\";\n\"translation.text-type.transliteration\" = \"Transliteration\";\n\"translation.selectedTranslations\" = \"Selected\";\n\"translation.translator\" = \"Translator: \";\n\"translation.text.see-referenced-verse\" = \"See ayah %d.\";\n\"translation.text.read-more\" = \"Read more\";\n\"translation.text.ayah-number\" = \"%d:%d\";\n\"translation.text.footnote-number\" = \"[%d]\";\n\"translation.text.footnote-title\" = \"Footnote #%d\";\n\"error.translation.text-retrieval\" = \"Oops! Something went wrong. We couldn't retrieve the translation.\";\n\"error.translation.text-not-available\" = \"No translation available for this Ayah.\";\n\n// MARK: - Search\n\n\"search.recents.title\" = \"Recent searches\";\n\"search.popular.title\" = \"Try searching with\";\n\"search.placeholder.text\" = \"Surah, verse, translation, tafseer, and numbers\";\n\"search.result.count\" = \"%@ (%d)\";\n\n// MARK: - Settings\n\n\"setting.write_review\" = \"Write an app store review...\";\n\"setting.contact_us\" = \"Contact Us\";\n\"setting.donate\" = \"Donate\";\n\"setting.share_app\" = \"Share the app...\";\n\"setting.app_version\" = \"App Version\";\n\"setting.quran_account.sign_in\" = \"Sign in\";\n\"setting.quran_account.profile\" = \"Quran.com Profile\";\n\"setting.quran_account.sign_out\" = \"Sign out\";\n\"setting.quran_account.sync_devices\" = \"Sync your bookmarks across all devices\";\n\"setting.quran_account.custom_collections\" = \"Keep your custom collections in sync\";\n\"setting.quran_account.attach_notes\" = \"Keep your verse notes in sync\";\n\n// MARK: - Quran Menu\n\n\"menu.arabic\" = \"Arabic\";\n\"menu.translation\" = \"Translation/Tafseer\";\n\"menu.select_translation\" = \"Select translations/tafseer\";\n\"menu.pointer\" = \"Word translation pointer\";\n\"menu.pointer.select_translation\" = \"Pointer Showing\";\n\"menu.fontSizeLetter\" = \"A\";\n\"menu.translationFontSize\" = \"Translation Size\";\n\"menu.arabicFontSize\" = \"Quran Size\";\n\"menu.twoPages\" = \"2 pages side-by-side (in landscape)\";\n\"menu.verticalScrolling\" = \"Vertical scrolling\";\n\"menu.theme_settings\" = \"Themes & Settings\";\n\n// MARK: - Theme\n\n\"theme.light\" = \"Light\";\n\"theme.dark\" = \"Dark\";\n\"theme.auto\" = \"Auto\";\n\"theme.auto.message\" = \"Quran app will adhere to your iPhone's appearance setting\";\n\n// MARK: - Tabs\n\n\"tab.notes\" = \"Notes\";\n\n// MARK: - Update\n\n\"update.filesystem.title\" = \"Upgrading databases...\";\n\"downloading_title\" = \"Downloading…\";\n\n// MARK: - Reciters\n\n\"reciters.title\" = \"Select the reciter to listen to\";\n\"reciters.recent\" = \"Recent\";\n\"reciters.downloaded\" = \"Downloaded\";\n\"reciters.all\" = \"All\";\n\n// MARK: - Audio\n\n\"audio.playing.action.modify\" = \"Modify\";\n\"audio.playing.message\" = \"Playing audio from %@ to %@\";\n\"audio.downloading.message\" = \"Downloading audio from %@ to %@\";\n\n\"audio.playing-verses.label\" = \"Playing Verses\";\n\"audio.adjust-end-verse-to-the-end.label\" = \"Adjust end verse to the end of the\";\n\n\"audio.select-start-verse\" = \"Select Starting Verse\";\n\"audio.select-end-verse\" = \"Select Ending Verse\";\n\n\"audio.download-play-amount\" = \"Download/Play up to\";\n\"audio.download-play-amount.description\" = \"When playing audio, it will play to the end of the\";\n\n// MARK: - Bookmarks\n\n\"bookmarks.no-data.title\" = \"Adding Bookmarks...\";\n\"bookmarks.no-data.text\" = \"When you're reading the Quran, tap the Bookmark button to mark the current page.\";\n\"bookmarks.delete-all\" = \"Delete All\";\n\"bookmarks.delete-all.confirmation\" = \"Are you sure you want to delete all bookmarks?\";\n\n\"bookmarks.sync.title\" = \"Sync your bookmarks\";\n\"bookmarks.sync.body\" = \"Sign in to Quran.com to keep your bookmarks available across devices.\";\n\"bookmarks.sync.action\" = \"Sign In\";\n\n// MARK: - Notes\n\n\"notes.no-data.title\" = \"Adding Ayah Highlights...\";\n\"notes.no-data.text\" = \"Tap and hold on an Ayah. You can extend the selection to include multiple Ayat, then tap the Bookmark button.\";\n\"notes.verses-count\" = \"(+%d ayat)\";\n\"notes.delete.alert.title\" = \"Delete Highlight\";\n\"notes.delete.alert.body\" = \"The associated note will also be deleted.\";\n\"notes.icloud.alert.title\" = \"iCloud Sync\";\n\"notes.icloud.alert.body\" = \"The app uses iCloud to sync bookmarks & notes across your devices. You can disable it from your device's iCloud settings.\";\n\n// MARK: - Ayah Menu\n\n\"ayah.menu.copy\" = \"Copy\";\n\"ayah.menu.share\" = \"Share...\";\n\"ayah.menu.play-end-juz\" = \"to the end of Juz'\";\n\"ayah.menu.play-end-surah\" = \"to the end of Surah\";\n\"ayah.menu.play-end-page\" = \"to the end of Page\";\n\"ayah.menu.play-end-quran\" = \"to the end of Quran\";\n\"ayah.menu.repeat\" = \"Repeat\";\n\"ayah.menu.selected-verse\" = \"selected verse\";\n\"ayah.menu.selected-verses\" = \"selected verses\";\n\"ayah.menu.highlight\" = \"Highlight\";\n\"ayah.menu.highlight-select-color\" = \"select color\";\n\"ayah.menu.add-note\" = \"Add Note\";\n\"ayah.menu.edit-note\" = \"Edit Note\";\n\"ayah.menu.delete-note\" = \"Delete Note\";\n\"ayah.menu.delete-highlight\" = \"Delete Highlight\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n\"reading.selector.selectMushaf.short\" = \"Select\";\n\"reading.selector.selectMushaf.long\" = \"Set as current Mushaf\";\n\"reading.selector.title\" = \"Choose Mushaf\";\n\"reading.selector.selection-description\" = \"Tap on a Mushaf for more information.\";\n\"reading.selector.property.hafs\" = \"Hafs Mushaf\";\n\"reading.selector.property.pages.604\" = \"604 pages\";\n\"reading.selector.property.lines.15\" = \"15-line page\";\n\"reading.selector.property.word-translation.supported\" = \"Word-by-word translation\";\n\"reading.selector.property.word-translation.not-supported\" = \"No Word-by-word translation\";\n\n// Hafs 1405\n\"reading.hafs-1405.title\" = \"Hafs, classic Medina, 1405 AH\";\n\"reading.hafs-1405.description\" = \"The classic hafs Mushaf issued in Madina in 1405 Hijri. The app used to offer this version for a long time.\\nFrom the King Fahd Quran Printing Complex.\";\n\"reading.hafs-1405.issue\" = \"Issued in 1405 Hijri\";\n\n// Hafs 1421\n\"reading.hafs-1421.title\" = \"Hafs, Medina, 1421 AH\";\n\"reading.hafs-1421.description\" = \"The hafs Mushaf issued in Medina in 1421 Hijri. From the King Fahd Quran Printing Complex.\";\n\"reading.hafs-1421.issue\" = \"Issued in 1421 Hijri\";\n\n// Hafs 1440\n\"reading.hafs-1440.title\" = \"Hafs, Medina, 1440 AH\";\n\"reading.hafs-1440.description\" = \"The hafs Mushaf issued in Medina in 1440 Hijri. From the King Fahd Quran Printing Complex.\";\n\"reading.hafs-1440.issue\" = \"Issued in 1440 Hijri\";\n\n// Hafs 1439\n\"reading.hafs-1439.title\" = \"Madani Mushaf (1439)\";\n\"reading.hafs-1439.description\" = \"The 1439 Madani script from the King Fahd Quran Printing Complex. Optimized for larger screens.\";\n\"reading.hafs-1439.issue\" = \"Issued in 1439 Hijri\";\n\n// Hafs 1441\n\"reading.hafs-1441.title\" = \"Madani Mushaf (1441)\";\n\"reading.hafs-1441.description\" = \"The 1441 Madani Mushaf from the King Fahd Quran Printing Complex. Optimized for larger screens.\";\n\"reading.hafs-1441.issue\" = \"Issued in 1441 Hijri\";\n\n// Hafs Tajweed\n\"reading.tajweed.title\" = \"Hafs, Tajweed\";\n\"reading.tajweed.description\" = \"The tajweed hafs Mushaf. Al-Quran Al-Kareem - Dar al-Marefa Edition.\";\n\n// MARK: - Diagnostics\n\n\"diagnostics.title\" = \"Diagnostics\";\n\"diagnostics.details\" = \"These settings are utilized by the app developer specifically for debugging and diagnostic purposes.\";\n\n\"diagnostics.share_app_logs\" = \"Share app logs\";\n\"diagnostics.enable_debug_logs\" = \"Enable debug logging\";\n\"diagnostics.enable_debug_logs.details\" = \"The setting will take effect upon the next restart of the app.\";\n\n\n// MARK: - What's new\n\n\"new.title\" = \"What's new\";\n\"new.action\" = \"Continue\";\n\n// Mushafs\n\"new.mushafs\" = \"New Mushafs:\";\n\"new.mushafs.details\" = \"* Tajweed Hafs Mushaf: Al-Quran Al-Kareem - Dar al-Marefa Edition.\\n* Medina Mushaf 1421 hijri.\\n* Medina Mushaf 1440 hijri.\\n* Plus, continue enjoying the classic 1405 hijri version.\";\n\n// Reciters\n\"new.reciters\" = \"New Reciters:\";\n\"new.reciters.details\" = \"* %%Readers:qari_abdulhadi_kanakeri_gapless%%\\n* %%Readers:qari_ahmed_al_nufais_gapless%%\\n* %%Readers:qari_alijon_qari_gapless%%\\n* %%Readers:qari_badr_al_turki_gapless%%\\n* %%Readers:qari_farman_shawani_gapless%%\\n* %%Readers:qari_idrees_abkar_gapless%%\\n* %%Readers:qari_luhaidan_gapless%%\\n* %%Readers:qari_peshawa_qadir_al_qurdi_gapless%%\\n* %%Readers:qari_raad_al_kurdi_gapless%%\";\n\n// Miscellaneous\n\"new.miscellaneous\" = \"Miscellaneous:\";\n\"new.miscellaneous.details\" = \"* Updated app look.\\n* Enhanced search feature (new algorithm coming soon).\\n* Vietnamese localization support.\\n* Advanced audio options access available when no recitation is playing.\\n* App now is open source: https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n\"new.audio_upgrades\" = \"Audio:\";\n\"new.audio_upgrades.details\" = \"* Adjustable recitation speed control: 0.5x, 0.75x, 1x, 1.25x, 1.5x - thanks to @adnan29979.\\n* Playback remembers your preferred rate - thanks to @adnan29979.\";\n\n// Personalization\n\"new.personalization\" = \"Reading Themes:\";\n\"new.personalization.details\" = \"* Support for multiple themes. Open a Quran Page -> Top Right Menu -> Themes & Settings.\\n* Use 'Original' if you want to revert to the previous style.\";\n\n// Library & Navigation\n\"new.library_navigation\" = \"Library & Navigation:\";\n\"new.library_navigation.details\" = \"* Sort surahs and juz on Home, and display surah numbers so you can jump to what you need faster - thanks to @yismailuofa.\";\n"
  },
  {
    "path": "Core/Localization/Resources/en.lproj/Readers.strings",
    "content": "\"qari_abdulaziz_zahrani_gapless\" = \"Abdulaziz Az-Zahrani\";\n\"qari_abdulbaset\" = \"Abd Al-Basit (gapped)\";\n\"qari_abdulbaset_gapless\" = \"Abd Al-Basit\";\n\"qari_abdulbaset_mujawwad\" = \"Abd Al-Basit Mujawwad (gapped)\";\n\"qari_abdulbaset_mujawwad_gapless\" = \"Abd Al-Basit Mujawwad\";\n\"qari_abdulhadi_kanakeri_gapless\" = \"AbdulHadi Kanakeri\";\n\"qari_abdullah_matroud_gapless\" = \"Abdullah Matroud\";\n\"qari_abdulmuhsin_qasim_gapless\" = \"AbdulMuhsin al Qasim\";\n\"qari_abdulrahman_alshahat_gapless\" = \"Abdulrahman Al-Shahat\";\n\"qari_abdurrashid_sufi_gapless\" = \"Abdur-Rashid Sufi\";\n\"qari_afasy\" = \"Mishary Al-Afasy (gapped)\";\n\"qari_afasy_cali_gapless\" = \"Mishari Al-Afasy (California)\";\n\"qari_afasy_gapless\" = \"Mishary Al-Afasy\";\n\"qari_ahmad_nauina_gapless\" = \"Ahmad Nauina\";\n\"qari_ahmed_al_nufais_gapless\" = \"Ahmed Al-Nufais\";\n\"qari_ajamy_gapless\" = \"Ahmed ibn Ali al-Ajamy\";\n\"qari_akram_al_alaqmi\" = \"Akram Al-Alaqmi\";\n\"qari_ali_hajjaj_alsouasi_gapless\" = \"Ali Hajjaj Alsouasi\";\n\"qari_ali_jaber_gapless\" = \"Ali Jaber\";\n\"qari_alijon_qari_gapless\" = \"Alijon Qari\";\n\"qari_aloosi_gapless\" = \"Abdulrahman Aloosi\";\n\"qari_alzain_ahmad_gapless\" = \"Alzain Mohammad Ahmad\";\n\"qari_ayman_suwaid_gapless\" = \"Dr. Ayman Suwaid\";\n\"qari_ayman_suwaid_gapped\" = \"Dr. Ayman Suwaid (gapped)\";\n\"qari_ayyoub\" = \"Muhammad Ayyoub (gapped)\";\n\"qari_ayyoub_gapless\" = \"Muhammad Ayyoub\";\n\"qari_aziz_alili_gapless\" = \"Aziz Alili\";\n\"qari_badr_al_turki_gapless\" = \"Badr Al-Turki\";\n\"qari_bandar_baleela_gapless\" = \"Bandar Baleela\";\n\"qari_basfar\" = \"Abdullah Basfar (gapped)\";\n\"qari_basfar_gapless\" = \"Abdullah Basfar\";\n\"qari_dussary\" = \"Yasser Ad-Dussary (gapped)\";\n\"qari_fares_abbad_gapless\" = \"Fares Abbad\";\n\"qari_farman_shawani_gapless\" = \"Farman Shawani\";\n\"qari_hady_toure_gapless\" = \"Hady Toure\";\n\"qari_hani_rifai\" = \"Hani Ar-Rifai (gapped)\";\n\"qari_hani_rifai_gapless\" = \"Hani Ar-Rifai\";\n\"qari_hudhayfi\" = \"Ali Al-Hudhaify (gapped)\";\n\"qari_hudhayfi_gapless\" = \"Ali Al-Hudhaify\";\n\"qari_husary_gapless\" = \"Husary\";\n\"qari_husary_iza3a_gapless\" = \"Husary Broadcast\";\n\"qari_husary_muallim_gapless\" = \"Husary (Muallim)\";\n\"qari_husary_mujawwad\" = \"Husary Mujawwad (gapped)\";\n\"qari_husary_mujawwad_gapless\" = \"Husary (Mujawwad)\";\n\"qari_ibrahim_alakhdar_gapless\" = \"Ibrahim Al-Akhdar\";\n\"qari_idrees_abkar_gapless\" = \"Idrees Abkar\";\n\"qari_jibreel\" = \"Muhammad Jibreel (gapped)\";\n\"qari_jibreel_gapless\" = \"Muhammad Jibreel\";\n\"qari_juhany_gapless\" = \"Abdullah al Juhany\";\n\"qari_khaled_muhanna_gapless\" = \"Khaled Al-Muhanna (gapped)\";\n\"qari_khalid_jalil_gapless\" = \"Khalid Al-Jalil\";\n\"qari_khalid_qahtani_gapless\" = \"Khalid Al-Qahtani\";\n\"qari_khalifa_taniji_gapless\" = \"Khalifa Taniji\";\n\"qari_luhaidan_gapless\" = \"Muhammad Al-Luhaidan\";\n\"qari_mahmoud_ali_albana_gapless\" = \"Mahmoud Ali al Bana\";\n\"qari_minshawi_mujawwad\" = \"Minshawy Mujawwad (gapped)\";\n\"qari_minshawi_mujawwad_gapless\" = \"Minshawy Mujawwad\";\n\"qari_minshawi_murattal_gapless\" = \"Minshawi Murattal\";\n\"qari_mishari_walk_gapless\" = \"Mishari with Ibrahim Walk (English)\";\n\"qari_mohammad_altablawi_gapless\" = \"Mohammad al Tablawy\";\n\"qari_mokhtasar_asmari_gapless\" = \"Abdullah Al-Asmari (Arabic Commentary)\";\n\"qari_mostafa_ismaeel_gapless\" = \"Mostafa Ismaeel\";\n\"qari_muaiqly\" = \"Maher Al Muaiqly (gapped)\";\n\"qari_muaiqly_gapless\" = \"Maher Al Muaiqly\";\n\"qari_muaiqly_haramain_gapless\" = \"Maher Al Muaiqly (Haramain)\";\n\"qari_muhammad_rashad_shereef_gapless\" = \"Muhammad Rashad Al-Shereef\";\n\"qari_nabil_rifa3i_gapless\" = \"Nabil Ar-Rifai\";\n\"qari_noreen_siddiq_gapless\" = \"Noreen Siddiq\";\n\"qari_peshawa_qadir_al_qurdi_gapless\" = \"Peshewa Qadir al-Kurdi\";\n\"qari_qatami_gapless\" = \"Nasser Al Qatami\";\n\"qari_raad_al_kurdi_gapless\" = \"Raad Al-Kurdi\";\n\"qari_saad_al_ghamdi\" = \"Saad Al-Ghamdi (gapped)\";\n\"qari_saad_al_ghamidi_gapless\" = \"Saad Al-Ghamdi\";\n\"qari_sahl_yaseen_gapless\" = \"Sahl Yaseen\";\n\"qari_salah_budair_gapless\" = \"Salah Budair\";\n\"qari_salah_bukhatir_gapless\" = \"Salah Bukhatir\";\n\"qari_shatri\" = \"Abu Bakr Ash-Shatri (gapped)\";\n\"qari_shatri_gapless\" = \"Abu Bakr Ash-Shatri\";\n\"qari_shuraym\" = \"Saood Ash-Shuraym (gapped)\";\n\"qari_shuraym_gapless\" = \"Saood Ash-Shuraym\";\n\"qari_suadis\" = \"Abdurrahmaan As-Sudais (gapped)\";\n\"qari_sudais_gapless\" = \"Abdurrahman As-Sudais\";\n\"qari_tablawy\" = \"Mohammad al Tablaway (gapped)\";\n\"qari_tawfeeq_as_sawaigh_gapless\" = \"Tawfeeq as-Sawaigh\";\n\"qari_wadee3_alyamani_gapless\" = \"Wadee\\' Al-Yamani\";\n\"qari_walk\" = \"Ibrahim Walk (English)\";\n\"qari_walk_gapless\" = \"Ibrahim Walk (English)\";\n\"qari_yasser_dussary_gapless\" = \"Yasser Ad-Dussary\";\n\"qari_yasser_salama_hadr_gapless\" = \"Yasser Salama (hadr)\";\n"
  },
  {
    "path": "Core/Localization/Resources/en.lproj/Suras.strings",
    "content": "\"sura_names_translation[0]\" = \"The Opening\";\n\"sura_names_translation[1]\" = \"The Cow\";\n\"sura_names_translation[2]\" = \"The Family of Imran\";\n\"sura_names_translation[3]\" = \"The Women\";\n\"sura_names_translation[4]\" = \"The Table Spread With Food\";\n\"sura_names_translation[5]\" = \"The Cattle\";\n\"sura_names_translation[6]\" = \"The Heights (or The Wall with Elevations)\";\n\"sura_names_translation[7]\" = \"The Spoils of War\";\n\"sura_names_translation[8]\" = \"The Repentance\";\n\"sura_names_translation[9]\" = \"Jonah\";\n\"sura_names_translation[10]\" = \"(Prophet) Hūd\";\n\"sura_names_translation[11]\" = \"(Prophet) Joseph\";\n\"sura_names_translation[12]\" = \"The Thunder\";\n\"sura_names_translation[13]\" = \"Abraham\";\n\"sura_names_translation[14]\" = \"The Rocky Tract\";\n\"sura_names_translation[15]\" = \"The Bees\";\n\"sura_names_translation[16]\" = \"The Journey by Night\";\n\"sura_names_translation[17]\" = \"The Cave\";\n\"sura_names_translation[18]\" = \"Mary\";\n\"sura_names_translation[19]\" = \"Ta-Ha\";\n\"sura_names_translation[20]\" = \"The Prophets\";\n\"sura_names_translation[21]\" = \"The Pilgrimage\";\n\"sura_names_translation[22]\" = \"The Believers\";\n\"sura_names_translation[23]\" = \"The Light\";\n\"sura_names_translation[24]\" = \"The Criterion\";\n\"sura_names_translation[25]\" = \"The Poets\";\n\"sura_names_translation[26]\" = \"The Ants\";\n\"sura_names_translation[27]\" = \"The Narration\";\n\"sura_names_translation[28]\" = \"The Spider\";\n\"sura_names_translation[29]\" = \"The Romans\";\n\"sura_names_translation[30]\" = \"Luqmān\";\n\"sura_names_translation[31]\" = \"The Prostration\";\n\"sura_names_translation[32]\" = \"The Confederates\";\n\"sura_names_translation[33]\" = \"Sheba\";\n\"sura_names_translation[34]\" = \"The Originator of Creation\";\n\"sura_names_translation[35]\" = \"Ya Sin\";\n\"sura_names_translation[36]\" = \"Those Ranged in Ranks\";\n\"sura_names_translation[37]\" = \"The Letter \\\"Saad\\\"\";\n\"sura_names_translation[38]\" = \"The Groups\";\n\"sura_names_translation[39]\" = \"The Forgiver\";\n\"sura_names_translation[40]\" = \"They are explained in detail\";\n\"sura_names_translation[41]\" = \"The Consultation\";\n\"sura_names_translation[42]\" = \"The Gold Adornments\";\n\"sura_names_translation[43]\" = \"The Smoke\";\n\"sura_names_translation[44]\" = \"The Kneeling\";\n\"sura_names_translation[45]\" = \"The Curved Sand‑hills\";\n\"sura_names_translation[46]\" = \"Muḥammad صَلَّى ٱللَّهُ عَلَيۡهِ وَسَلَّمَ\";\n\"sura_names_translation[47]\" = \"The Victory\";\n\"sura_names_translation[48]\" = \"The Dwellings\";\n\"sura_names_translation[49]\" = \"The Letter \\\"Qaf\\\"\";\n\"sura_names_translation[50]\" = \"The Winds that Scatter\";\n\"sura_names_translation[51]\" = \"The Mount\";\n\"sura_names_translation[52]\" = \"The Star\";\n\"sura_names_translation[53]\" = \"The Moon\";\n\"sura_names_translation[54]\" = \"The Most Gracious\";\n\"sura_names_translation[55]\" = \"The Event\";\n\"sura_names_translation[56]\" = \"Iron\";\n\"sura_names_translation[57]\" = \"The Woman Who Disputes\";\n\"sura_names_translation[58]\" = \"The Gathering\";\n\"sura_names_translation[59]\" = \"The Woman to be examined\";\n\"sura_names_translation[60]\" = \"The Row or the Rank\";\n\"sura_names_translation[61]\" = \"Friday\";\n\"sura_names_translation[62]\" = \"The Hypocrites\";\n\"sura_names_translation[63]\" = \"Mutual Loss and Gain\";\n\"sura_names_translation[64]\" = \"The Divorce\";\n\"sura_names_translation[65]\" = \"The Prohibition\";\n\"sura_names_translation[66]\" = \"Dominion\";\n\"sura_names_translation[67]\" = \"The Pen\";\n\"sura_names_translation[68]\" = \"The Inevitable\";\n\"sura_names_translation[69]\" = \"The Ways of Ascent\";\n\"sura_names_translation[70]\" = \"Noah\";\n\"sura_names_translation[71]\" = \"The Jinn\";\n\"sura_names_translation[72]\" = \"The One wrapped in Garments\";\n\"sura_names_translation[73]\" = \"The One Enveloped\";\n\"sura_names_translation[74]\" = \"The Resurrection\";\n\"sura_names_translation[75]\" = \"Man\";\n\"sura_names_translation[76]\" = \"Those sent forth\";\n\"sura_names_translation[77]\" = \"The News\";\n\"sura_names_translation[78]\" = \"Those Who Pull Out\";\n\"sura_names_translation[79]\" = \"He Frowned\";\n\"sura_names_translation[80]\" = \"Winding Round and losing its Light\";\n\"sura_names_translation[81]\" = \"The Cleaving\";\n\"sura_names_translation[82]\" = \"Those Who Deal in Fraud\";\n\"sura_names_translation[83]\" = \"The Splitting Asunder\";\n\"sura_names_translation[84]\" = \"The Big Stars “Burūj”\";\n\"sura_names_translation[85]\" = \"The Night‑Comer\";\n\"sura_names_translation[86]\" = \"The Most High\";\n\"sura_names_translation[87]\" = \"The Overwhelming\";\n\"sura_names_translation[88]\" = \"The Break of Day or the Dawn\";\n\"sura_names_translation[89]\" = \"The City\";\n\"sura_names_translation[90]\" = \"The Sun\";\n\"sura_names_translation[91]\" = \"The Night\";\n\"sura_names_translation[92]\" = \"The Forenoon ‑ “After Sunrise”\";\n\"sura_names_translation[93]\" = \"The Opening Forth\";\n\"sura_names_translation[94]\" = \"The Fig\";\n\"sura_names_translation[95]\" = \"The Clot\";\n\"sura_names_translation[96]\" = \"The Night of Decree\";\n\"sura_names_translation[97]\" = \"The Clear Evidence\";\n\"sura_names_translation[98]\" = \"The Earthquake\";\n\"sura_names_translation[99]\" = \"Those That Run\";\n\"sura_names_translation[100]\" = \"The Striking Hour\";\n\"sura_names_translation[101]\" = \"The piling Up — The Emulous Desire\";\n\"sura_names_translation[102]\" = \"The Time\";\n\"sura_names_translation[103]\" = \"The Slanderer\";\n\"sura_names_translation[104]\" = \"The Elephant\";\n\"sura_names_translation[105]\" = \"Quraish\";\n\"sura_names_translation[106]\" = \"The Small Kindnesses\";\n\"sura_names_translation[107]\" = \"A River in Paradise\";\n\"sura_names_translation[108]\" = \"The Disbelievers\";\n\"sura_names_translation[109]\" = \"The Help\";\n\"sura_names_translation[110]\" = \"The Palm Fibre\";\n\"sura_names_translation[111]\" = \"The Purity\";\n\"sura_names_translation[112]\" = \"The Daybreak\";\n\"sura_names_translation[113]\" = \"Mankind\";\n\"sura_names[0]\" = \"Al-Fātihah\";\n\"sura_names[1]\" = \"Al-Baqarah\";\n\"sura_names[2]\" = \"Āli-ʿImrān\";\n\"sura_names[3]\" = \"An-Nisāʾ\";\n\"sura_names[4]\" = \"Al-Māʾidah\";\n\"sura_names[5]\" = \"Al-Anʿām\";\n\"sura_names[6]\" = \"Al-Aʿrāf\";\n\"sura_names[7]\" = \"Al-Anfāl\";\n\"sura_names[8]\" = \"At-Tawbah\";\n\"sura_names[9]\" = \"Yūnus\";\n\"sura_names[10]\" = \"Hūd\";\n\"sura_names[11]\" = \"Yūsuf\";\n\"sura_names[12]\" = \"Ar-Raʿd\";\n\"sura_names[13]\" = \"Ibrāhīm\";\n\"sura_names[14]\" = \"Al-Ḥijr\";\n\"sura_names[15]\" = \"An-Naḥl\";\n\"sura_names[16]\" = \"Al-Isrāʾ\";\n\"sura_names[17]\" = \"Al-Kahf\";\n\"sura_names[18]\" = \"Maryam\";\n\"sura_names[19]\" = \"Ṭā-Hā\";\n\"sura_names[20]\" = \"Al-Anbiyāʾ\";\n\"sura_names[21]\" = \"Al-Ḥajj\";\n\"sura_names[22]\" = \"Al-Muʾminūn\";\n\"sura_names[23]\" = \"An-Nūr\";\n\"sura_names[24]\" = \"Al-Furqān\";\n\"sura_names[25]\" = \"Ash-Shuʿarāʾ\";\n\"sura_names[26]\" = \"An-Naml\";\n\"sura_names[27]\" = \"Al-Qaṣaṣ\";\n\"sura_names[28]\" = \"Al-ʿAnkabūt\";\n\"sura_names[29]\" = \"Ar-Rūm\";\n\"sura_names[30]\" = \"Luqmān\";\n\"sura_names[31]\" = \"As-Sajdah\";\n\"sura_names[32]\" = \"Al-Aḥzāb\";\n\"sura_names[33]\" = \"Sabaʾ\";\n\"sura_names[34]\" = \"Fāṭir\";\n\"sura_names[35]\" = \"Yā-Sīn\";\n\"sura_names[36]\" = \"Aṣ-Ṣāffāt\";\n\"sura_names[37]\" = \"Ṣād\";\n\"sura_names[38]\" = \"Az-Zumar\";\n\"sura_names[39]\" = \"Ghāfir\";\n\"sura_names[40]\" = \"Fuṣṣilat\";\n\"sura_names[41]\" = \"Ash-Shūrā\";\n\"sura_names[42]\" = \"Az-Zukhruf\";\n\"sura_names[43]\" = \"Ad-Dukhān\";\n\"sura_names[44]\" = \"Al-Jāthiyah\";\n\"sura_names[45]\" = \"Al-Aḥqāf\";\n\"sura_names[46]\" = \"Muḥammad\";\n\"sura_names[47]\" = \"Al-Fatḥ\";\n\"sura_names[48]\" = \"Al-Ḥujurāt\";\n\"sura_names[49]\" = \"Qāf\";\n\"sura_names[50]\" = \"Adh-Dhāriyāt\";\n\"sura_names[51]\" = \"Aṭ-Ṭūr\";\n\"sura_names[52]\" = \"An-Najm\";\n\"sura_names[53]\" = \"Al-Qamar\";\n\"sura_names[54]\" = \"Ar-Raḥmān\";\n\"sura_names[55]\" = \"Al-Wāqiʿah\";\n\"sura_names[56]\" = \"Al-Ḥadīd\";\n\"sura_names[57]\" = \"Al-Mujādilah\";\n\"sura_names[58]\" = \"Al-Ḥashr\";\n\"sura_names[59]\" = \"Al-Mumtaḥanah\";\n\"sura_names[60]\" = \"Aṣ-Ṣaff\";\n\"sura_names[61]\" = \"Al-Jumuʿah\";\n\"sura_names[62]\" = \"Al-Munāfiqūn\";\n\"sura_names[63]\" = \"At-Taghābun\";\n\"sura_names[64]\" = \"Aṭ-Ṭalāq\";\n\"sura_names[65]\" = \"At-Taḥrīm\";\n\"sura_names[66]\" = \"Al-Mulk\";\n\"sura_names[67]\" = \"Al-Qalam\";\n\"sura_names[68]\" = \"Al-Ḥāqqah\";\n\"sura_names[69]\" = \"Al-Maʿārij\";\n\"sura_names[70]\" = \"Nūḥ\";\n\"sura_names[71]\" = \"Al-Jinn\";\n\"sura_names[72]\" = \"Al-Muzzammil\";\n\"sura_names[73]\" = \"Al-Muddaththir\";\n\"sura_names[74]\" = \"Al-Qiyāmah\";\n\"sura_names[75]\" = \"Al-Insān\";\n\"sura_names[76]\" = \"Al-Mursalāt\";\n\"sura_names[77]\" = \"An-Nabaʾ\";\n\"sura_names[78]\" = \"An-Nāziʿāt\";\n\"sura_names[79]\" = \"ʿAbasa\";\n\"sura_names[80]\" = \"At-Takwīr\";\n\"sura_names[81]\" = \"Al-Infiṭār\";\n\"sura_names[82]\" = \"Al-Muṭaffifīn\";\n\"sura_names[83]\" = \"Al-Inshiqāq\";\n\"sura_names[84]\" = \"Al-Burūj\";\n\"sura_names[85]\" = \"Aṭ-Ṭāriq\";\n\"sura_names[86]\" = \"Al-Aʿlā\";\n\"sura_names[87]\" = \"Al-Ghāshiyah\";\n\"sura_names[88]\" = \"Al-Fajr\";\n\"sura_names[89]\" = \"Al-Balad\";\n\"sura_names[90]\" = \"Ash-Shams\";\n\"sura_names[91]\" = \"Al-Layl\";\n\"sura_names[92]\" = \"Aḍ-Ḍuḥā\";\n\"sura_names[93]\" = \"Ash-Sharḥ\";\n\"sura_names[94]\" = \"At-Tīn\";\n\"sura_names[95]\" = \"Al-ʿAlaq\";\n\"sura_names[96]\" = \"Al-Qadr\";\n\"sura_names[97]\" = \"Al-Bayyinah\";\n\"sura_names[98]\" = \"Az-Zalzalah\";\n\"sura_names[99]\" = \"Al-ʿĀdiyāt\";\n\"sura_names[100]\" = \"Al-Qāriʿah\";\n\"sura_names[101]\" = \"At-Takāthur\";\n\"sura_names[102]\" = \"Al-ʿAṣr\";\n\"sura_names[103]\" = \"Al-Humazah\";\n\"sura_names[104]\" = \"Al-Fīl\";\n\"sura_names[105]\" = \"Quraysh\";\n\"sura_names[106]\" = \"Al-Māʿūn\";\n\"sura_names[107]\" = \"Al-Kawthar\";\n\"sura_names[108]\" = \"Al-Kāfirūn\";\n\"sura_names[109]\" = \"An-Naṣr\";\n\"sura_names[110]\" = \"Al-Masad\";\n\"sura_names[111]\" = \"Al-Ikhlāṣ\";\n\"sura_names[112]\" = \"Al-Falaq\";\n\"sura_names[113]\" = \"An-Nās\";\n"
  },
  {
    "path": "Core/Localization/Resources/es.lproj/Android.strings",
    "content": "\"about_contributors\" = \"Colaboradores\";\n\"about_contributors_summary\" = \"Lista de personas que han contribuido al desarrollo de Quran para Android\";\n\"about_data_sources\" = \"Fuentes de datos\";\n\"about_description\" = \"Corán para Android es una aplicación gratuita de Corán. Por favor, no se olvide de los contribuyentes en sus oraciones.\";\n\"about_furqan_summary\" = \"Texto Uthmani y Tafaseer árabe\";\n\"about_images\" = \"Imágenes\";\n\"about_madani_images\" = \"\\\"Las imágenes del Corán se basan en las fuentes del Complejo del Rey Fahd para la Impresión del texto del Corán \\\"\";\n\"about_naskh_images\" = \"Las imágenes del Corán para la aplicación Naskh están tomadas (con permiso) de SHL Info Systems\";\n\"about_noorhidayat_summary\" = \"Fuente de Noorehira y traducción de Mufti Taqi\";\n\"about_open_source\" = \"Proyectos de código abierto\";\n\"about_others\" = \"Otros\";\n\"about_qaloon_images\" = \"Las imágenes de Qaloon se utilizan con el permiso de Nous-Mêmes Éditions Et Diffusion (Túnez)\";\n\"about_quran_enc\" = \"Enciclopedia del Sagrado Corán\";\n\"about_quran_enc_summary\" = \"Traducciones para muchos idiomas\";\n\"about_quran_ksu\" = \"Proyecto electrónico Moshaf\";\n\"about_quran_ksu_summary\" = \"El Proyecto de Moshaf Electrónico de la Universidad Rey Saud es la fuente de la aplicación del Tafaseer árabe y de las traducciones para varios idiomas. También es la fuente de la recitación del Dr. Ayman Suwaid.\";\n\"about_quranicaudio_summary\" = \"Recitaciones del Corán en mp3 sin pausas\";\n\"about_tanzil_summary\" = \"Traducciones para algunos idiomas\";\n\"app_name\" = \"El Corán\";\n\"audio_manager\" = \"Gestor de audio\";\n\"audio_manager_delete_selection\" = \"Borrar la selección\";\n\"audio_manager_download_all\" = \"Descargar todo\";\n\"audio_manager_download_selection\" = \"Descargar selección\";\n\"audio_manager_remove_audio_msg\" = \"¿Está seguro de que desea eliminar %1$@?\";\n\"audio_manager_remove_audio_title\" = \"¿Quitar la Sura?\";\n\"audio_manager_remove_multiple_audio_msg\" = \"¿Está seguro de que desea eliminar?\";\n\"audio_manager_surah_delete\" = \"Borrar sura\";\n\"audio_manager_surah_download\" = \"Descargar sura\";\n\"audio_updated_text\" = \"Se han actualizado varios archivos de audio del Corán. Quran para Android ha eliminado su copia de estos archivos para que las versiones más nuevas se puedan descargar la próxima vez que los reproduzca.\";\n\"audio_updated_title\" = \"Actualización de los archivos de audio del Corán\";\n\"available_translations\" = \"Disponible para descargar\";\n\"ayah_copied_popup\" = \"Versículo copiado\";\n\"bookmark_ayah\" = \"Agregar este versículo a Favoritos\";\n\"bookmarks_list_empty\" = \"Sin Favoritos\";\n\"cancel\" = \"Cancelar\";\n\"canceling\" = \"Cancelando…\";\n\"copy_ayah\" = \"Copiar versículo\";\n\"delete_tag\" = \"Borrar Etiqueta\";\n\"delete_translation\" = \"Eliminar la traducción\";\n\"dialog_ok\" = \"OK\";\n\"download_amount_in_megabytes\" = \"%@ MB\";\n\"download_cancel\" = \"Cancelar\";\n\"download_error_disk\" = \"No hay suficiente espacio en disco para descargar\";\n\"download_error_general\" = \"No se pudo descargar\";\n\"download_error_invalid_download\" = \"El archivo descargado se corrompió\";\n\"download_error_invalid_download_retry\" = \"Archivos dañados, tratando de volver a descargar\";\n\"download_error_network\" = \"No se pudo descargar debido a un error de red\";\n\"download_error_network_retry\" = \"Error de la red, intentando reanudar…\";\n\"download_error_perms\" = \"No se pudo descargar debido a un error de permisos\";\n\"download_extra_data\" = \"Tenemos que descargar una o dos pequeñas actualizaciones para la función de compartir la traducción. ¿Descargar ahora?\";\n\"download_processing\" = \"Procesando la descarga…\";\n\"download_progress\" = \"Descargado %1$@ / %2$@\";\n\"download_retry\" = \"Reintente\";\n\"download_successful\" = \"Descarga completada\";\n\"download_sura_ayah_progress\" = \"Descargando la sura %1$d ayah %2$d\";\n\"download_sura_progress\" = \"Descargado %1$@ / %2$@ de la sura %3$d\";\n\"downloaded_translations\" = \"Descargado\";\n\"downloadImportantPrompt\" = \"Hay disponible una pequeña actualización, pero importante\\npara las imágenes del Corán que tienes en tu dispositivo móvil. ¿Quieres descargar \\nesta actualización ahora?\";\n\"downloading_message\" = \"Por favor, espera a la descarga de los archivos. (La aplicación se reiniciará)\";\n\"downloadPrompt\" = \"Corán para Android  necesitamos descargar unos archivos para que funcione correctamente. Si no haces esto, la aplicación puede no funcionar confiablemente y requerirá una conexión a internet para leer.\\n¿Te gustaría descargar los archivos necesarios ahora?\\n\\t\\t\";\n\"downloadPrompt_no\" = \"No\";\n\"downloadPrompt_ok\" = \"Si\";\n\"downloadPrompt_title\" = \"¿Desea descargar otros archivos necesarios por la aplicación?\";\n\"downloadTabletPrompt\" = \"Hemos añadido recientemente imágenes mejoradas para tabletas. ¿Quieres descargar estas imágenes ahora?\";\n\"edit_tag\" = \"Editar Etiqueta\";\n\"email_us\" = \"Si su pregunta no está respondida anteriormente, usted puede enviar un email a  quranandroid@gmail.com en busca de apoyo. Tenga en cuenta que tenemos un montón de correos electrónicos, por lo que es posible que no podamos responder a todos los emails que recibimos.\";\n\"error_getting_translation_list\" = \"No se puede descargar la lista de traducciones. Por favor, inténtelo de nuevo más tarde.\";\n\"export_data_error\" = \"Error en la exportación de datos\";\n\"exported_data\" = \"Datos exportados a %1$@\";\n\"extracting_title\" = \"Procesando…\";\n\"found_in_sura\" = \"Capítulo encontrado (%1$d) %2$@: %3$d (Página %4$d)\";\n\"from\" = \"Desde\";\n\"get_arabic_search_db\" = \"Buscar en la Base de Datos Árabe\";\n\"get_translations\" = \"Obtener traducciones\";\n\"gotoPage\" = \"Ir a la página\";\n\"help\" = \"\\n        <b>How do I play audio?</b>\\n        <br/>Open any Quran page.  Tap on the screen once.  At the bottom, you will notice\\n        a play button and some text with the name of a qari.  click the name of the qari to\\n        choose a different qari.  Click play to download and play the current page or sura.\\n        <br/>\\n        <br/><b>How do I view the translation?</b>\\n        <br/>Open any Quran page.  Tap on the screen once.  In the top, you will notice a\\n        globe icon (or, if you don\\'t see it, you may see an icon with three square dots - click\\n        this and choose translation to view the translation).\\n        <br/>\\n        If you do not have any translations downloaded, it will take\\n        you to a screen where you can download a translation.  Choose and download a translation,\\n        then return back and tap the globe icon again to view the translation.\\n        <br/>\\n        <br/><b>How do I bookmark a page?</b>\\n        <br/>Open any Quran page.  Tap on the screen once.  In the top right, you will see a\\n        star icon.  Tap the star icon to bookmark it (it will be solid white).  Tap the star icon\\n        again to remove the bookmark.\\n        <br/>\\n        <br/><b>How do I make the text larger?</b>\\n        <br/>For the arabic pages, hold your phone in landscape.  This makes the text larger.\\n        For translations, go to settings and choose translation size.\\n        <br/>\\n        <br/><b>How do I share an ayah?</b>\\n        <br/>While on any arabic page, press and hold on any ayah to get a menu where you can\\n        choose to bookmark this ayah, share it, see the tafseer, or copy the ayah to the clipboard.\\n        <br/>\\n        <br/><b>Malayalm/Tamil/Bangla/Urdu fonts don\\'t work!</b>\\n        <br/>Unfortunately, Android versions before 4.0 do not support these fonts, and there is\\n        little we can do to help with this.\\n\";\n\"help_title\" = \"Preguntas Frecuentes\";\n\"highlighting_database\" = \"Archivos requeridos\";\n\"import_data\" = \"Importar datos\";\n\"import_data_and_override\" = \"Si importas este archivo, reemplazará todos tus marcadores con %1$d marcador(es) y %2$d etiqueta(s). ¿Importar?\";\n\"import_data_error\" = \"Archivo de copia de seguridad no válido (o no se puede leer el archivo de copia de seguridad).\";\n\"import_data_permissions_error\" = \"No se puede leer el archivo de copia de seguridad debido a un error de permisos.\";\n\"import_successful\" = \"Importar con éxito\";\n\"juz2_description\" = \"Yuz %1$@\";\n\"kitkat_external_message\" = \"Debido a las limitaciones de Android, si decide almacenar los datos de la aplicación en su sdcard externa y luego desinstalar, los datos de la aplicación dejarán de ser útilies. Las páginas y audios de Android serán eliminados y usted tendrá que volver a descargarlos. ¿Está seguro que quiere usar la sdcard externa?\";\n\"loading\" = \"Cargando…\";\n\"madani\" = \"Revelado en Medina\";\n\"makki\" = \"Revelado en La Meca\";\n\"menu_about\" = \"Acerca de Nosotros\";\n\"menu_back_to_page\" = \"Mostrar El Corán\";\n\"menu_bookmarks\" = \"Favoritos\";\n\"menu_bookmarks_ayah\" = \"Versículos favoritos\";\n\"menu_bookmarks_page\" = \"Página de favoritos\";\n\"menu_get_translations\" = \"Obtener traducciones\";\n\"menu_help\" = \"Ayuda\";\n\"menu_jump\" = \"Saltar\";\n\"menu_jump_last_page\" = \"Última página\";\n\"menu_other_apps\" = \"Otras aplicaciones\";\n\"menu_search\" = \"Buscar\";\n\"menu_settings\" = \"Ajustes\";\n\"menu_show_date\" = \"Fecha del espectáculo\";\n\"menu_sort\" = \"Ordenar\";\n\"menu_sort_date\" = \"Fecha agregada\";\n\"menu_sort_group_by_tags\" = \"Agrupar por etiquetas\";\n\"menu_sort_location\" = \"Ubicación en el Corán\";\n\"menu_translation\" = \"Mostrar traducción\";\n\"more_translations\" = \"Más traducciones\";\n\"move_down\" = \"Desplazarse hacia abajo\";\n\"move_up\" = \"Subir de puesto\";\n\"need_translation\" = \"Usted no tiene ninguna traducción / comentario todavía descargado.\";\n\"new_tag\" = \"Nueva Etiqueta\";\n\"next\" = \"Siguiente\";\n\"no_arabic_search_available\" = \"Usted no ha descargado el paquete de búsqueda árabe. Por favor descargue y pruebe nuevamente su búsqueda.\";\n\"no_results\" = \"No se encontró \\\"%@\\\"\";\n\"not_tagged\" = \"Sin Etiquetar\";\n\"notification_channel_audio\" = \"Recitación del Corán\";\n\"notification_channel_download\" = \"Descargas del Corán\";\n\"notification_download_canceled\" = \"Descarga cancelada\";\n\"page_description\" = \"Página %1$@, Yuz %2$@\";\n\"pause\" = \"Pausa\";\n\"play\" = \"Reproducir\";\n\"play_apply\" = \"Aplicar\";\n\"play_apply_and_play\" = \"Aplicar y reproducir\";\n\"play_each_verse\" = \"repite cada Ayah:\";\n\"play_from_here\" = \"Reproducir desde aquí\";\n\"play_restrict_range\" = \"Sólo reproducir los versículos anteriores\";\n\"play_verses_range\" = \"Escucha el conjunto de ayat:\";\n\"playback_prompt_title\" = \"Inicie la reproducción desde:\";\n\"playback_speed\" = \"Velocidad de reproducción:\";\n\"please_grant_permissions\" = \"Por favor, conceda el permiso en la configuración de la aplicación\";\n\"please_wait\" = \"Por favor, espere...\";\n\"prefs_app_location_summary\" = \"Elegir ubicación para almacenar los archivos del Corán.\";\n\"prefs_app_location_title\" = \"Directorio de Datos del Corán\";\n\"prefs_app_size\" = \"El tamaño actual de los datos es\";\n\"prefs_audio_manager_summary\" = \"Gestionar y descargar el audio coránico\";\n\"prefs_ayah_before_translation_summary\" = \"Mostrar versículo en árabe sobre la traducción\";\n\"prefs_ayah_before_translation_title\" = \"Mostrar versículo antes de la traducción\";\n\"prefs_calculating_app_size\" = \"Calculando tamaño de la aplicación\";\n\"prefs_category_advanced\" = \"Opciones avanzadas\";\n\"prefs_category_advanced_summary\" = \"Importar/exportar marcadores, establecer el directorio de datos del Corán, etc.\";\n\"prefs_category_display_settings\" = \"Configuración de pantalla\";\n\"prefs_category_download\" = \"Opciones de descarga\";\n\"prefs_category_dual_screen\" = \"Preferencias de doble página\";\n\"prefs_category_reading\" = \"Preferencias de lectura\";\n\"prefs_category_translation\" = \"Preferencias de traducción\";\n\"prefs_copying_app_files\" = \"Copiando archivos de la aplicación\";\n\"prefs_display_marker_summary\" = \"Mostrar una pantalla emergente al alcanzar un Yuz, un Hizb, etc\";\n\"prefs_display_marker_title\" = \"Mostrar marcador de ventanas emergentes\";\n\"prefs_download_amount_summary\" = \"Cantidad preferente de descarga de audio sin pausas.\";\n\"prefs_download_amount_title\" = \"Cantidad descargada\";\n\"prefs_dual_page_mode_disabled\" = \"En modo horizontal, se mostrará solo una página.\";\n\"prefs_dual_page_mode_enabled\" = \"En modo horizontal, aparecerán dos páginas una al lado de la otra.\";\n\"prefs_dual_page_mode_title\" = \"Modo Tableta\";\n\"prefs_err_moving_app_files\" = \"Error al mover los archivos de la aplicación\";\n\"prefs_export_summary\" = \"Exportar una copia de los marcadores y etiquetas\";\n\"prefs_export_title\" = \"Exportar\";\n\"prefs_highlight_bookmarks_summary\" = \"Resaltar versículos favoritos durante la lectura\";\n\"prefs_highlight_bookmarks_title\" = \"Resaltar favoritos\";\n\"prefs_import_summary\" = \"Importar marcadores y etiquetas\";\n\"prefs_import_title\" = \"Importar\";\n\"prefs_megabytes_int\" = \"%1$d MB\";\n\"prefs_new_background_title\" = \"Nuevo fondo\";\n\"prefs_night_mode_background_brightness_summary\" = \"Brillo de la página cuando se activa el modo nocturno\";\n\"prefs_night_mode_background_brightness_title\" = \"Luminosidad de fondo\";\n\"prefs_night_mode_summary\" = \"Se utilizará fondo oscuro y fuentes claras\";\n\"prefs_night_mode_text_brightness_summary\" = \"Texto brillante cuando el modo nocturno está activo\";\n\"prefs_night_mode_text_brightness_title\" = \"Texto Brillante\";\n\"prefs_night_mode_title\" = \"Modo nocturno\";\n\"prefs_no_enough_space_to_move_files\" = \"Espacio insuficiente para mover archivos de la aplicación\";\n\"prefs_overlay_page_info_summary\" = \"Superposición del número de página, nombre del capítulo, y el número del yuz durante la lectura\";\n\"prefs_overlay_page_info_title\" = \"Mostrar información de la página\";\n\"prefs_page_type_summary\" = \"Seleccione el tipo de páginas de lectura\";\n\"prefs_page_type_title\" = \"Tipo de página (experimental)\";\n\"prefs_preview\" = \"Vista previa\";\n\"prefs_sdcard_external\" = \"Tarjeta SD Externa %1$d\";\n\"prefs_sdcard_internal\" = \"Almacenamiento interno\";\n\"prefs_send_logs_summary\" = \"Enviar los registros de depuración al desarrollador\";\n\"prefs_send_logs_title\" = \"Enviar registros\";\n\"prefs_split_page_and_translation_summary\" = \"En el modo de doble página con traducciones, se muestra la página del Corán y la traducción\";\n\"prefs_split_page_and_translation_title\" = \"Corán y traducción en modo dual\";\n\"prefs_streaming_summary\" = \"Transmitir el audio cuando sea posible.\";\n\"prefs_streaming_title\" = \"Transmisión\";\n\"prefs_sura_translated_name_summary\" = \"Mostrar la traducción del nombre de la sura\";\n\"prefs_sura_translated_name_title\" = \"Nombre de la sura traducida\";\n\"prefs_translation_text_title\" = \"Tamaño del texto de la traducción\";\n\"prefs_translations\" = \"Traducciones\";\n\"prefs_translations_summary\" = \"Descargar y gestionar traducciones\";\n\"prefs_use_arabic_summary_on\" = \"La aplicación se mostrará en Árabe\";\n\"prefs_use_arabic_title\" = \"Modo Árabe (الوضع العربي)\";\n\"prefs_use_dyslexic_font_summary\" = \"Display translations in dyslexia friendly font\";\n\"prefs_use_dyslexic_font_title\" = \"Dyslexia friendly font\";\n\"prefs_volume_key_navigation_summary\" = \"Navegar entre páginas utilizando las teclas de volumen\";\n\"prefs_volume_key_navigation_title\" = \"Navegar con la tecla de volumen\";\n\"previous\" = \"Anteriormente\";\n\"process_progress\" = \"Procesando archivo %1$d / %2$d\";\n\"qarilist_dismiss\" = \"Descartar\";\n\"qarilist_gapless\" = \"Continuo\";\n\"qarilist_gapped\" = \"No continuo\";\n\"qarilist_qaris_with_downloads\" = \"Recitadores con descargas\";\n\"qarilist_ready_to_play\" = \"Listo para escuchar\";\n\"qarilist_select_qari\" = \"Seleccione un Qari\";\n\"qarilist_selected\" = \"Seleccionado\";\n\"quran_ayah\" = \"Versículo %1$d\";\n\"quran_ayah_details\" = \"%1$@ - Ayah %2$@, Yuz\\' %3$@\";\n\"quran_hizb\" = \"Hizb\";\n\"quran_juz2\" = \"Yuz\";\n\"quran_nos\" = \"½\";\n\"quran_page\" = \"Página\";\n\"quran_rob3\" = \"¼\";\n\"quran_sura\" = \"Capítulo\";\n\"quran_sura_title\" = \"Capítulo %1$@\";\n\"quran_talt_arb3\" = \"¾\";\n\"quranSearchType\" = \"Versículos del Corán\";\n\"recent_pages\" = \"Páginas recientes\";\n\"recite_from_here\" = \"Recita desde aquí\";\n\"remove_button\" = \"Eliminar\";\n\"remove_dlg_msg\" = \"¿Está seguro que desea eliminar el %1$@?\";\n\"remove_dlg_title\" = \"¿Eliminar traducción?\";\n\"scoped_storage_message\" = \"Debido a los cambios de Android para aumentar la privacidad del usuario, copiar archivos fuera de los directorios de la aplicación podría impedir que Quran para Android acceda a sus datos en futuras versiones de Android. Estás seguro de que quieres usar esta ruta?\";\n\"sdcard_error\" = \"No se pudo encontrar tarjetas SD. Por favor, inserte la tarjeta SD y vuelva a intentarlo.\";\n\"search_data\" = \"Buscar datos\";\n\"search_entire_mushaf\" = \"Buscar en todo el mushaf\";\n\"search_full_results\" = \"Resultados completos\";\n\"search_hint\" = \"Buscar en El Corán\";\n\"search_key\" = \"Pulse la tecla de búsqueda para buscar un versículo\";\n\"see_tafseer_of_verse\" = \"El tafser de esta ayah está incluido en el tafser de la ayah %d (Haga clic para ampliar).\";\n\"share_ayah\" = \"Compartir enlace del versículo\";\n\"share_ayah_text\" = \"Compartir texto del versículo\";\n\"starting_page_label\" = \"Inicio de página\";\n\"stop\" = \"Detener\";\n\"storage_permission_please_restart\" = \"Por favor, reinicie la aplicación para que esto tenga efecto.\";\n\"storage_permission_rationale\" = \"Quran para Android quiere su permiso para almacenar sus datos en el almacenamiento externo. Quran para Android funcionará sin este permiso, pero si borras los datos o desinstalas la aplicación, se eliminarán todas las páginas, el audio y los datos descargados. ¿Dar permiso a Quran para Android?\";\n\"sura_ayah_notification_str\" = \"Capítulo %1$@, Versículo %2$d\";\n\"sura_ayah_sharing_str\" = \"Capítulo %1$@: %2$d\";\n\"tag_ayah\" = \"Etiquetar esta versículo\";\n\"tag_blank_tag_error\" = \"Los nombres de las etiquetas no pueden estar en blanco.\";\n\"tag_bookmark\" = \"Etiquetar Favorito\";\n\"tag_dlg_title\" = \"Etiqueta\";\n\"tag_duplicate_tag_error\" = \"El nombre de la etiqueta ya existe.\";\n\"tag_name\" = \"Nombre\";\n\"timing_database\" = \"Archivos requeridos\";\n\"to\" = \"Para\";\n\"translation_ayah\" = \"Traducción del versículo / explicación\";\n\"translation_dialog_later\" = \"Después\";\n\"translation_dialog_yes\" = \"Si\";\n\"translation_updates_available\" = \"Una actualización está disponible para alguna de sus traducciones. ¿Quiere ir a la pantalla de traducciones ahora?\";\n\"undo\" = \"Deshacer\";\n\"update_available\" = \"Actualización disponible\";\n\"warning\" = \"Advertencia\";\n"
  },
  {
    "path": "Core/Localization/Resources/es.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Un resultado para \\&quot;%1$d\\&quot;:</string>\n                <key>other</key>\n                <string>%2$d resultados para \\&quot;%1$d\\&quot;:</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Un versículo</string>\n                <key>other</key>\n                <string>%d versículos</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/es.lproj/Localizable.strings",
    "content": "\n\n// MARK: - General\n\n// Metadata: Translated by ChatGPT; human review required.\n\"button.done\" = \"Hecho\";\n// Metadata: Translated by ChatGPT; human review required.\n\"button.delete\" = \"Eliminar\";\n\n// MARK: - Errors\n\n// Metadata: Translated by ChatGPT; human review required.\n\"error.dialog.title\" = \"Error\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.connection_lost\" = \"Se perdió la conexión a Internet. Muévase a un lugar donde haya una conexión más estable disponible, o espere hasta que la conexión se vuelva estable.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.international_roaming_off\" = \"El roaming internacional no está permitido. Cambie la configuración de roaming internacional, o active el Wi-Fi.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.not_connected_to_internet\" = \"No conectado a Internet. Active el Wi-Fi o permita la conexión de datos móviles.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.general\" = \"¡Ups! Algo salió mal. Por favor, inténtelo de nuevo.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.no_disk_space\" = \"No hay espacio disponible en el disco para guardar las descargas.\";\n\n// MARK: - Quran\n\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah\" = \"Aleya\";\n// Metadata: Translated by ChatGPT; human review required.\n\"surah\" = \"Sura\";\n// Metadata: Translated by AI; human review required.\n\"quran_alquran\" = \"El Corán\";\n\n// MARK: - Translation\n\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.translation\" = \"Traducción\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.transliteration\" = \"Transliteración\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.selectedTranslations\" = \"Seleccionado\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.translator\" = \"Traductor: \";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.see-referenced-verse\" = \"Ver aleya %d.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.read-more\" = \"Leer más\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-retrieval\" = \"¡Ups! Algo salió mal. No pudimos recuperar la traducción.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-not-available\" = \"No hay traducción disponible para esta Aleya.\";\n\n// MARK: - Search\n\n// Metadata: Translated by ChatGPT; human review required.\n\"search.recents.title\" = \"Búsquedas recientes\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.popular.title\" = \"Prueba buscar con\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.placeholder.text\" = \"Sura, verso, traducción, tafsir y números\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.result.count\" = \"%@ (%d)\";\n\n// MARK: - Settings\n\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.write_review\" = \"Escribe una reseña en la tienda de aplicaciones...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.contact_us\" = \"Contáctanos\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.donate\" = \"Donar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.share_app\" = \"Comparte la aplicación...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.app_version\" = \"Versión de la app\";\n\n// MARK: - Quran Menu\n\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabic\" = \"Árabe\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translation\" = \"Traducción/Tafsir\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.select_translation\" = \"Seleccionar traducciones/tafsir\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer\" = \"Puntero de traducción de palabras\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer.select_translation\" = \"Mostrando puntero\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.fontSizeLetter\" = \"A\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translationFontSize\" = \"Tamaño de la traducción\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabicFontSize\" = \"Tamaño del Corán\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.twoPages\" = \"2 páginas una al lado de la otra (en paisaje)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.verticalScrolling\" = \"Desplazamiento vertical\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.theme_settings\" = \"Temas y configuraciones\";\n\n// MARK: - Theme\n\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.light\" = \"Claro\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.dark\" = \"Oscuro\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto\" = \"Automático\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto.message\" = \"La aplicación del Corán seguirá la configuración de apariencia de tu iPhone\";\n\n// MARK: - Tabs\n\n// Metadata: Translated by ChatGPT; human review required.\n\"tab.notes\" = \"Notas\";\n\n// MARK: - Update\n\n// Metadata: Translated by ChatGPT; human review required.\n\"update.filesystem.title\" = \"Actualizando bases de datos...\";\n\"downloading_title\" = \"Descargando…\";\n\n// MARK: - Reciters\n\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.title\" = \"Seleccione el recitador para escuchar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.recent\" = \"Reciente\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.downloaded\" = \"Descargado\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.all\" = \"Todos\";\n\n// MARK: - Audio\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.action.modify\" = \"Modificar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.message\" = \"Reproduciendo audio de %@ a %@\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.downloading.message\" = \"Descargando audio de %@ a %@\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing-verses.label\" = \"Reproduciendo versos\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.adjust-end-verse-to-the-end.label\" = \"Ajustar el último verso al final\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-start-verse\" = \"Seleccionar verso de inicio\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-end-verse\" = \"Seleccionar verso final\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount\" = \"Descargar/Reproducir hasta\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount.description\" = \"Al reproducir audio, se reproducirá hasta el final del\";\n\n// MARK: - Bookmarks\n\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.title\" = \"Añadiendo marcadores...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.text\" = \"Cuando estés leyendo el Corán, toca el botón de marcador para marcar la página actual.\";\n\n// MARK: - Notes\n\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.title\" = \"Añadiendo destacados de Ayah...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.text\" = \"Pulsa y mantén presionado sobre una Ayah. Puedes extender la selección para incluir múltiples Ayat, luego toca el botón de marcador.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.verses-count\" = \"(+%d ayats)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.title\" = \"Eliminar destacado\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.body\" = \"La nota asociada también se eliminará.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.title\" = \"Sincronización de iCloud\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.body\" = \"La aplicación utiliza iCloud para sincronizar marcadores y notas en tus dispositivos. Puedes desactivarlo desde los ajustes de iCloud de tu dispositivo.\";\n\n// MARK: - Ayah Menu\n\n\"ayah.menu.copy\" = \"Copiar\";\n\"ayah.menu.share\" = \"Compartir…\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-juz\" = \"hasta el final del Juz'\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-surah\" = \"hasta el final de la Surah\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-page\" = \"hasta el final de la página\";\n// Metadata: Translated by AI; human review required.\n\"ayah.menu.play-end-quran\" = \"hasta el final del Corán\";\n\"ayah.menu.repeat\" = \"Repetir\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verse\" = \"versículo seleccionado\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verses\" = \"versículos seleccionados\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight\" = \"Resaltar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight-select-color\" = \"seleccionar color\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.add-note\" = \"Añadir nota\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.edit-note\" = \"Editar nota\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-note\" = \"Eliminar nota\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-highlight\" = \"Eliminar resaltado\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.short\" = \"Seleccionar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.long\" = \"Establecer como Mushaf actual\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.title\" = \"Elegir Mushaf\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selection-description\" = \"Toca un Mushaf para obtener más información.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.hafs\" = \"Mushaf Hafs\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.pages.604\" = \"604 páginas\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.lines.15\" = \"página de 15 líneas\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.supported\" = \"Traducción palabra por palabra\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.not-supported\" = \"Sin traducción palabra por palabra\";\n\n// Hafs 1405\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.title\" = \"Hafs, Medina clásica, 1405 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.description\" = \"El Mushaf Hafs clásico emitido en Medina en 1405 Hijri. La aplicación ofreció esta versión durante mucho tiempo.\\nDel Complejo de Impresión del Corán del Rey Fahd.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.issue\" = \"Emitido en 1405 Hijri\";\n\n// Hafs 1421\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.title\" = \"Hafs, Medina, 1421 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.description\" = \"El Mushaf Hafs emitido en Medina en 1421 Hijri. Del Complejo de Impresión del Corán del Rey Fahd.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.issue\" = \"Emitido en 1421 Hijri\";\n\n// Hafs 1440\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.title\" = \"Hafs, Medina, 1440 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.description\" = \"El Mushaf Hafs emitido en Medina en 1440 Hijri. Del Complejo de Impresión del Corán del Rey Fahd.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.issue\" = \"Emitido en 1440 Hijri\";\n\n// Hafs Tajweed\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.title\" = \"Hafs, Tajweed\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.description\" = \"El Mushaf Hafs de Tajweed. Al-Quran Al-Kareem - Edición Dar al-Marefa.\";\n\n// MARK: - Diagnostics\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.title\" = \"Diagnósticos\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.details\" = \"Estos ajustes son utilizados por el desarrollador de la aplicación específicamente para fines de depuración y diagnóstico.\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.share_app_logs\" = \"Compartir registros de la aplicación\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs\" = \"Habilitar el registro de depuración\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs.details\" = \"La configuración surtirá efecto en el próximo reinicio de la aplicación.\";\n\n\n// MARK: - What's new\n\n// Metadata: Translated by ChatGPT; human review required.\n\"new.title\" = \"Qué hay de nuevo\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.action\" = \"Continuar\";\n\n// Mushafs\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs\" = \"Nuevos Mushafs:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs.details\" = \"* Tajweed Hafs Mushaf: Al-Quran Al-Kareem - Edición Dar al-Marefa.\\n* Mushaf Medina 1421 hijri.\\n* Mushaf Medina 1440 hijri.\\n* Además, sigue disfrutando de la versión clásica de 1405 hijri.\";\n\n// Reciters\n// Metadata: Translated by ChatGPT; human review required.\n\"new.reciters\" = \"Nuevos Recitadores:\";\n\n// Miscellaneous\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous\" = \"Misceláneas:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous.details\" = \"* Aspecto actualizado de la aplicación.\\n* Función de búsqueda mejorada (nuevo algoritmo próximamente).\\n* Soporte de localización en vietnamita.\\n* Acceso avanzado a opciones de audio disponible cuando no se reproduce una recitación.\\n* La aplicación ahora es de código abierto: https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades\" = \"Audio:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades.details\" = \"* Control de velocidad de recitación ajustable: 0,5x, 0,75x, 1x, 1,25x, 1,5x - gracias a @adnan29979.\\n* La reproducción recuerda tu velocidad preferida - gracias a @adnan29979.\";\n\n// Personalization\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization\" = \"Temas de lectura:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization.details\" = \"* Soporte para múltiples temas. Abre una página del Corán -> Menú superior derecho -> Temas y configuraciones.\\n* Usa 'Original' si quieres volver al estilo anterior.\";\n\n// Library & Navigation\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation\" = \"Biblioteca y navegación:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation.details\" = \"* Ordena suras y juz en Inicio y muestra los números de sura para que puedas acceder a lo que necesitas más rápido - gracias a @yismailuofa.\";\n"
  },
  {
    "path": "Core/Localization/Resources/es.lproj/Readers.strings",
    "content": "\"qari_abdulaziz_zahrani_gapless\" = \"Abdulaziz Az-Zahrani\";\n\"qari_abdulbaset\" = \"Abd Al-Basit (pausas)\";\n\"qari_abdulbaset_gapless\" = \"Abd Al-Basit\";\n\"qari_abdulbaset_mujawwad\" = \"Abd Al-Basit Mujawwad (pausas)\";\n\"qari_abdulbaset_mujawwad_gapless\" = \"Abd Al-Basit Mujawwad\";\n\"qari_abdulhadi_kanakeri_gapless\" = \"AbdulHadi Kanakeri\";\n\"qari_abdullah_matroud_gapless\" = \"Jeque Abdullah Matroud\";\n\"qari_abdulmuhsin_qasim_gapless\" = \"Abdul Mohsen Al-Qasim\";\n\"qari_abdulrahman_alshahat_gapless\" = \"Abdulrahman Al-Shahat\";\n\"qari_abdurrashid_sufi_gapless\" = \"Abdur-Rashid Sufi\";\n\"qari_afasy\" = \"Mishary Al-Afasy (pausas)\";\n\"qari_afasy_cali_gapless\" = \"Mishari Al-Afasy (California)\";\n\"qari_afasy_gapless\" = \"Mishary Al-Afasy\";\n\"qari_ahmad_nauina_gapless\" = \"Ahmad Nauina\";\n\"qari_ahmed_al_nufais_gapless\" = \"Ahmed Al-Nufais\";\n\"qari_ajamy_gapless\" = \"Ahmed ibn Ali al-Ajamy\";\n\"qari_akram_al_alaqmi\" = \"Akram Al-Alaqmi\";\n\"qari_ali_hajjaj_alsouasi_gapless\" = \"Ali Hajjaj Alsouasi\";\n\"qari_ali_jaber_gapless\" = \"Ali Jaber\";\n\"qari_alijon_qari_gapless\" = \"Alijon Qari\";\n\"qari_aloosi_gapless\" = \"Abdul Rahman Aloosi\";\n\"qari_alzain_ahmad_gapless\" = \"Alzain Muhammad Ahmad\";\n\"qari_ayman_suwaid_gapless\" = \"Ayman Suwaid\";\n\"qari_ayman_suwaid_gapped\" = \"Ayman Suwaid (pausas)\";\n\"qari_ayyoub\" = \"Muhammad Ayyoub (pausas)\";\n\"qari_ayyoub_gapless\" = \"Muhammad Ayyoub\";\n\"qari_aziz_alili_gapless\" = \"Aziz Alili\";\n\"qari_badr_al_turki_gapless\" = \"Badr Al-Turki\";\n\"qari_bandar_baleela_gapless\" = \"Bandar Baleela\";\n\"qari_basfar\" = \"Abdullah Basfar (pausas)\";\n\"qari_basfar_gapless\" = \"Abdullah Basfar\";\n\"qari_dussary\" = \"Yasser Ad-Dussary (pausas)\";\n\"qari_fares_abbad_gapless\" = \"Fares Abbad\";\n\"qari_farman_shawani_gapless\" = \"Farman Shawani\";\n\"qari_hady_toure_gapless\" = \"Hady Toure\";\n\"qari_hani_rifai\" = \"Hani Ar-Rifai (pausas)\";\n\"qari_hani_rifai_gapless\" = \"Hani Ar-Rifai\";\n\"qari_hudhayfi\" = \"Ali Al-Hudhaify (pausas)\";\n\"qari_hudhayfi_gapless\" = \"Ali Al-Hudhaify\";\n\"qari_husary_gapless\" = \"Husary\";\n\"qari_husary_iza3a_gapless\" = \"Husary Broadcast\";\n\"qari_husary_muallim_gapless\" = \"Husary (Muallim)\";\n\"qari_husary_mujawwad\" = \"Husary Mujawwad (pausas)\";\n\"qari_husary_mujawwad_gapless\" = \"Husary (Mujawwad)\";\n\"qari_ibrahim_alakhdar_gapless\" = \"Ibrahim Al-Akhdar\";\n\"qari_idrees_abkar_gapless\" = \"Idrees Abkar\";\n\"qari_jibreel\" = \"Muhammad Jibreel (pausas)\";\n\"qari_jibreel_gapless\" = \"Muhammad Jibreel\";\n\"qari_juhany_gapless\" = \"Abdullah Al-Juhany\";\n\"qari_khaled_muhanna_gapless\" = \"Khaled Al-Muhanna\";\n\"qari_khalid_jalil_gapless\" = \"Khalid Al-Jalil\";\n\"qari_khalid_qahtani_gapless\" = \"Khalid Al Qahtani\";\n\"qari_khalifa_taniji_gapless\" = \"Khalifa Taniji\";\n\"qari_luhaidan_gapless\" = \"Muhammad Al-Luhaidan\";\n\"qari_mahmoud_ali_albana_gapless\" = \"Mahmoud Ali al Bana\";\n\"qari_minshawi_mujawwad\" = \"Minshawy Mujawwad (pausas)\";\n\"qari_minshawi_mujawwad_gapless\" = \"Minshawy Mujawwad\";\n\"qari_minshawi_murattal_gapless\" = \"Minshawi Murattal\";\n\"qari_mishari_walk_gapless\" = \"Mishari & Ibrahim Walk (inglés)\";\n\"qari_mohammad_altablawi_gapless\" = \"Mohammad al Tablawy\";\n\"qari_mokhtasar_asmari_gapless\" = \"Abdullah Al-Asmari (Comentario árabe)\";\n\"qari_mostafa_ismaeel_gapless\" = \"Mostafa Ismaeel\";\n\"qari_muaiqly\" = \"Maher Al Muaiqly (pausas)\";\n\"qari_muaiqly_gapless\" = \"Maher Al Muaiqly\";\n\"qari_muaiqly_haramain_gapless\" = \"Maher Al Muaiqly (Haramain)\";\n\"qari_muhammad_rashad_shereef_gapless\" = \"Muhammad Rashad Al-Sherif\";\n\"qari_nabil_rifa3i_gapless\" = \"Nabil Ar-Rifai\";\n\"qari_noreen_siddiq_gapless\" = \"Noreen Siddiq\";\n\"qari_peshawa_qadir_al_qurdi_gapless\" = \"Peshewa Qadir al-Kurdi\";\n\"qari_qatami_gapless\" = \"Nasser Al Qatami\";\n\"qari_raad_al_kurdi_gapless\" = \"Raad Al-Kurdi\";\n\"qari_saad_al_ghamdi\" = \"Saad Al-Ghamdi (pausas)\";\n\"qari_saad_al_ghamidi_gapless\" = \"Saad Al-Ghamdi\";\n\"qari_sahl_yaseen_gapless\" = \"Sahl Yaseen\";\n\"qari_salah_budair_gapless\" = \"Salah Budair\";\n\"qari_salah_bukhatir_gapless\" = \"Salah Bukhatir\";\n\"qari_shatri\" = \"Abu Bakr Ash-Shatri (pausas)\";\n\"qari_shatri_gapless\" = \"Abu Bakr Ash-Shatri\";\n\"qari_shuraym\" = \"Saood Ash-Shuraym (pausas)\";\n\"qari_shuraym_gapless\" = \"Saood Ash-Shuraym\";\n\"qari_suadis\" = \"Abdurrahmaan As-Sudais (pausas)\";\n\"qari_sudais_gapless\" = \"Abdurrahman As-Sudais\";\n\"qari_tablawy\" = \"Mohammad al Tablaway (pausas)\";\n\"qari_tawfeeq_as_sawaigh_gapless\" = \"Tawfeeq as-Sawaigh\";\n\"qari_wadee3_alyamani_gapless\" = \"Wadee\\' Al-Yamani\";\n\"qari_walk\" = \"Ibrahim Walk (traducción al inglés)\";\n\"qari_walk_gapless\" = \"Ibrahim Walk (inglés)\";\n\"qari_yasser_dussary_gapless\" = \"Yasser Ad-Dussary\";\n\"qari_yasser_salama_hadr_gapless\" = \"Yasser Salama (hadr)\";\n"
  },
  {
    "path": "Core/Localization/Resources/es.lproj/Suras.strings",
    "content": "\"sura_names_translation[0]\" = \"El Inicio\";\n\"sura_names_translation[1]\" = \"La Vaca\";\n\"sura_names_translation[2]\" = \"La Familia De ‘imrán\";\n\"sura_names_translation[3]\" = \"La Mujer\";\n\"sura_names_translation[4]\" = \"La Mesa Servida\";\n\"sura_names_translation[5]\" = \"Los Ganados\";\n\"sura_names_translation[6]\" = \"Los Lugares Elevados\";\n\"sura_names_translation[7]\" = \"Los Botines\";\n\"sura_names_translation[8]\" = \"El Arrepentimiento\";\n\"sura_names_translation[9]\" = \"Jonás\";\n\"sura_names_translation[10]\" = \"Hud\";\n\"sura_names_translation[11]\" = \"José\";\n\"sura_names_translation[12]\" = \"El Trueno\";\n\"sura_names_translation[13]\" = \"Abraham\";\n\"sura_names_translation[14]\" = \"Al Hiyr\";\n\"sura_names_translation[15]\" = \"Las Abejas\";\n\"sura_names_translation[16]\" = \"El Viaje Nocturno\";\n\"sura_names_translation[17]\" = \"La Caverna\";\n\"sura_names_translation[18]\" = \"María\";\n\"sura_names_translation[19]\" = \"Ta’ Ha’\";\n\"sura_names_translation[20]\" = \"Los Profetas\";\n\"sura_names_translation[21]\" = \"La Peregrinación\";\n\"sura_names_translation[22]\" = \"Los Creyentes\";\n\"sura_names_translation[23]\" = \"La Luz\";\n\"sura_names_translation[24]\" = \"El Criterio\";\n\"sura_names_translation[25]\" = \"Los Poetas\";\n\"sura_names_translation[26]\" = \"Las Hormigas\";\n\"sura_names_translation[27]\" = \"Los Relatos\";\n\"sura_names_translation[28]\" = \"La Araña\";\n\"sura_names_translation[29]\" = \"Los Bizantinos\";\n\"sura_names_translation[30]\" = \"Luqmán\";\n\"sura_names_translation[31]\" = \"La Prosternación\";\n\"sura_names_translation[32]\" = \"Los Aliados\";\n\"sura_names_translation[33]\" = \"Saba\";\n\"sura_names_translation[34]\" = \"El Originador\";\n\"sura_names_translation[35]\" = \"Iá’ Sín\";\n\"sura_names_translation[36]\" = \"Los Ordenados En Filas\";\n\"sura_names_translation[37]\" = \"Sad\";\n\"sura_names_translation[38]\" = \"Los Grupos\";\n\"sura_names_translation[39]\" = \"El Perdonador\";\n\"sura_names_translation[40]\" = \"La Descripción Detallada\";\n\"sura_names_translation[41]\" = \"La Consulta\";\n\"sura_names_translation[42]\" = \"Los Adornos\";\n\"sura_names_translation[43]\" = \"El Humo\";\n\"sura_names_translation[44]\" = \"La Arrodillada\";\n\"sura_names_translation[45]\" = \"Las Dunas\";\n\"sura_names_translation[46]\" = \"Mujámmad\";\n\"sura_names_translation[47]\" = \"La Victoria\";\n\"sura_names_translation[48]\" = \"Las Moradas\";\n\"sura_names_translation[49]\" = \"Qaf\";\n\"sura_names_translation[50]\" = \"Los Vientos\";\n\"sura_names_translation[51]\" = \"El Monte\";\n\"sura_names_translation[52]\" = \"La Estrella\";\n\"sura_names_translation[53]\" = \"La Luna\";\n\"sura_names_translation[54]\" = \"El Compasivo\";\n\"sura_names_translation[55]\" = \"El Suceso\";\n\"sura_names_translation[56]\" = \"El Hierro\";\n\"sura_names_translation[57]\" = \"La Que Reclama\";\n\"sura_names_translation[58]\" = \"El Encuentro\";\n\"sura_names_translation[59]\" = \"La Comprobación\";\n\"sura_names_translation[60]\" = \"Las Filas\";\n\"sura_names_translation[61]\" = \"El Viernes\";\n\"sura_names_translation[62]\" = \"Los Hipócritas\";\n\"sura_names_translation[63]\" = \"El Día Del Desengaño\";\n\"sura_names_translation[64]\" = \"El Divorcio\";\n\"sura_names_translation[65]\" = \"La Prohibición\";\n\"sura_names_translation[66]\" = \"El Reino\";\n\"sura_names_translation[67]\" = \"La Pluma\";\n\"sura_names_translation[68]\" = \"La Exposición De La Verdad\";\n\"sura_names_translation[69]\" = \"Las Vías De Ascensión\";\n\"sura_names_translation[70]\" = \"Noé\";\n\"sura_names_translation[71]\" = \"Los Yinn\";\n\"sura_names_translation[72]\" = \"El Arropado\";\n\"sura_names_translation[73]\" = \"El Envuelto En Un Manto\";\n\"sura_names_translation[74]\" = \"La Resurrección\";\n\"sura_names_translation[75]\" = \"El Ser Humano\";\n\"sura_names_translation[76]\" = \"Los Que Son Enviados\";\n\"sura_names_translation[77]\" = \"La Noticia\";\n\"sura_names_translation[78]\" = \"Los Ángeles Arrancadores\";\n\"sura_names_translation[79]\" = \"El Ceño\";\n\"sura_names_translation[80]\" = \"El Arrollamiento\";\n\"sura_names_translation[81]\" = \"La Ruptura\";\n\"sura_names_translation[82]\" = \"Los Tramposos\";\n\"sura_names_translation[83]\" = \"El Resquebrajamiento\";\n\"sura_names_translation[84]\" = \"Las Grandes Constelaciones\";\n\"sura_names_translation[85]\" = \"El Astro Nocturno\";\n\"sura_names_translation[86]\" = \"El Altísimo\";\n\"sura_names_translation[87]\" = \"El Día Que Todo Lo Alcanza\";\n\"sura_names_translation[88]\" = \"La Aurora\";\n\"sura_names_translation[89]\" = \"La Ciudad\";\n\"sura_names_translation[90]\" = \"El Sol\";\n\"sura_names_translation[91]\" = \"La Noche\";\n\"sura_names_translation[92]\" = \"El Resplandor Matinal\";\n\"sura_names_translation[93]\" = \"El Sosiego\";\n\"sura_names_translation[94]\" = \"La Higuera\";\n\"sura_names_translation[95]\" = \"La Célula Embrionaria\";\n\"sura_names_translation[96]\" = \"La Predestinación\";\n\"sura_names_translation[97]\" = \"La Evidencia Clara\";\n\"sura_names_translation[98]\" = \"El Terremoto\";\n\"sura_names_translation[99]\" = \"Los Corceles\";\n\"sura_names_translation[100]\" = \"El Evento Repentino\";\n\"sura_names_translation[101]\" = \"El Afán De Tener Más Y Más\";\n\"sura_names_translation[102]\" = \"El Tiempo\";\n\"sura_names_translation[103]\" = \"El Difamador\";\n\"sura_names_translation[104]\" = \"El Elefante\";\n\"sura_names_translation[105]\" = \"La Tribu De Quraish\";\n\"sura_names_translation[106]\" = \"La Ayuda Mínima\";\n\"sura_names_translation[107]\" = \"La Abundancia\";\n\"sura_names_translation[108]\" = \"Los Incrédulos\";\n\"sura_names_translation[109]\" = \"El Socorro\";\n\"sura_names_translation[110]\" = \"Las Fibras De Palmera\";\n\"sura_names_translation[111]\" = \"El Monoteísmo Puro\";\n\"sura_names_translation[112]\" = \"El Amanecer\";\n\"sura_names_translation[113]\" = \"Los Seres Humanos\";\n"
  },
  {
    "path": "Core/Localization/Resources/fa.lproj/Android.strings",
    "content": "\"about_contributors\" = \"همکاران\";\n\"about_contributors_summary\" = \"فهرستی از افرادی که به توسعه این برنامه یاری رسانده‌اند.\";\n\"about_data_sources\" = \"منبع داده‌ها\";\n\"about_description\" = \"این برنامه مجانی است. تهیه‌کنندگانش را از دعای خود محروم نسازید.\";\n\"about_furqan_summary\" = \"متن عثمانی و تفسیر عربی\";\n\"about_images\" = \"تصاویر\";\n\"about_madani_images\" = \"تصاویر صفحه‌های این قرآن متعلق به چاپخانه ملک فهد در مدینه منوره می‌باشد.\";\n\"about_naskh_images\" = \"تصاویر قرآنی برای برنامه ناسخ (با اجازه) از SHL Info Systems گرفته می شود\";\n\"about_noorhidayat_summary\" = \"قلم نور حرا و ترجمه مفتی تقی\";\n\"about_open_source\" = \"پروژه‌های متن‌باز\";\n\"about_others\" = \"دیگران\";\n\"about_qaloon_images\" = \"تصاویر قلون با اجازه Nous-Mêmes Éditions Et Diffusion (تونس) استفاده می شود\";\n\"about_quran_enc\" = \"دایرة المعارف قرآن کریم\";\n\"about_quran_enc_summary\" = \"ترجمه برای بسیاری از زبان ها\";\n\"about_quran_ksu\" = \"پروژه مصحف الکترونیکی\";\n\"about_quran_ksu_summary\" = \"پروژه مصحف الکترونیکی در دانشگاه ملک سعود منبع تفاسیر عربی و برخی ترجمه‌هاست.\";\n\"about_quranicaudio_summary\" = \"تلاوت‌های قرآنی (بی‌وقفه)\";\n\"about_tanzil_summary\" = \"بسیاری از ترجمه‌ها\";\n\"app_name\" = \"قرآن\";\n\"audio_manager\" = \"مدیریت فایل‌های صوتی\";\n\"audio_manager_delete_selection\" = \"حذف انتخاب\";\n\"audio_manager_download_all\" = \"دانلود همه\";\n\"audio_manager_download_selection\" = \"دانلود انتخاب\";\n\"audio_manager_remove_audio_msg\" = \"آیا مطمئن هستید که می خواهید %1$@ را حذف کنید؟\";\n\"audio_manager_remove_audio_title\" = \"حذف فایل صوتی؟\";\n\"audio_manager_remove_multiple_audio_msg\" = \"آیا مطمئن هستید که می خواهید را حذف کنید؟\";\n\"audio_manager_surah_delete\" = \"حذف سوره\";\n\"audio_manager_surah_download\" = \"دانلود سوره\";\n\"audio_updated_text\" = \"چندین فایل صوتی قرآن به روز شده است. قرآن برای اندروید کپی شما از این فایل ها را حذف کرده است به طوری که جدیدترین نسخه ها را می توانید دانلود کنید دفعه بعد که آنها را پخش می کنید.\";\n\"audio_updated_title\" = \"به روز رسانی فایل های صوتی قرآن\";\n\"available_translations\" = \"آماده بارگذاری\";\n\"ayah_copied_popup\" = \"آیه کپی شد\";\n\"bookmark_ayah\" = \"نشانک‌گذاری بر آیه\";\n\"bookmarks_list_empty\" = \"نشانکی وجود ندارد\";\n\"cancel\" = \"لغو\";\n\"canceling\" = \"در حال لغو\";\n\"copy_ayah\" = \"کپی کردن آیه\";\n\"delete_tag\" = \"حذف برچسب\";\n\"delete_translation\" = \"حذف ترجمه\";\n\"dialog_ok\" = \"تأیید\";\n\"download_cancel\" = \"لغو\";\n\"download_error_disk\" = \"فضای کافی برای بارگذاری وجود ندارد\";\n\"download_error_general\" = \"خطا در بارگذاری\";\n\"download_error_invalid_download\" = \"بارگذاری با خطا مواجه شد\";\n\"download_error_invalid_download_retry\" = \"فایل خراب است. دوباره بارگذاری نمایید\";\n\"download_error_network\" = \"خطای شبکه مانع بارگذاری است\";\n\"download_error_network_retry\" = \"خطای شبکه، تلاش مجدد…\";\n\"download_error_perms\" = \"خطا در دسترسی\";\n\"download_extra_data\" = \"برای عملکرد مناسب امکانات اشتراک‌گذاری و ترجمه باید یکی دو فایل را بارگذاری نمایید. موافق‌اید؟\";\n\"download_processing\" = \"در حال بارگذاری…\";\n\"download_progress\" = \"بارگذاری %1$@ / %2$@\";\n\"download_retry\" = \"تلاش دوباره\";\n\"download_successful\" = \"بارگذاری موفقیت‌آمیز بود\";\n\"download_sura_ayah_progress\" = \"بارگذاری سوره %1$d آیه %2$d\";\n\"download_sura_progress\" = \"بارگذاری %1$@ / %2$@ از سوره %3$d\";\n\"downloaded_translations\" = \"بارگذاری انجام گرفت\";\n\"downloadImportantPrompt\" = \"یک به‌روزرسانی کوچک اما مهم برای تصاویر قرآن وجود دارد. آیا مایل‌اید این وصله را بارگذاری نمایید؟\";\n\"downloading_message\" = \"لطفاً برای بارگذاری فایل‌ها صبر نمایید. (از ازسرگیری پشتیبانی می‌شود.(\";\n\"downloadPrompt\" = \"برای عملکرد بهینه بایستی تعدادی فایل از اینترنت دریافت گردد. این کار قدری طول خواهد کشید. آیا آمادگی این کار را دارید؟\";\n\"downloadPrompt_no\" = \"خیر\";\n\"downloadPrompt_ok\" = \"بلی\";\n\"downloadPrompt_title\" = \"فایل‌های موردنیاز بارگذاری شود؟\";\n\"downloadTabletPrompt\" = \"ما به تازگی اضافه شده تصاویر بهبود یافته برای قرص. آیا می خواهید این تصاویر را اکنون دانلود کنید؟\";\n\"edit_tag\" = \"تغییر برچسب\";\n\"email_us\" = \"اگر پاسخ پرسشتان در بالا یافت نشد، می‌توانید برای پشتیبانی با رایانامه quranandroid@gmail.com تماس بگیرید. توجه داشته باشید که حجم نامه‌های دریافتی بالاست و شاید پاسخ به نامه شما اندکی طول بکشد.\";\n\"error_getting_translation_list\" = \"خطا در بارگذاری فهرست ترجمه‌ها. لطفاً بعداً دوباره تلاش نمایید.\";\n\"export_data_error\" = \"خطا در برون‌بُرد داده‌ها\";\n\"exported_data\" = \"بُرون‌برد به %1$@ انجام گرفت.\";\n\"extracting_title\" = \"در حال پردازش…\";\n\"found_in_sura\" = \"در آیه %3$d از سوره (%1$d) %2$@ (صفحه %4$d)\";\n\"from\" = \"از\";\n\"get_arabic_search_db\" = \"متن عربی قرآن را برای جستجو در متن دریافت کنید.\";\n\"get_translations\" = \"دریافت ترجمه‌ها\";\n\"gotoPage\" = \"رفتن به صفحه\";\n\"help\" = \"\\\n<b>چگونه فایل‌های صوتی را پخش کنم؟</b>\\\n<br/>برای فعال کردن صوت در این برنامه کافی است بر صفحه مورد نظر ضربه زده تا دکمه‌های پخش صدا را مشاهده نمایید.\\\n<br/>\\\n<br/><b>چگونه ترجمه را مشاهده نمایم؟</b>\\\n<br/>کافی است بر صفحه مورد نظر ضربه زده و سپس علامت جهان یا در برخی دستگاه‌ها علامت سه‌نقطه را بفشارید.\\\n<br/>اگر در دستگاه خود هیچ ترجمه‌ای نداشته باشید، باید به قسمت تنظیمات رفته و ترجمه‌هایی را بارگذاری نمایید.\\\n<br/>\\\n<br/><b>چگونه یک صفحه را نشانک‌گذاری کنم؟</b>\\\n<br/>صفحه مورد نظر خود را انتخاب نمایید، سپس بر صفحه ضربه زده و روبان بالای صحفه را لمس نمایید.\\\n<br/>\\\n<br/><b>چگونه اندازه قلم را بزرگتر کنم؟</b>\\\n<br/>برای متن عربی قرآن دستگاه خود را در حالت افقی نگه دارید و برای اندازه متن ترجمه به قسمت تنظیمات مراجعه نمایید.\\\n<br/>\\\n<br/><b>چگونه یک آیه را به اشتراک بگذارم؟</b>\\\n<br/>کافی است آیه مورد نظر خود را برای مدت زمان کوتاهی لمس نمایید تا دکمه اشتراک‌گذاری نمایان شود.\\\n<br/>\\\n<br/><b>در دیدن متن ترجمه مشکل دارم.</b>\\\n<br/>متأسفانه برخی قلم‌ها در آندرویدهای قدیمی‌تر از نسخه ۴ پیش‌بینی نشده است.\\\n\";\n\"help_title\" = \"پرسش و پاسخ‌های متداول\";\n\"highlighting_database\" = \"فایل‌های موردنیاز\";\n\"import_data\" = \"درون‌بُرد داده‌ها\";\n\"import_data_and_override\" = \"عملیات درون‌بُرد نشانک‌های فعلی را با %1$d نشانک و %2$d برچسب جایگزین می‌نماید. موافق‌اید؟\";\n\"import_data_error\" = \"درون‌برد با خطا مواجه شد.  داده‌ها معتبر نیست.\";\n\"import_data_permissions_error\" = \"هنگام عملیات درون‌برد خطای دسترسی رخ داد.\";\n\"import_successful\" = \"درون‌بُرد موفقیت‌آمیز\";\n\"juz2_description\" = \"جزء %1$@\";\n\"kitkat_external_message\" = \"با توجه به محدودیت های اندروید، اگر انتخاب کنید که داده های قرآن را روی کارت SD خارجی خود قرار داده و بعداً داده های قرآن اندروید را حذف یا روشن کنید، تمام صفحات قرآن اندروید و صوتی حذف می شوند و شما مجبور خواهید بود دوباره آنها را دانلود کنید. آیا مطمئن هستید که می خواهید از کارت SD خارجی استفاده کنید؟\";\n\"loading\" = \"بارگذاری…\";\n\"madani\" = \"مدنی\";\n\"makki\" = \"مکی\";\n\"menu_about\" = \"درباره ما\";\n\"menu_back_to_page\" = \"مشاهده قرآن\";\n\"menu_bookmarks\" = \"نشانک‌ها\";\n\"menu_bookmarks_ayah\" = \"نشانک‌های آیه\";\n\"menu_bookmarks_page\" = \"نشانک‌های صفحه\";\n\"menu_get_translations\" = \"دریافت ترجمه‌ها\";\n\"menu_help\" = \"راهنما\";\n\"menu_jump\" = \"پرش\";\n\"menu_jump_last_page\" = \"آخرین صفحه\";\n\"menu_other_apps\" = \"برنامه‌های دیگر\";\n\"menu_search\" = \"جستجو\";\n\"menu_settings\" = \"تنظیمات\";\n\"menu_show_date\" = \"تاریخ نمایش\";\n\"menu_sort\" = \"مرتب‌سازی\";\n\"menu_sort_date\" = \"تاریخ اضافه شدن\";\n\"menu_sort_group_by_tags\" = \"گروه‌بندی برچسب‌ها\";\n\"menu_sort_location\" = \"محل در قرآن\";\n\"menu_translation\" = \"مشاهده ترجمه\";\n\"more_translations\" = \"ترجمه‌های دیگر\";\n\"move_down\" = \"حرکت به پایین\";\n\"move_up\" = \"حرکت به بالا\";\n\"need_translation\" = \"تفسیر یا ترجمه‌ای بارگذاری نشده‌ است.\";\n\"new_tag\" = \"برچسب جدید\";\n\"next\" = \"بعدی\";\n\"no_arabic_search_available\" = \"متن عربی قرآن هنوز بارگذاری نشده است. لطفاً ابتدا آن را دریافت نمایید.\";\n\"no_results\" = \"جستجوی «%@» هیچ نتیجه‌ای دربرنداشت.\";\n\"not_tagged\" = \"بدون برچسب\";\n\"notification_channel_audio\" = \"قرائت قرآن\";\n\"notification_channel_download\" = \"دانلود فایل های قرآن\";\n\"notification_download_canceled\" = \"بارگذاری لغو شد\";\n\"page_description\" = \"صفحه %1$@، جزء %2$@\";\n\"pause\" = \"مکث\";\n\"play\" = \"پخش\";\n\"play_apply\" = \"اِعمال\";\n\"play_apply_and_play\" = \"اِعمال و پخش\";\n\"play_each_verse\" = \"پخش هر آیه:\";\n\"play_from_here\" = \"شروع پخش از این آیه\";\n\"play_restrict_range\" = \"تنها این آیات را پخش کن\";\n\"play_verses_range\" = \"پخش مجموعه آیات:\";\n\"playback_prompt_title\" = \"شروع از:\";\n\"playback_speed\" = \"سرعت پخش:\";\n\"please_grant_permissions\" = \"لطفاً اجازه در تنظیمات برنامه را اعطا کنید\";\n\"please_wait\" = \"لطفاً منتظر بمانید...\";\n\"prefs_app_location_summary\" = \"حافظه‌ای که تمایل دارید فایل‌ها روی آن ذخیره شود را انتخاب نمایید\";\n\"prefs_app_location_title\" = \"پوشه داده‌های قرآن\";\n\"prefs_app_size\" = \"حجم کنونی داده‌ها\";\n\"prefs_audio_manager_summary\" = \"بارگذاری و مدیریت فایل‌های صوتی\";\n\"prefs_ayah_before_translation_summary\" = \"نمایش متن عربی آیه پیش از ترجمه\";\n\"prefs_ayah_before_translation_title\" = \"آیه پیش از ترجمه\";\n\"prefs_calculating_app_size\" = \"محاسبه حجم برنامه\";\n\"prefs_category_advanced\" = \"گزینه‌های پیشرفته\";\n\"prefs_category_advanced_summary\" = \"درون‌برد و برون‌برد نشانک‌ها و برچسب‌ها، تعیین پوشه داده‌های قرآن و …\";\n\"prefs_category_display_settings\" = \"تنظیمات نمایش\";\n\"prefs_category_download\" = \"بارگذاری تنظیمات\";\n\"prefs_category_dual_screen\" = \"ترجیحات برای دو صفحه مجاور\";\n\"prefs_category_reading\" = \"تنظیمات خواندن\";\n\"prefs_category_translation\" = \"تنظیمات ترجمه\";\n\"prefs_copying_app_files\" = \"در حال کپی نمودن فایل‌های برنامه\";\n\"prefs_display_marker_summary\" = \"فعال‌سازی پیغام‌های رسیدن به جزء، حزب و …\";\n\"prefs_display_marker_title\" = \"نمایش پیغام‌ها\";\n\"prefs_download_amount_summary\" = \"میزان پیشنهادی برای بارگذاری فایل‌های صوتی\";\n\"prefs_download_amount_title\" = \"حجم بارگذاری\";\n\"prefs_dual_page_mode_disabled\" = \"تنها یک صفحه در حالت افقی\";\n\"prefs_dual_page_mode_enabled\" = \"نمایش دو صحفه در حالت افقی\";\n\"prefs_dual_page_mode_title\" = \"حالت مخصوص رایانه دستی\";\n\"prefs_err_moving_app_files\" = \"خطا در جابجایی فایل‌های برنامه\";\n\"prefs_export_summary\" = \"برون‌بُرد نشانک‌ها و برچسب‌ها\";\n\"prefs_export_title\" = \"برون‌بُرد\";\n\"prefs_highlight_bookmarks_summary\" = \"برجسته‌سازی آیه‌های نشانکدار\";\n\"prefs_highlight_bookmarks_title\" = \"برجسته‌سازی نشانک‌ها\";\n\"prefs_import_summary\" = \"درون‌برد نشانک‌ها و برچسب‌ها\";\n\"prefs_import_title\" = \"درون‌برد\";\n\"prefs_new_background_title\" = \"پس‌زمینه جدید\";\n\"prefs_night_mode_background_brightness_summary\" = \"روشنایی صفحه زمانی که حالت شب فعال است\";\n\"prefs_night_mode_background_brightness_title\" = \"درخشش پس زمینه\";\n\"prefs_night_mode_summary\" = \"استفاده از پس‌زمینه تاریک و نوشته‌های روشن\";\n\"prefs_night_mode_text_brightness_summary\" = \"میزان روشنایی متن در حالت شبانه\";\n\"prefs_night_mode_text_brightness_title\" = \"روشنایی متن\";\n\"prefs_night_mode_title\" = \"نمایش شبانه\";\n\"prefs_no_enough_space_to_move_files\" = \"فضای کافی برای جابجایی فایل‌های برنامه وجود ندارد\";\n\"prefs_overlay_page_info_summary\" = \"نمایش شماره صفحه، نام سوره و شماره جزء هنگام خواندن\";\n\"prefs_overlay_page_info_title\" = \"نمایش اطلاعات صفحه\";\n\"prefs_page_type_summary\" = \"نوع صفحات خواندن را انتخاب کنید\";\n\"prefs_page_type_title\" = \"نوع صفحه (تجربی)\";\n\"prefs_preview\" = \"پیشنمایش\";\n\"prefs_sdcard_external\" = \"حافظه خارجی %1d\";\n\"prefs_sdcard_internal\" = \"حافظه داخلی\";\n\"prefs_send_logs_summary\" = \"ارسال سیاهههای مربوط به اشکال زدایی به توسعه دهنده\";\n\"prefs_send_logs_title\" = \"ارسال سیاهههای مربوط\";\n\"prefs_split_page_and_translation_summary\" = \"هنگامی که دو صفحه مجاور فعال می شوند، صفحه قرآن و ترجمه با هم نمایش داده می شوند\";\n\"prefs_split_page_and_translation_title\" = \"مشاهده یک صفحه از قرآن و دیگری از ترجمه\";\n\"prefs_streaming_summary\" = \"پخش جویباری صوت از اینترنت\";\n\"prefs_streaming_title\" = \"پخش اینترنتی\";\n\"prefs_sura_translated_name_summary\" = \"نمایش ترجمه نام سور\";\n\"prefs_sura_translated_name_title\" = \"نام ترجمه شده سوره\";\n\"prefs_translation_text_title\" = \"اندازه قلم ترجمه\";\n\"prefs_translations\" = \"ترجمه‌ها\";\n\"prefs_translations_summary\" = \"بارگذاری و مدیریت ترجمه‌ها\";\n\"prefs_use_arabic_summary_on\" = \"تغییر زبان برنامه به عربی\";\n\"prefs_use_arabic_title\" = \"حالت عربی (الوضع العربي)\";\n\"prefs_use_dyslexic_font_summary\" = \"Display translations in dyslexia friendly font\";\n\"prefs_use_dyslexic_font_title\" = \"Dyslexia friendly font\";\n\"prefs_volume_key_navigation_summary\" = \"استفاده از دکمه‌های صدا برای ورق زدن\";\n\"prefs_volume_key_navigation_title\" = \"ورق زدن با دکمه‌های صدا\";\n\"previous\" = \"قبلی\";\n\"process_progress\" = \"در حال پردازش %1$d / %2$d\";\n\"qarilist_dismiss\" = \"اخراج\";\n\"qarilist_gapless\" = \"مداوم\";\n\"qarilist_gapped\" = \"غیر پیوسته\";\n\"qarilist_qaris_with_downloads\" = \"قاری با دانلود\";\n\"qarilist_ready_to_play\" = \"آماده برای گوش دادن\";\n\"qarilist_select_qari\" = \"یک قاری را انتخاب کنید\";\n\"qarilist_selected\" = \"انتخاب\";\n\"quran_ayah\" = \"آیه %1$d\";\n\"quran_ayah_details\" = \"%1$@ - آیه %2$@، جزء %3$@\";\n\"quran_hizb\" = \"حزب\";\n\"quran_juz2\" = \"جزء\";\n\"quran_nos\" = \"نصف\";\n\"quran_page\" = \"صفحه\";\n\"quran_rob3\" = \"ربع\";\n\"quran_sura\" = \"سوره\";\n\"quran_sura_title\" = \"سوره %1$@\";\n\"quran_talt_arb3\" = \"سه‌ربع\";\n\"quranSearchType\" = \"آیات قرآن\";\n\"recent_pages\" = \"آخرین صفحات\";\n\"recite_from_here\" = \"از اینجا بخوان\";\n\"remove_button\" = \"حذف\";\n\"remove_dlg_msg\" = \"آیا مطمئن‌اید که می‌خواهید %1$@ را حذف کنید؟\";\n\"remove_dlg_title\" = \"حذف ترجمه\";\n\"repeatValues[0]\" = \"یک بار\";\n\"repeatValues[1]\" = \"دو بار\";\n\"repeatValues[2]\" = \"سه بار\";\n\"repeatValues[3]\" = \"بی‌پایان\";\n\"scoped_storage_message\" = \"با توجه به تغییرات آندروید برای افزایش حریم خصوصی کاربر، کپی کردن فایل های خارج از مدیران برنامه ممکن است قرآن برای اندروید را از دسترسی به داده های خود در نسخه های آینده اندروید باز دارد. مطمئني ميخواي از اين مسير استفاده کني؟\";\n\"sdcard_error\" = \"کارت حافظه یافت نشد. آن را دوباره در دستگاه قرار داده و بار دیگر امتحان نمایید.\";\n\"search_data\" = \"جستجو\";\n\"search_entire_mushaf\" = \"به کل قرآن نگاه کن.\";\n\"search_full_results\" = \"نتایج کامل\";\n\"search_hint\" = \"جستجو در قرآن\";\n\"search_key\" = \"دکمه جستجو را بفشارید\";\n\"see_tafseer_of_verse\" = \"تفسیر آیه متعلق به آیه %d است (برای مشاهده کلیک کنید).\";\n\"share_ayah\" = \"اشتراک‌گذاری آیه\";\n\"share_ayah_text\" = \"اشتراک‌گذاری متن آیه\";\n\"starting_page_label\" = \"آغاز صفحه\";\n\"stop\" = \"توقف\";\n\"storage_permission_please_restart\" = \"برنامه را از نو آغاز کنید تا تغییرات اثر کند.\";\n\"storage_permission_rationale\" = \"برنامه قرآن برای ذخیره داده‌ها در حافظه خارجی\\\nبه اجازه شما نیاز دارد.  بدون این اجازه برنامه کار می‌کند؛ اما در صورتی که داده‌ها یا برنامه\\\nرا پاک نمایید، تمام صفحات، فایل‌های صوتی و دیگر داده‌های بارگذاری‌شده از بین خواهد رفت.\\\nآیا اجازه ذخیره داده‌ها در حافظه خارجی را صادر می‌کنید؟\";\n\"sura_ayah_notification_str\" = \"سوره %1$@، آیه %2$d\";\n\"sura_ayah_sharing_str\" = \"سوره %1$@: %2$d\";\n\"tag_ayah\" = \"برچسب‌گذاری بر آیه\";\n\"tag_blank_tag_error\" = \"نام برچسب نمی تواند خالی باشد!\";\n\"tag_bookmark\" = \"تعیین برچسب برای نشانک\";\n\"tag_dlg_title\" = \"برچسب\";\n\"tag_duplicate_tag_error\" = \"نام برچسب در حال حاضر وجود دارد!\";\n\"tag_name\" = \"نام\";\n\"timing_database\" = \"فایل‌های موردنیاز\";\n\"to\" = \"تا\";\n\"translation_ayah\" = \"ترجمه آیه\";\n\"translation_dialog_later\" = \"بعداً\";\n\"translation_dialog_yes\" = \"بلی\";\n\"translation_updates_available\" = \"برای برخی از ترجمه‌ها به‌روزرسانی موجود است. مایل‌اید به صفحه ترجمه‌ها بروید؟\";\n\"undo\" = \"واگرد\";\n\"update_available\" = \"به‌روزرسانی موجود است\";\n\"warning\" = \"هشدار\";\n"
  },
  {
    "path": "Core/Localization/Resources/fa.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>audio_manager_files_downloaded</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_files_downloaded@</string>\n            <key>audio_manager_files_downloaded</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>%1$d سوره بارگذاری شده است</string>\n                <key>other</key>\n                <string>%1$d سوره بارگذاری شده است</string>\n            </dict>\n        </dict>\n        <key>bookmark_tag_deleted</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@bookmark_tag_deleted@</string>\n            <key>bookmark_tag_deleted</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>%d برچسب حذف شد</string>\n                <key>other</key>\n                <string>%d برچسب حذف شد</string>\n            </dict>\n        </dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>%2$d نتیجه از جستجوی «%1$d» به دست آمد:</string>\n                <key>other</key>\n                <string>%2$d نتیجه از جستجوی «%1$d» به دست آمد:</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>%d آیه</string>\n                <key>other</key>\n                <string>%d آیه</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/fa.lproj/Localizable.strings",
    "content": "\n\n// MARK: - General\n\n// Metadata: Translated by ChatGPT; human review required.\n\"button.done\" = \"انجام شد\";\n// Metadata: Translated by ChatGPT; human review required.\n\"button.delete\" = \"حذف\";\n\n// MARK: - Errors\n\n// Metadata: Translated by ChatGPT; human review required.\n\"error.dialog.title\" = \"خطا\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.connection_lost\" = \"ارتباط اینترنت قطع شده است. به مکانی بروید که ارتباط پایدارتری در دسترس باشد یا منتظر بمانید تا ارتباط پایدار شود.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.international_roaming_off\" = \"رمینگ بین‌المللی مجاز نیست. تنظیمات رمینگ بین‌المللی را تغییر دهید یا وای‌فای را روشن کنید.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.not_connected_to_internet\" = \"به اینترنت متصل نیست. وای‌فای را روشن کنید یا اجازه اتصال داده سلولی را بدهید.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.general\" = \"اوه! اشتباهی رخ داد. لطفا دوباره امتحان کنید.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.no_disk_space\" = \"فضای خالی دیسک برای ذخیره‌سازی دانلودها وجود ندارد.\";\n\n// MARK: - Quran\n\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah\" = \"آیه\";\n// Metadata: Translated by ChatGPT; human review required.\n\"surah\" = \"سوره\";\n// Metadata: Translated by AI; human review required.\n\"quran_alquran\" = \"قرآن\";\n\n// MARK: - Translation\n\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.translation\" = \"ترجمه\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.transliteration\" = \"ترجمه لفظی\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.selectedTranslations\" = \"انتخاب شده\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.translator\" = \"مترجم: \";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.see-referenced-verse\" = \"آیه %d را ببینید.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.read-more\" = \"بیشتر بخوانید\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-retrieval\" = \"اوه! مشکلی پیش آمد. نتوانستیم ترجمه را بازیابی کنیم.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-not-available\" = \"ترجمه‌ای برای این آیه موجود نیست.\";\n\n// MARK: - Search\n\n// Metadata: Translated by ChatGPT; human review required.\n\"search.recents.title\" = \"جستجوهای اخیر\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.popular.title\" = \"امتحان کردن جستجو با\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.placeholder.text\" = \"سوره، آیه، ترجمه، تفسیر و اعداد\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.result.count\" = \"(%2$d) %1$@\";\n\n// MARK: - Settings\n\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.write_review\" = \"نوشتن نظر در فروشگاه برنامه...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.contact_us\" = \"تماس با ما\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.donate\" = \"کمک مالی\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.share_app\" = \"اشتراک‌گذاری برنامه...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.app_version\" = \"نسخه برنامه\";\n\n// MARK: - Quran Menu\n\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabic\" = \"عربی\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translation\" = \"ترجمه/تفسیر\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.select_translation\" = \"انتخاب ترجمه‌ها/تفسیرها\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer\" = \"نشانگر ترجمه کلمه\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer.select_translation\" = \"نمایش نشانگر\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.fontSizeLetter\" = \"A\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translationFontSize\" = \"اندازه ترجمه\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabicFontSize\" = \"اندازه قرآن\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.twoPages\" = \"2 صفحه کنار هم (در حالت افقی)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.verticalScrolling\" = \"اسکرول عمودی\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.theme_settings\" = \"پوسته‌ها و تنظیمات\";\n\n// MARK: - Theme\n\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.light\" = \"روشن\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.dark\" = \"تاریک\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto\" = \"خودکار\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto.message\" = \"برنامه قرآن به تنظیمات ظاهری آیفون شما احترام می‌گذارد\";\n\n// MARK: - Tabs\n\n// Metadata: Translated by ChatGPT; human review required.\n\"tab.notes\" = \"یادداشت‌ها\";\n\n// MARK: - Update\n\n// Metadata: Translated by ChatGPT; human review required.\n\"update.filesystem.title\" = \"به‌روزرسانی پایگاه‌های داده...\";\n\"downloading_title\" = \"بارگذاری…\";\n\n// MARK: - Reciters\n\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.title\" = \"قاری را برای شنیدن انتخاب کنید\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.recent\" = \"اخیر\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.downloaded\" = \"دانلود شده\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.all\" = \"همه\";\n\n// MARK: - Audio\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.action.modify\" = \"تغییر دهید\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.message\" = \"پخش صوتی از %@ تا %@\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.downloading.message\" = \"در حال دانلود صوتی از %@ تا %@\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing-verses.label\" = \"پخش آیات\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.adjust-end-verse-to-the-end.label\" = \"آخرین آیه را به انتها تنظیم کنید\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-start-verse\" = \"آیه شروع را انتخاب کنید\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-end-verse\" = \"آیه پایانی را انتخاب کنید\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount\" = \"دانلود/پخش تا\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount.description\" = \"هنگام پخش صوت، تا انتهای\";\n\n// MARK: - Bookmarks\n\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.title\" = \"در حال افزودن نشانک‌ها...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.text\" = \"هنگام خواندن قرآن، برای علامت‌گذاری صفحه فعلی دکمه نشانک را فشار دهید.\";\n\n// MARK: - Notes\n\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.title\" = \"در حال افزودن برجسته‌های آیه...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.text\" = \"روی یک آیه فشار داده و نگه دارید. می‌توانید انتخاب را گسترش دهید تا چندین آیه را شامل شود، سپس دکمه نشانک را بزنید.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.verses-count\" = \"(+%d آیه)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.title\" = \"حذف برجسته\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.body\" = \"یادداشت مرتبط نیز حذف خواهد شد.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.title\" = \"همگام‌سازی iCloud\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.body\" = \"این برنامه از iCloud برای همگام سازی نشانک ها و یادداشت ها در دستگاه های شما استفاده می کند. شما می توانید آن را از تنظیمات iCloud دستگاه خود غیرفعال کنید.\";\n\n// MARK: - Ayah Menu\n\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.copy\" = \"کپی\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.share\" = \"اشتراک گذاری...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-juz\" = \"تا پایان جز'\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-surah\" = \"تا پایان سوره\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-page\" = \"تا پایان صفحه\";\n// Metadata: Translated by AI; human review required.\n\"ayah.menu.play-end-quran\" = \"تا پایان قرآن\";\n\"ayah.menu.repeat\" = \"تکرار\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verse\" = \"آیه انتخاب شده\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verses\" = \"آیات انتخاب شده\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight\" = \"برجسته کردن\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight-select-color\" = \"انتخاب رنگ\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.add-note\" = \"افزودن یادداشت\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.edit-note\" = \"ویرایش یادداشت\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-note\" = \"حذف یادداشت\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-highlight\" = \"حذف برجسته سازی\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.short\" = \"انتخاب کنید\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.long\" = \"تنظیم به عنوان مشاف فعلی\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.title\" = \"انتخاب مشاف\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selection-description\" = \"برای اطلاعات بیشتر روی مشاف ضربه بزنید.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.hafs\" = \"مشاف حفص\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.pages.604\" = \"604 صفحه\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.lines.15\" = \"صفحه 15 خطی\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.supported\" = \"ترجمه کلمه به کلمه\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.not-supported\" = \"بدون ترجمه کلمه به کلمه\";\n\n// Hafs 1405\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.title\" = \"حفص، مدینه کلاسیک، 1405 هجری قمری\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.description\" = \"مشاف حفص کلاسیک که در سال 1405 هجری قمری در مدینه صادر شده است. این برنامه برای مدت طولانی این نسخه را ارائه می‌داد.\\nاز مجمع چاپ قرآن پادشاه فهد.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.issue\" = \"صادر شده در سال 1405 هجری قمری\";\n\n// Hafs 1421\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.title\" = \"حفص، مدینه، 1421 هجری قمری\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.description\" = \"مشاف حفص که در سال 1421 هجری قمری در مدینه صادر شده است. از مجمع چاپ قرآن پادشاه فهد.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.issue\" = \"صادر شده در سال 1421 هجری قمری\";\n\n// Hafs 1440\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.title\" = \"حفص، مدینه، 1440 هجری قمری\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.description\" = \"مشاف حفص که در سال 1440 هجری قمری در مدینه صادر شده است. از مجمع چاپ قرآن پادشاه فهد.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.issue\" = \"صادر شده در سال 1440 هجری قمری\";\n\n// Hafs Tajweed\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.title\" = \"حفص، تجوید\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.description\" = \"مشاف حفص تجوید. القرآن الکریم - نسخه دار المعرفه.\";\n\n// MARK: - Diagnostics\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.title\" = \"تشخیصات\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.details\" = \"این تنظیمات توسط توسعه‌دهنده برنامه به طور خاص برای اهداف اشکال‌زدایی و تشخیصی استفاده می‌شوند.\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.share_app_logs\" = \"اشتراک گذاری گزارش‌های برنامه\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs\" = \"فعال‌سازی ثبت خطاها\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs.details\" = \"این تنظیم در راه‌اندازی مجدد بعدی برنامه اعمال خواهد شد.\";\n\n\n// MARK: - What's new\n\n// Metadata: Translated by ChatGPT; human review required.\n\"new.title\" = \"چه خبر جدیدی است\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.action\" = \"ادامه\";\n\n// Mushafs\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs\" = \"مشاف جدید:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs.details\" = \"خداوند ظلم برادران و خواهران ما در غزه را برطرف کند.\\n\\n* مشاف حفص تجوید: القرآن الکریم - نسخه دار المعرفه.\\n* مشاف مدینه 1421 هجری.\\n* مشاف مدینه 1440 هجری.\\n* علاوه بر این، از نسخه کلاسیک 1405 هجری لذت ببرید.\";\n\n// Reciters\n// Metadata: Translated by ChatGPT; human review required.\n\"new.reciters\" = \"قاریان جدید:\";\n\n// Miscellaneous\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous\" = \"متفرقه:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous.details\" = \"* به‌روزرسانی ظاهر برنامه.\\n* بهبود ویژگی جستجو (الگوریتم جدید به زودی).\\n* پشتیبانی از محلی‌سازی ویتنامی.\\n* دسترسی پیشرفته به گزینه‌های صوتی در دسترس هنگامی که قرائت در حال پخش نیست.\\n* برنامه اکنون متن باز است: https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades\" = \"صوتی:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades.details\" = \"* کنترل سرعت تلاوت قابل تنظیم: 0.5x، 0.75x، 1x، 1.25x، 1.5x - با تشکر از @adnan29979.\\n* پخش، سرعت دلخواه شما را به خاطر می‌سپارد - با تشکر از @adnan29979.\";\n\n// Personalization\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization\" = \"موضوعات مطالعه:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization.details\" = \"* پشتیبانی از چندین تم. یک صفحه از قرآن را باز کنید -> منوی بالا سمت راست -> تم‌ها و تنظیمات.\\n* اگر می‌خواهید به سبک قبلی برگردید از 'Original' استفاده کنید.\";\n\n// Library & Navigation\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation\" = \"کتابخانه و پیمایش:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation.details\" = \"* سوره‌ها و جزءها را در صفحه اصلی مرتب کنید و شماره سوره‌ها را نمایش دهید تا سریع‌تر به آنچه نیاز دارید برسید - با تشکر از @yismailuofa.\";\n"
  },
  {
    "path": "Core/Localization/Resources/fa.lproj/Readers.strings",
    "content": "\"qari_abdulaziz_zahrani_gapless\" = \"عبد العزيز بن صالح الزهراني\";\n\"qari_abdulbaset\" = \"عبدالباسط عبدالصمد (شکاف زده)\";\n\"qari_abdulbaset_gapless\" = \"عبدالباسط\";\n\"qari_abdulbaset_mujawwad\" = \"عبدالباسط عبدالصمد مجود (شکاف زده)\";\n\"qari_abdulbaset_mujawwad_gapless\" = \"عبدالباسط مجود\";\n\"qari_abdulhadi_kanakeri_gapless\" = \"عبدالهادی کناکری\";\n\"qari_abdullah_matroud_gapless\" = \"عبدالله المطرود\";\n\"qari_abdulmuhsin_qasim_gapless\" = \"عبد ال محسن القاسم\";\n\"qari_abdulrahman_alshahat_gapless\" = \"عبد الرحمن الشحات\";\n\"qari_abdurrashid_sufi_gapless\" = \"عبد الرشيد صوفي\";\n\"qari_afasy\" = \"مشاري بن راشد العفاسي (شکاف زده)\";\n\"qari_afasy_cali_gapless\" = \"مشاري العفاسي (كاليفورنيا)\";\n\"qari_afasy_gapless\" = \"مشاري بن راشد العفاسي\";\n\"qari_ahmad_nauina_gapless\" = \"أحمد نعينع\";\n\"qari_ahmed_al_nufais_gapless\" = \"احمد النفیس\";\n\"qari_ajamy_gapless\" = \"أحمد بن علي العجمي\";\n\"qari_akram_al_alaqmi\" = \"أكرم العلقمي\";\n\"qari_ali_hajjaj_alsouasi_gapless\" = \"علي حجاج السويسي\";\n\"qari_ali_jaber_gapless\" = \"علی جابر\";\n\"qari_alijon_qari_gapless\" = \"عليجون قاری\";\n\"qari_aloosi_gapless\" = \"عبدالرحمن العوسي\";\n\"qari_alzain_ahmad_gapless\" = \"الزين محمد احمد\";\n\"qari_ayman_suwaid_gapless\" = \"أيمن سويد\";\n\"qari_ayman_suwaid_gapped\" = \"أيمن سويد (شکاف زده)\";\n\"qari_ayyoub\" = \"محمد أيوب (شکاف زده)\";\n\"qari_ayyoub_gapless\" = \"محمد أيوب\";\n\"qari_aziz_alili_gapless\" = \"عزيز عليلي\";\n\"qari_badr_al_turki_gapless\" = \"بدر الترکی\";\n\"qari_bandar_baleela_gapless\" = \"بندر بليلة\";\n\"qari_basfar\" = \"عبدالله بصفر (شکاف زده)\";\n\"qari_basfar_gapless\" = \"عبدالله بصفر\";\n\"qari_dussary\" = \"ياسر الدوسري (شکاف زده)\";\n\"qari_fares_abbad_gapless\" = \"فارس عباد\";\n\"qari_farman_shawani_gapless\" = \"فەرمان شوانی\";\n\"qari_hady_toure_gapless\" = \"محمد الهادي توري\";\n\"qari_hani_rifai\" = \"هاني الرفاعي (شکاف زده)\";\n\"qari_hani_rifai_gapless\" = \"هاني الرفاعي\";\n\"qari_hudhayfi\" = \"الحذيفي (شکاف زده)\";\n\"qari_hudhayfi_gapless\" = \"الحذيفي\";\n\"qari_husary_gapless\" = \"الحصري\";\n\"qari_husary_iza3a_gapless\" = \"الحصري تسجيل الإذاعة\";\n\"qari_husary_muallim_gapless\" = \"الحصري (معلم، بی‌وقفه)\";\n\"qari_husary_mujawwad\" = \"الحصري مجود (شکاف زده)\";\n\"qari_husary_mujawwad_gapless\" = \"الحصري  (مجود، بی‌وقفه)\";\n\"qari_ibrahim_alakhdar_gapless\" = \"ابراهیم الاخضر\";\n\"qari_idrees_abkar_gapless\" = \"ادریس ابکر\";\n\"qari_jibreel\" = \"محمد جبريل (شکاف زده)\";\n\"qari_jibreel_gapless\" = \"محمد جبريل\";\n\"qari_juhany_gapless\" = \"عبدالله الجهني\";\n\"qari_khaled_muhanna_gapless\" = \"خالد المهنا\";\n\"qari_khalid_jalil_gapless\" = \"خالد الجليل\";\n\"qari_khalid_qahtani_gapless\" = \"خالد القحطانی\";\n\"qari_khalifa_taniji_gapless\" = \"خليفة الطنيجي\";\n\"qari_luhaidan_gapless\" = \"محمد اللحیدان\";\n\"qari_mahmoud_ali_albana_gapless\" = \"محمود علي البنا\";\n\"qari_minshawi_mujawwad\" = \"المنشاوي مجود (شکاف زده)\";\n\"qari_minshawi_mujawwad_gapless\" = \"المنشاوي مجود\";\n\"qari_minshawi_murattal_gapless\" = \"المنشاوي\";\n\"qari_mishari_walk_gapless\" = \"مشاري, إبراهيم والك (ترجمه انگلیسی)\";\n\"qari_mohammad_altablawi_gapless\" = \"محمد الطبلاوي\";\n\"qari_mokhtasar_asmari_gapless\" = \"عبدالله الأسمري (المختصر الصوتي، بی‌وقفه)\";\n\"qari_mostafa_ismaeel_gapless\" = \"مصطفي إسماعيل\";\n\"qari_muaiqly\" = \"ماهر المعيلقي (شکاف زده)\";\n\"qari_muaiqly_gapless\" = \"ماهر المعيقلي\";\n\"qari_muaiqly_haramain_gapless\" = \"ماهر المعيلقي (الحرمين، بی‌وقفه)\";\n\"qari_muhammad_rashad_shereef_gapless\" = \"محمد رشاد الشريف\";\n\"qari_nabil_rifa3i_gapless\" = \"نبيل الرفاعي\";\n\"qari_noreen_siddiq_gapless\" = \"نورين محمد صديق\";\n\"qari_peshawa_qadir_al_qurdi_gapless\" = \"پێشەوا قادر الکردی\";\n\"qari_qatami_gapless\" = \"ناصر القطامي\";\n\"qari_raad_al_kurdi_gapless\" = \"رعد الکردی\";\n\"qari_saad_al_ghamdi\" = \"سعد الغامدي (شکاف زده)\";\n\"qari_saad_al_ghamidi_gapless\" = \"سعد الغامدي\";\n\"qari_sahl_yaseen_gapless\" = \"سهل ياسين\";\n\"qari_salah_budair_gapless\" = \"صلاح بدير\";\n\"qari_salah_bukhatir_gapless\" = \"صلاح بوخاطر\";\n\"qari_shatri\" = \"أبوبكر الشاطري (شکاف زده)\";\n\"qari_shatri_gapless\" = \"أبوبكر الشاطري\";\n\"qari_shuraym\" = \"سعود الشريم (شکاف زده)\";\n\"qari_shuraym_gapless\" = \"سعود الشريم\";\n\"qari_suadis\" = \"عبدالرحمن السديس (شکاف زده)\";\n\"qari_sudais_gapless\" = \"عبدالرحمن السديس\";\n\"qari_tablawy\" = \"محمد الطبلاوي (شکاف زده)\";\n\"qari_tawfeeq_as_sawaigh_gapless\" = \"توفيق الصايغ\";\n\"qari_wadee3_alyamani_gapless\" = \"وديع اليمني\";\n\"qari_walk\" = \"إبراهيم والك (ترجمه انگلیسی)\";\n\"qari_walk_gapless\" = \"إبراهيم والك (ترجمه انگلیسی)\";\n\"qari_yasser_dussary_gapless\" = \"ياسر الدوسري\";\n\"qari_yasser_salama_hadr_gapless\" = \"یاسر سلامه (حدر، ی‌وقفه)\";\n"
  },
  {
    "path": "Core/Localization/Resources/fa.lproj/Suras.strings",
    "content": "\"sura_names[0]\" = \"الفاتحة\";\n\"sura_names[1]\" = \"البقرة\";\n\"sura_names[2]\" = \"آل عمران\";\n\"sura_names[3]\" = \"النساء\";\n\"sura_names[4]\" = \"المائدة\";\n\"sura_names[5]\" = \"اﻷنعام\";\n\"sura_names[6]\" = \"اﻷعراف\";\n\"sura_names[7]\" = \"اﻷنفال\";\n\"sura_names[8]\" = \"التوبة\";\n\"sura_names[9]\" = \"يونس\";\n\"sura_names[10]\" = \"هود\";\n\"sura_names[11]\" = \"يوسف\";\n\"sura_names[12]\" = \"الرعد\";\n\"sura_names[13]\" = \"إبراهيم\";\n\"sura_names[14]\" = \"الحجر\";\n\"sura_names[15]\" = \"النحل\";\n\"sura_names[16]\" = \"اﻹسراء\";\n\"sura_names[17]\" = \"الكهف\";\n\"sura_names[18]\" = \"مريم\";\n\"sura_names[19]\" = \"طه\";\n\"sura_names[20]\" = \"اﻷنبياء\";\n\"sura_names[21]\" = \"الحج\";\n\"sura_names[22]\" = \"المؤمنون\";\n\"sura_names[23]\" = \"النور\";\n\"sura_names[24]\" = \"الفرقان\";\n\"sura_names[25]\" = \"الشعراء\";\n\"sura_names[26]\" = \"النمل\";\n\"sura_names[27]\" = \"القصص\";\n\"sura_names[28]\" = \"العنكبوت\";\n\"sura_names[29]\" = \"الروم\";\n\"sura_names[30]\" = \"لقمان\";\n\"sura_names[31]\" = \"السجدة\";\n\"sura_names[32]\" = \"اﻷحزاب\";\n\"sura_names[33]\" = \"سبأ\";\n\"sura_names[34]\" = \"فاطر\";\n\"sura_names[35]\" = \"يس\";\n\"sura_names[36]\" = \"الصافات\";\n\"sura_names[37]\" = \"ص\";\n\"sura_names[38]\" = \"الزمر\";\n\"sura_names[39]\" = \"غافر\";\n\"sura_names[40]\" = \"فصلت\";\n\"sura_names[41]\" = \"الشورى\";\n\"sura_names[42]\" = \"الزخرف\";\n\"sura_names[43]\" = \"الدخان\";\n\"sura_names[44]\" = \"الجاثية\";\n\"sura_names[45]\" = \"اﻷحقاف\";\n\"sura_names[46]\" = \"محمد\";\n\"sura_names[47]\" = \"الفتح\";\n\"sura_names[48]\" = \"الحجرات\";\n\"sura_names[49]\" = \"ق\";\n\"sura_names[50]\" = \"الذاريات\";\n\"sura_names[51]\" = \"الطور\";\n\"sura_names[52]\" = \"النجم\";\n\"sura_names[53]\" = \"القمر\";\n\"sura_names[54]\" = \"الرحمن\";\n\"sura_names[55]\" = \"الواقعة\";\n\"sura_names[56]\" = \"الحديد\";\n\"sura_names[57]\" = \"المجادلة\";\n\"sura_names[58]\" = \"الحشر\";\n\"sura_names[59]\" = \"الممتحنة\";\n\"sura_names[60]\" = \"الصف\";\n\"sura_names[61]\" = \"الجمعة\";\n\"sura_names[62]\" = \"المنافقون\";\n\"sura_names[63]\" = \"التغابن\";\n\"sura_names[64]\" = \"الطلاق\";\n\"sura_names[65]\" = \"التحريم\";\n\"sura_names[66]\" = \"الملك\";\n\"sura_names[67]\" = \"القلم\";\n\"sura_names[68]\" = \"الحاقة\";\n\"sura_names[69]\" = \"المعارج\";\n\"sura_names[70]\" = \"نوح\";\n\"sura_names[71]\" = \"الجن\";\n\"sura_names[72]\" = \"المزمل\";\n\"sura_names[73]\" = \"المدثر\";\n\"sura_names[74]\" = \"القيامة\";\n\"sura_names[75]\" = \"اﻹنسان\";\n\"sura_names[76]\" = \"المرسلات\";\n\"sura_names[77]\" = \"النبأ\";\n\"sura_names[78]\" = \"النازعات\";\n\"sura_names[79]\" = \"عبس\";\n\"sura_names[80]\" = \"التكوير\";\n\"sura_names[81]\" = \"الانفطار\";\n\"sura_names[82]\" = \"المطففين\";\n\"sura_names[83]\" = \"الانشقاق\";\n\"sura_names[84]\" = \"البروج\";\n\"sura_names[85]\" = \"الطارق\";\n\"sura_names[86]\" = \"اﻷعلى\";\n\"sura_names[87]\" = \"الغاشية\";\n\"sura_names[88]\" = \"الفجر\";\n\"sura_names[89]\" = \"البلد\";\n\"sura_names[90]\" = \"الشمس\";\n\"sura_names[91]\" = \"الليل\";\n\"sura_names[92]\" = \"الضحى\";\n\"sura_names[93]\" = \"الشرح\";\n\"sura_names[94]\" = \"التين\";\n\"sura_names[95]\" = \"العلق\";\n\"sura_names[96]\" = \"القدر\";\n\"sura_names[97]\" = \"البينة\";\n\"sura_names[98]\" = \"الزلزلة\";\n\"sura_names[99]\" = \"العاديات\";\n\"sura_names[100]\" = \"القارعة\";\n\"sura_names[101]\" = \"التكاثر\";\n\"sura_names[102]\" = \"العصر\";\n\"sura_names[103]\" = \"الهمزة\";\n\"sura_names[104]\" = \"الفيل\";\n\"sura_names[105]\" = \"قريش\";\n\"sura_names[106]\" = \"الماعون\";\n\"sura_names[107]\" = \"الكوثر\";\n\"sura_names[108]\" = \"الكافرون\";\n\"sura_names[109]\" = \"النصر\";\n\"sura_names[110]\" = \"المسد\";\n\"sura_names[111]\" = \"اﻹخلاص\";\n\"sura_names[112]\" = \"الفلق\";\n\"sura_names[113]\" = \"الناس\";\n"
  },
  {
    "path": "Core/Localization/Resources/fr.lproj/Android.strings",
    "content": "\"about_contributors\" = \"Contributeurs\";\n\"about_contributors_summary\" = \"Une liste des personnes ayant contribué au développement de Quran pour Android\";\n\"about_data_sources\" = \"Sources de données\";\n\"about_description\" = \"Quran pour Android est une application Quran gratuite. S\\'il vous plaît, n\\'oubliez pas les contributeurs dans vos prières.\";\n\"about_furqan_summary\" = \"Police de caractères Ottoman et explication en arabe\";\n\"about_images\" = \"Images\";\n\"about_madani_images\" = \"Les images du Quran sont basées sur les polices d\\'écriture du complexe Roi Fahd pour l\\'impression du Saint Coran\";\n\"about_naskh_images\" = \"Les images du Quran pour l\\'application Naskh sont issues (avec leur permission) de SHL Info Systems\";\n\"about_noorhidayat_summary\" = \"Police Noorehira et traduction de Mufti Taqi\";\n\"about_open_source\" = \"Projets Open Source\";\n\"about_others\" = \"Autres\";\n\"about_qaloon_images\" = \"Les images Qaloon sont utilisées avec la permission de Nous-Mêmes Editions Et Diffusion (Tunisie)\";\n\"about_quran_enc\" = \"Encyclopédie du Noble Coran (QuranEnc.com)\";\n\"about_quran_enc_summary\" = \"Traductions dans de nombreuses langues\";\n\"about_quran_ksu\" = \"Projet Electronic Moshaf\";\n\"about_quran_ksu_summary\" = \"Le projet King Saud University Electronic Moshaf était la source du Tafsir en langue arabe et des traductions pour de nombreuses langues\";\n\"about_quranicaudio_summary\" = \"Récitations mp3 du Quran non espacées\";\n\"about_tanzil_summary\" = \"Traductions pour de nombreuses langues\";\n\"app_name\" = \"Coran\";\n\"audio_manager\" = \"Gestionnaire audio\";\n\"audio_manager_delete_selection\" = \"Supprimer la sélection\";\n\"audio_manager_download_all\" = \"Tout télécharger\";\n\"audio_manager_download_selection\" = \"Télécharger la sélection\";\n\"audio_manager_remove_audio_msg\" = \"Êtes-vous sûr de vouloir supprimer %1$@?\";\n\"audio_manager_remove_audio_title\" = \"Enlever la sourate ?\";\n\"audio_manager_remove_multiple_audio_msg\" = \"Êtes-vous sûr de vouloir supprimer?\";\n\"audio_manager_surah_delete\" = \"Supprimer la sourate\";\n\"audio_manager_surah_download\" = \"Télécharger la sourate\";\n\"audio_updated_text\" = \"Des fichiers audio du Coran ont été mis à jour. Nous avons supprimé la copie local de ces fichiers afin de télécharger la nouvelle version la prochaine fois que vous les écouterez.\";\n\"audio_updated_title\" = \"Mise à jour des fichiers audio du Coran\";\n\"available_translations\" = \"Disponible en téléchargement\";\n\"ayah_copied_popup\" = \"Aya copiée\";\n\"bookmark_ayah\" = \"Ajouter l\\'Aya aux favoris\";\n\"bookmarks_list_empty\" = \"Aucun favori\";\n\"cancel\" = \"Annuler\";\n\"canceling\" = \"Annulation…\";\n\"copy_ayah\" = \"Copier l\\'Aya\";\n\"delete_tag\" = \"Supprimez l\\'étiquette\";\n\"delete_translation\" = \"Enlever la traduction\";\n\"dialog_ok\" = \"Ok\";\n\"download_amount_in_megabytes\" = \"%@ Mo\";\n\"download_cancel\" = \"Annuler\";\n\"download_error_disk\" = \"Pas assez d\\'espace disque pour télécharger\";\n\"download_error_general\" = \"Echec du téléchargement\";\n\"download_error_invalid_download\" = \"Le fichier téléchargé a été corrompu\";\n\"download_error_invalid_download_retry\" = \"Fichier corrompu, nouvelle tentative de téléchargement\";\n\"download_error_network\" = \"Impossible de télécharger en raison d\\'une erreur réseau\";\n\"download_error_network_retry\" = \"Erreur réseau, tentative de reprise…\";\n\"download_error_perms\" = \"Impossible de télécharger en raison d\\'une erreur d\\'autorisation\";\n\"download_extra_data\" = \"Nous avons besoin de télécharger un ou deux petits fichiers pour le support du partage et de la traduction.  Télécharger maintenant ?\";\n\"download_processing\" = \"Traitement du téléchargement…\";\n\"download_progress\" = \"Téléchargé %1$@ / %2$@\";\n\"download_retry\" = \"Réessayer\";\n\"download_successful\" = \"Téléchargement réussi\";\n\"download_sura_ayah_progress\" = \"Téléchargement de l\\'Aya %2$d de la sourate %1$d\";\n\"download_sura_progress\" = \"Téléchargé %1$@ / %2$@ de la sourate %3$d\";\n\"downloaded_translations\" = \"Téléchargées\";\n\"downloadImportantPrompt\" = \"Il y a une petite mais importante mise à jour pour les images du Coran. Voulez-vous télécharger cette mise à jour maintenant ?\";\n\"downloading_message\" = \"Veuillez patienter jusqu\\'à la fin du téléchargement. (Reprise supportée)\";\n\"downloadPrompt\" = \"Pour des performances optimales, certains fichiers doivent être téléchargés. Si vous ne voulez pas faire cela maintenant, chaque page prendra plus de temps à charger. Souhaitez-vous télécharger les fichiers requis maintenant ?\";\n\"downloadPrompt_no\" = \"Non\";\n\"downloadPrompt_ok\" = \"Oui\";\n\"downloadPrompt_title\" = \"Télécharger les fichiers requis ?\";\n\"downloadTabletPrompt\" = \"Nous avons récemment ajouté de meilleures images pour les tablettes. Voulez-vous télécharger ces images maintenant ?\";\n\"edit_tag\" = \"Modifier l\\'étiquette\";\n\"email_us\" = \"Si vous n\\'avez pas eu de réponse à votre question, vous pouvez envoyer un email à quranandroid@gmail.com. Notez bien que nous recevons beaucoup d\\'emails, nous ne sommes donc pas en mesure de répondre à tous les emails.\";\n\"error_getting_translation_list\" = \"Impossible de télécharger la liste des traductions.  Veuillez réessayer plus tard.\";\n\"export_data_error\" = \"Erreur lors de l\\'export des données.\";\n\"exported_data\" = \"Données exportées dans %1$@.\";\n\"extracting_title\" = \"Traitement en cours…\";\n\"found_in_sura\" = \"Trouvée dans la sourate (%1$d) %2$@: %3$d (Page %4$d)\";\n\"from\" = \"Depuis\";\n\"get_arabic_search_db\" = \"Télécharger la base de données de recherche arabe\";\n\"get_translations\" = \"Obtenir des traductions\";\n\"gotoPage\" = \"Aller à la page\";\n\"help\" = \"<b>Comment écouter le Coran ?</b>\\\n<br/>Ouvrez une page du Coran.  Cliquez sur l\\'écran une fois.  En bas, vous verrez un bouton de lecture et le nom d\\'un qari. Cliquez sur le nom du qari pour en choisir un différent.  Cliquez sur le bouton de lecture pour télécharger et lire la page ou la sourate courante.\\\n<br/>\\\n<br/><b>Comment afficher une traduction ?</b>\\\n<br/>Ouvrez une page du Coran.  Cliquez sur l\\'écran une fois.  En haut, vous verrez un petit\\\nglobe (ou, si vous ne le voyez pas, vous verrez un icone avec trois points carrés - cliquez dessus\\\net choisissez une traduction pour la voir).\\\n<br/>\\\nSi vous n\\'avez pas de traduction déjà téléchargée, il vous sera affiché un écran\\\npour en télécharger.  Choisissez et téléchargez une traduction,\\\npuis retournez en arrière et cliquez encore sur le petit globe pour voir la traduction.\\\n<br/>\\\n<br/><b>Comment marquer une page dans ses favoris ?</b>\\\n<br/>Ouvrez une page du Coran.  Cliquez sur l\\'écran une fois.  En haut à droite, vous verrez une petite étoile.\\\nCliquez dessus pour la marquer (l\\'icone se remplis de blanc).  Recliquez dessus pour l\\'effacer des favoris.\\\n<br/>\\\n<br/><b>Comment agrandir le texte ?</b>\\\n<br/>Pour les pages en arabe tenez l\\'écran en portrait.\\\nPour les traductions, allez dans paramètres et choisissez la taille de la traduction.\\\n<br/>\\\n<br/><b>Comment partager une Aya ?</b>\\\n<br/>Allez à l\\'Aya qui vous intéresse dans les pages en arabe, cliquez et maintenez enfoncé sur l\\'Aya pour accéder à un menu d\\'où vous pourrez ajoutez l\\'Aya en favoris, la partager, lire sa traduction/exégèse ou copier l\\'Aya dans le presse papier.\\\n<br/>\\\n<br/><b>Les polices Malayalm/Tamil/Bangla/Urdu ne fonctionnent pas !</b>\\\n<br/>Malheureusement, Android avant la version 4.0 ne prend pas en charge ces polices, et nous ne pouvons pas faire grand chose pour y remédier.\";\n\"help_title\" = \"FAQ\";\n\"highlighting_database\" = \"Fichiers requis\";\n\"import_data\" = \"Importer des données\";\n\"import_data_and_override\" = \"Si vous importez ce fichier, cela remplacera tous vos marque-pages par %1$d marque-page(s) et %2$d tag(s). Effectuer l\\'importation ?\";\n\"import_data_error\" = \"Fichier de sauvegarde invalide (ou impossible de lire le fichier de sauvegarde).\";\n\"import_data_permissions_error\" = \"Impossible de lire le fichier de sauvegarde à cause d\\'une erreur de permissions.\";\n\"import_successful\" = \"Données importées avec succès\";\n\"juz2_description\" = \"Juz\\' %1$@\";\n\"kitkat_external_message\" = \"Dû à certaines restrictions d\\'Android, si vous choisissez\\\nde stocker les données de l\\'application sur votre carte SD et que par la suite vous désinstallez\\\nou supprimez les données de Quran Android, toutes les pages et les audios de Quran Android\\\nseront supprimés et vous serez contraints de les télécharger de nouveau. Êtes-vous certains de\\\nvouloir utiliser la carte SD externe ?\";\n\"loading\" = \"Chargement…\";\n\"madani\" = \"Madani\";\n\"makki\" = \"Makki\";\n\"menu_about\" = \"À propos\";\n\"menu_back_to_page\" = \"Afficher le coran\";\n\"menu_bookmarks\" = \"Favoris\";\n\"menu_bookmarks_ayah\" = \"Ayāts en favoris\";\n\"menu_bookmarks_page\" = \"Pages en favoris\";\n\"menu_get_translations\" = \"Obtenir des traductions\";\n\"menu_help\" = \"Aide\";\n\"menu_jump\" = \"Aller à\";\n\"menu_jump_last_page\" = \"Dernière page\";\n\"menu_other_apps\" = \"Autres applications\";\n\"menu_search\" = \"Rechercher\";\n\"menu_settings\" = \"Paramètres\";\n\"menu_show_date\" = \"\\\" Afficher la date\\\"\";\n\"menu_sort\" = \"Trier\";\n\"menu_sort_date\" = \"Par date d\\'ajout\";\n\"menu_sort_group_by_tags\" = \"Par Tag\";\n\"menu_sort_location\" = \"Selon l\\'ordre dans le coran\";\n\"menu_translation\" = \"Afficher la traduction\";\n\"more_translations\" = \"Autres traductions\";\n\"move_down\" = \"Descendre\";\n\"move_up\" = \"Avancez\";\n\"need_translation\" = \"Vous n\\'avez encore téléchargé aucune traductions/exégèses .\";\n\"new_tag\" = \"Nouvelle étiquette\";\n\"next\" = \"Suivant\";\n\"no_arabic_search_available\" = \"Vous n\\'avez pas téléchargé le pack de recherche arabe.  S\\'il vous plaît veuillez le télécharger et recommencez votre recherche.\";\n\"no_results\" = \"Aucun resultat pour \\\"%@\\\"\";\n\"not_tagged\" = \"Aucune étiquette\";\n\"notification_channel_audio\" = \"Coran : Récitations\";\n\"notification_channel_download\" = \"Coran : Téléchargements\";\n\"notification_download_canceled\" = \"Téléchargement annulé\";\n\"page_description\" = \"Page %1$@, Juz\\' %2$@\";\n\"pause\" = \"Pause\";\n\"play\" = \"Écouter\";\n\"play_apply\" = \"Appliquer\";\n\"play_apply_and_play\" = \"Appliquer et Écouter\";\n\"play_each_verse\" = \"Écouter chaque Aya :\";\n\"play_from_here\" = \"Écouter à partir d\\'ici\";\n\"play_restrict_range\" = \"Écouter uniquement les Ayāts sélectionnés\";\n\"play_verses_range\" = \"Écouter la selection de Ayāt :\";\n\"playback_prompt_title\" = \"Lecture depuis :\";\n\"playback_speed\" = \"Vitesse de lecture :\";\n\"please_grant_permissions\" = \"S\\'il vous plaît, accordez les permissions dans les paramètres des applicaitons.\";\n\"please_wait\" = \"Veuillez patienter...\";\n\"prefs_app_location_summary\" = \"Sélectionnez sur quelle sdcard sauvegarder les fichiers\";\n\"prefs_app_location_title\" = \"Location de l\\'application\";\n\"prefs_app_size\" = \"La taille de l\\'application est\";\n\"prefs_audio_manager_summary\" = \"Gérer et télécharger les audios coraniques\";\n\"prefs_ayah_before_translation_summary\" = \"Voir l\\'Aya en arabe au-dessus de la traduction\";\n\"prefs_ayah_before_translation_title\" = \"Aya avant la traduction\";\n\"prefs_calculating_app_size\" = \"Calcul de la taille de l\\'application\";\n\"prefs_category_advanced\" = \"Options avancées\";\n\"prefs_category_advanced_summary\" = \"Importer/exporter des signets, définir le répertoire des données, etc.\";\n\"prefs_category_display_settings\" = \"Parametres d\\'affichage\";\n\"prefs_category_download\" = \"Options de téléchargement\";\n\"prefs_category_dual_screen\" = \"Préférences de la double page\";\n\"prefs_category_reading\" = \"Preférences de lecture\";\n\"prefs_category_translation\" = \"Préférences de traduction\";\n\"prefs_copying_app_files\" = \"Copie des fichier de l\\'application\";\n\"prefs_display_marker_summary\" = \"Affiche un popup quand on atteint un juz\\', un hizb, etc.\";\n\"prefs_display_marker_title\" = \"Montrer un popup de repère\";\n\"prefs_download_amount_summary\" = \"Quantité du téléchargement préféré pour l\\'audio espacé.\";\n\"prefs_download_amount_title\" = \"Quantité de téléchargement\";\n\"prefs_dual_page_mode_disabled\" = \"En orientation paysage, seulement une page s\\'affichera.\";\n\"prefs_dual_page_mode_enabled\" = \"En orientation paysage, deux pages s\\'afficheront côte à côte.\";\n\"prefs_dual_page_mode_title\" = \"Mode tablette\";\n\"prefs_err_moving_app_files\" = \"Echec du déplacement des fichiers de l\\'application\";\n\"prefs_export_summary\" = \"Exporter une sauvegarde des marque-pages et des tags.\";\n\"prefs_export_title\" = \"Exporter\";\n\"prefs_highlight_bookmarks_summary\" = \"Surligner les Ayāts en favoris durant la lecture\";\n\"prefs_highlight_bookmarks_title\" = \"Surligner les favoris\";\n\"prefs_import_summary\" = \"Importer des signets et des tags\";\n\"prefs_import_title\" = \"Importer\";\n\"prefs_megabytes_int\" = \"%1$d Mo\";\n\"prefs_new_background_title\" = \"Nouvel arrière-plan\";\n\"prefs_night_mode_background_brightness_summary\" = \"Luminosité de la page lorsque le mode nuit est actif\";\n\"prefs_night_mode_background_brightness_title\" = \"Luminosité de fond\";\n\"prefs_night_mode_summary\" = \"Un fond sombre et des polices lumineuses seront utilisés.\";\n\"prefs_night_mode_text_brightness_summary\" = \"Luminosité du texte lorsque le mode nuit est actif\";\n\"prefs_night_mode_text_brightness_title\" = \"Luminosité du texte\";\n\"prefs_night_mode_title\" = \"Mode nuit\";\n\"prefs_no_enough_space_to_move_files\" = \"Espace insuffisant pour déplacer les fichiers de l\\'application\";\n\"prefs_overlay_page_info_summary\" = \"Affiche le numéro de page, le nom de la sourate et le numéro du juz\\' lors la lecture.\";\n\"prefs_overlay_page_info_title\" = \"Afficher des infos\";\n\"prefs_page_type_summary\" = \"Choisir le type d\\'affichage pour la lecture\";\n\"prefs_page_type_title\" = \"Type d\\'affichage (expérimental)\";\n\"prefs_preview\" = \"Prévisualisation\";\n\"prefs_sdcard_external\" = \"Carte SD externe %1$d\";\n\"prefs_sdcard_internal\" = \"Stockage interne\";\n\"prefs_send_logs_summary\" = \"Envoyer les logs de debug au développeur.\";\n\"prefs_send_logs_title\" = \"Envoyer les logs\";\n\"prefs_split_page_and_translation_summary\" = \"En mode double page avec traductions, la page du Coran et la traduction sont affichées.\";\n\"prefs_split_page_and_translation_title\" = \"Coran et traduction en mode dual\";\n\"prefs_streaming_summary\" = \"Streaming lorsque cela est possible.\";\n\"prefs_streaming_title\" = \"Streaming\";\n\"prefs_sura_translated_name_summary\" = \"Montrez la traduction du nom de la sourate\";\n\"prefs_sura_translated_name_title\" = \"Nom traduit de la sourate\";\n\"prefs_translation_text_title\" = \"Taille du texte traduit\";\n\"prefs_translations\" = \"Traductions\";\n\"prefs_translations_summary\" = \"Télécharger et gérer les traductions\";\n\"prefs_use_arabic_summary_on\" = \"L\\'application sera traduite en arabe\";\n\"prefs_use_arabic_title\" = \"Mode arabe (الوضع العربي)\";\n\"prefs_use_dyslexic_font_summary\" = \"Display translations in dyslexia friendly font\";\n\"prefs_use_dyslexic_font_title\" = \"Dyslexia friendly font\";\n\"prefs_volume_key_navigation_summary\" = \"Naviguer entre les pages avec les touches du contrôle du volume.\";\n\"prefs_volume_key_navigation_title\" = \"Navigation avec les touches de son\";\n\"previous\" = \"Précédant\";\n\"process_progress\" = \"Traitement du fichier %1$d / %2$d\";\n\"qarilist_dismiss\" = \"Rejeter\";\n\"qarilist_gapless\" = \"Continu\";\n\"qarilist_gapped\" = \"Non-continu\";\n\"qarilist_qaris_with_downloads\" = \"Récitants avec téléchargements\";\n\"qarilist_ready_to_play\" = \"Prêt à écouter\";\n\"qarilist_select_qari\" = \"Choisir un Qari\";\n\"qarilist_selected\" = \"Sélectionné\";\n\"quran_ayah\" = \"Aya %1$d\";\n\"quran_ayah_details\" = \"%1$@ - Aya %2$@, Juz\\' %3$@\";\n\"quran_hizb\" = \"Hizb\";\n\"quran_juz2\" = \"Juz\\'\";\n\"quran_nos\" = \"½\";\n\"quran_page\" = \"Page\";\n\"quran_rob3\" = \"¼\";\n\"quran_sura\" = \"Sourate\";\n\"quran_sura_title\" = \"Sourate %1$@\";\n\"quran_talt_arb3\" = \"¾\";\n\"quranSearchType\" = \"Ayāt du Coran\";\n\"recent_pages\" = \"Pages récente\";\n\"recite_from_here\" = \"Récitez d\\'ici\";\n\"remove_button\" = \"Supprimer\";\n\"remove_dlg_msg\" = \"Êtes-vous sûr de vouloir supprimer les %1$@ ?\";\n\"remove_dlg_title\" = \"Supprimer la traduction ?\";\n\"repeatValues[0]\" = \"1 fois\";\n\"repeatValues[1]\" = \"2 fois\";\n\"repeatValues[2]\" = \"3 fois\";\n\"repeatValues[3]\" = \"indéfiniment\";\n\"scoped_storage_message\" = \"En raison des modifications apportées à Android pour augmenter la confidentialité des utilisateurs, la copie de fichiers en dehors des répertoires de l\\'application peut empêcher Quran d\\'accéder à ses données dans les futures versions d\\'Android. d\\'Android. Êtes-vous sûr de vouloir utiliser ce chemin ?\";\n\"sdcard_error\" = \"Impossible de trouver la carte SD. Insérez-là et réessayez de nouveau.\";\n\"search_data\" = \"Données de recherche\";\n\"search_entire_mushaf\" = \"Recherche dans l\\'ensemble du mushaf\";\n\"search_full_results\" = \"Résultats complets\";\n\"search_hint\" = \"Rechercher dans le coran\";\n\"search_key\" = \"Appuyez sur la touche de recherche pour rechercher une Aya\";\n\"see_tafseer_of_verse\" = \"Les explications de ce verset sont inclus dans l\\'explication du verset %d (Cliquez pour plus d\\'info).\";\n\"share_ayah\" = \"Partager cette Aya\";\n\"share_ayah_text\" = \"Partager le texte de l\\'Aya\";\n\"starting_page_label\" = \"Début de la page\";\n\"stop\" = \"Stopper\";\n\"storage_permission_please_restart\" = \"Redémarrez l\\'application pour appliquer les changements.\";\n\"storage_permission_rationale\" = \"L\\'application demande la permission de stocker ses données sur un support externe. Elle continuera de fonctionner sans cette permission, mais si vous effacez les données, ou désintallez l\\'application, toutes les pages téléchargées, les audios, et les données seront supprimés. Accorder la permission à l\\'application Coran ?\";\n\"sura_ayah_notification_str\" = \"Sourate %1$@, Aya %2$d\";\n\"sura_ayah_sharing_str\" = \"Sourate %1$@: %2$d\";\n\"tag_ayah\" = \"Étiqueter cette Aya\";\n\"tag_blank_tag_error\" = \"Le nom du tag ne peux pas être vide\";\n\"tag_bookmark\" = \"Étiqueter le favori\";\n\"tag_dlg_title\" = \"Étiquette\";\n\"tag_duplicate_tag_error\" = \"Le nom du tag existe déjà!\";\n\"tag_name\" = \"Nom\";\n\"timing_database\" = \"Fichiers requis\";\n\"to\" = \"À\";\n\"translation_ayah\" = \"Traduction/exégèse de l\\'Aya\";\n\"translation_dialog_later\" = \"Plus tard\\\n\";\n\"translation_dialog_yes\" = \"Oui\";\n\"translation_updates_available\" = \"Une mise à jour est disponible pour certaines de vos traductions.  Aller maintenant au menu des traductions ?\";\n\"undo\" = \"Annuler\";\n\"update_available\" = \"Mise à jour disponible\";\n\"warning\" = \"Attention\";\n"
  },
  {
    "path": "Core/Localization/Resources/fr.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>résultat pour \\&quot;%1$d\\&quot;:</string>\n                <key>many</key>\n                <string>%2$d résultats pour \\&quot;%1$d\\&quot;:</string>\n                <key>other</key>\n                <string>%2$d résultats pour \\&quot;%1$d\\&quot;:</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>%d Aya</string>\n                <key>many</key>\n                <string>%d Ayāt</string>\n                <key>other</key>\n                <string>%d Ayāt</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/fr.lproj/Localizable.strings",
    "content": "\n\n// MARK: - General\n\n// Metadata: Translated by ChatGPT; human review required.\n\"button.done\" = \"Terminé\";\n// Metadata: Translated by ChatGPT; human review required.\n\"button.delete\" = \"Supprimer\";\n\n// MARK: - Errors\n\n// Metadata: Translated by ChatGPT; human review required.\n\"error.dialog.title\" = \"Erreur\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.connection_lost\" = \"La connexion Internet est perdue. Déplacez-vous vers un endroit où une connexion plus stable est disponible, ou attendez que la connexion redevienne stable.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.international_roaming_off\" = \"Le roaming international n'est pas autorisé. Changez les paramètres de roaming international, ou activez le Wi-Fi.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.not_connected_to_internet\" = \"Non connecté à internet. Activez le Wi-Fi ou autorisez la connexion de données cellulaires.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.general\" = \"Oups ! Quelque chose a mal tourné. Veuillez réessayer.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.no_disk_space\" = \"Pas d'espace disque disponible pour enregistrer les téléchargements.\";\n\n// MARK: - Quran\n\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah\" = \"Ayah\";\n// Metadata: Translated by ChatGPT; human review required.\n\"surah\" = \"Sourate\";\n// Metadata: Translated by AI; human review required.\n\"quran_alquran\" = \"Le Coran\";\n\n// MARK: - Translation\n\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.translation\" = \"Traduction\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.transliteration\" = \"Translittération\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.selectedTranslations\" = \"Sélectionné\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.translator\" = \"Traducteur: \";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.see-referenced-verse\" = \"Voir l'ayah %d.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.read-more\" = \"Lire plus\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-retrieval\" = \"Oups ! Quelque chose a mal tourné. Nous n'avons pas pu récupérer la traduction.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-not-available\" = \"Pas de traduction disponible pour cette Ayah.\";\n\n// MARK: - Search\n\n// Metadata: Translated by ChatGPT; human review required.\n\"search.recents.title\" = \"Recherches récentes\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.popular.title\" = \"Essayez de rechercher avec\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.placeholder.text\" = \"Sourate, verset, traduction, tafsir et numéros\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.result.count\" = \"%@ (%d)\";\n\n// MARK: - Settings\n\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.write_review\" = \"Rédiger un avis sur l'App Store...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.contact_us\" = \"Contactez-nous\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.donate\" = \"Faire un don\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.share_app\" = \"Partager l'application...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.app_version\" = \"Version de l'application\";\n\n// MARK: - Quran Menu\n\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabic\" = \"Arabe\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translation\" = \"Traduction/Tafsir\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.select_translation\" = \"Sélectionner des traductions/tafsir\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer\" = \"Pointeur de traduction de mot\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer.select_translation\" = \"Affichage du pointeur\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.fontSizeLetter\" = \"A\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translationFontSize\" = \"Taille de la traduction\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabicFontSize\" = \"Taille du Coran\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.twoPages\" = \"2 pages côte à côte (en paysage)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.verticalScrolling\" = \"Défilement vertical\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.theme_settings\" = \"Thèmes et paramètres\";\n\n// MARK: - Theme\n\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.light\" = \"Clair\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.dark\" = \"Sombre\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto\" = \"Auto\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto.message\" = \"L'application Coran adhérera aux paramètres d'apparence de votre iPhone\";\n\n// MARK: - Tabs\n\n// Metadata: Translated by ChatGPT; human review required.\n\"tab.notes\" = \"Notes\";\n\n// MARK: - Update\n\n// Metadata: Translated by ChatGPT; human review required.\n\"update.filesystem.title\" = \"Mise à jour des bases de données...\";\n\"downloading_title\" = \"Téléchargement en cours…\";\n\n// MARK: - Reciters\n\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.title\" = \"Sélectionnez le récitant à écouter\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.recent\" = \"Récents\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.downloaded\" = \"Téléchargé\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.all\" = \"Tous\";\n\n// MARK: - Audio\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.action.modify\" = \"Modifier\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.message\" = \"Lecture audio de %@ à %@\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.downloading.message\" = \"Téléchargement de l'audio de %@ à %@\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing-verses.label\" = \"Lecture des versets\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.adjust-end-verse-to-the-end.label\" = \"Ajuster le dernier verset à la fin\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-start-verse\" = \"Sélectionner le verset de départ\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-end-verse\" = \"Sélectionner le verset final\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount\" = \"Télécharger/Lire jusqu'à\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount.description\" = \"Lors de la lecture audio, cela jouera jusqu'à la fin du\";\n\n// MARK: - Bookmarks\n\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.title\" = \"Ajout de signets...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.text\" = \"Lorsque vous lisez le Coran, appuyez sur le bouton signet pour marquer la page actuelle.\";\n\n// MARK: - Notes\n\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.title\" = \"Ajout de surbrillances Ayah...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.text\" = \"Appuyez et maintenez sur une Ayah. Vous pouvez étendre la sélection pour inclure plusieurs Ayat, puis appuyez sur le bouton signet.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.verses-count\" = \"(+%d versets)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.title\" = \"Supprimer le surlignage\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.body\" = \"La note associée sera également supprimée.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.title\" = \"Synchronisation iCloud\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.body\" = \"L'application utilise iCloud pour synchroniser les signets et les notes sur vos appareils. Vous pouvez le désactiver dans les paramètres iCloud de votre appareil.\";\n\n// MARK: - Ayah Menu\n\n\"ayah.menu.copy\" = \"Copier\";\n\"ayah.menu.share\" = \"Partager…\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-juz\" = \"jusqu'à la fin du Juz'\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-surah\" = \"jusqu'à la fin de la Sourate\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-page\" = \"jusqu'à la fin de la page\";\n// Metadata: Translated by AI; human review required.\n\"ayah.menu.play-end-quran\" = \"jusqu'à la fin du Coran\";\n\"ayah.menu.repeat\" = \"Répéter\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verse\" = \"verset sélectionné\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verses\" = \"versets sélectionnés\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight\" = \"Surligner\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight-select-color\" = \"sélectionner la couleur\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.add-note\" = \"Ajouter une note\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.edit-note\" = \"Modifier la note\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-note\" = \"Supprimer la note\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-highlight\" = \"Supprimer la mise en évidence\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.short\" = \"Sélectionner\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.long\" = \"Définir comme Mushaf actuel\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.title\" = \"Choisir le Mushaf\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selection-description\" = \"Touchez un Mushaf pour plus d'informations.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.hafs\" = \"Mushaf Hafs\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.pages.604\" = \"604 pages\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.lines.15\" = \"page de 15 lignes\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.supported\" = \"Traduction mot à mot\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.not-supported\" = \"Pas de traduction mot à mot\";\n\n// Hafs 1405\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.title\" = \"Hafs, Médine classique, 1405 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.description\" = \"Le Mushaf Hafs classique publié à Médine en 1405 Hijri. L'application a proposé cette version pendant longtemps.\\nDu Complexe d'Impression du Coran Roi Fahd.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.issue\" = \"Publié en 1405 Hijri\";\n\n// Hafs 1421\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.title\" = \"Hafs, Médine, 1421 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.description\" = \"Le Mushaf Hafs publié à Médine en 1421 Hijri. Du Complexe d'Impression du Coran Roi Fahd.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.issue\" = \"Publié en 1421 Hijri\";\n\n// Hafs 1440\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.title\" = \"Hafs, Médine, 1440 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.description\" = \"Le Mushaf Hafs publié à Médine en 1440 Hijri. Du Complexe d'Impression du Coran Roi Fahd.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.issue\" = \"Publié en 1440 Hijri\";\n\n// Hafs Tajweed\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.title\" = \"Hafs, Tajweed\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.description\" = \"Le Mushaf Hafs Tajweed. Al-Quran Al-Kareem - Édition Dar al-Marefa.\";\n\n// MARK: - Diagnostics\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.title\" = \"Diagnostics\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.details\" = \"Ces paramètres sont utilisés par le développeur de l'application spécifiquement à des fins de débogage et de diagnostic.\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.share_app_logs\" = \"Partager les journaux de l'application\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs\" = \"Activer la journalisation de débogage\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs.details\" = \"Le paramètre prendra effet lors du prochain redémarrage de l'application.\";\n\n\n// MARK: - What's new\n\n// Metadata: Translated by ChatGPT; human review required.\n\"new.title\" = \"Quoi de neuf\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.action\" = \"Continuer\";\n\n// Mushafs\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs\" = \"Nouveaux Mushafs:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs.details\" = \"* Tajweed Hafs Mushaf: Al-Quran Al-Kareem - Édition Dar al-Marefa.\\n* Mushaf de Médine 1421 hijri.\\n* Mushaf de Médine 1440 hijri.\\n* De plus, continuez à profiter de la version classique de 1405 hijri.\";\n\n// Reciters\n// Metadata: Translated by ChatGPT; human review required.\n\"new.reciters\" = \"Nouveaux Récitateurs:\";\n\n// Miscellaneous\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous\" = \"Divers:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous.details\" = \"* Mise à jour de l'apparence de l'application.\\n* Fonction de recherche améliorée (nouvel algorithme à venir bientôt).\\n* Prise en charge de la localisation vietnamienne.\\n* Accès avancé aux options audio disponible lorsque aucune récitation n'est en cours.\\n* L'application est désormais open source : https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades\" = \"Audio:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades.details\" = \"* Contrôle de la vitesse de récitation ajustable : 0,5x, 0,75x, 1x, 1,25x, 1,5x - merci à @adnan29979.\\n* La lecture mémorise votre vitesse préférée - merci à @adnan29979.\";\n\n// Personalization\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization\" = \"Thèmes de lecture:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization.details\" = \"* Prise en charge de plusieurs thèmes. Ouvrez une page du Coran -> Menu en haut à droite -> Thèmes et paramètres.\\n* Utilisez 'Original' si vous souhaitez revenir au style précédent.\";\n\n// Library & Navigation\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation\" = \"Bibliothèque et navigation:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation.details\" = \"* Triez les sourates et les juz sur Accueil et affichez les numéros de sourate pour accéder plus rapidement à ce dont vous avez besoin - merci à @yismailuofa.\";\n"
  },
  {
    "path": "Core/Localization/Resources/fr.lproj/Readers.strings",
    "content": "\"qari_abdulaziz_zahrani_gapless\" = \"Abdulaziz Az-Zahrani\";\n\"qari_abdulbaset\" = \"Abd Al-Basit (interrompu)\";\n\"qari_abdulbaset_gapless\" = \"Abd Al-Basit\";\n\"qari_abdulbaset_mujawwad\" = \"Abd Al-Basit Mujawwad (interrompu)\";\n\"qari_abdulbaset_mujawwad_gapless\" = \"Abd Al-Basit Mujawwad\";\n\"qari_abdulhadi_kanakeri_gapless\" = \"AbdulHadi Kanakeri\";\n\"qari_abdullah_matroud_gapless\" = \"Abdullah Matroud\";\n\"qari_abdulmuhsin_qasim_gapless\" = \"Abdul Mohsen Al-Qasim\";\n\"qari_abdulrahman_alshahat_gapless\" = \"Abdulrahman Al-Shahat\";\n\"qari_abdurrashid_sufi_gapless\" = \"Abdur-Rashid Sufi\";\n\"qari_afasy\" = \"Mishary Al-Afasy (interrompu)\";\n\"qari_afasy_cali_gapless\" = \"Mishari Al-Afasy (Californie)\";\n\"qari_afasy_gapless\" = \"Mishary Al-Afasy\";\n\"qari_ahmad_nauina_gapless\" = \"Ahmad Nauina\";\n\"qari_ahmed_al_nufais_gapless\" = \"Ahmed Al-Nufais\";\n\"qari_ajamy_gapless\" = \"Ahmed ibn Ali al-Ajamy\";\n\"qari_akram_al_alaqmi\" = \"Akram Al-Alaqmi\";\n\"qari_ali_hajjaj_alsouasi_gapless\" = \"Ali Hajjaj Alsouasi\";\n\"qari_ali_jaber_gapless\" = \"Ali Jaber\";\n\"qari_alijon_qari_gapless\" = \"Alijon Qari\";\n\"qari_aloosi_gapless\" = \"Abdul Rahman Aloosi\";\n\"qari_alzain_ahmad_gapless\" = \"Alzain Mohammed Ahmad\";\n\"qari_ayman_suwaid_gapless\" = \"Ayman Suwaid\";\n\"qari_ayman_suwaid_gapped\" = \"Ayman Suwaid (interrompu)\";\n\"qari_ayyoub\" = \"Muhammad Ayyoub (interrompu)\";\n\"qari_ayyoub_gapless\" = \"Muhammad Ayyoub\";\n\"qari_aziz_alili_gapless\" = \"Aziz Alili\";\n\"qari_badr_al_turki_gapless\" = \"Badr Al-Turki\";\n\"qari_bandar_baleela_gapless\" = \"Bandar Baleela\";\n\"qari_basfar\" = \"Abdullah Basfar (interrompu)\";\n\"qari_basfar_gapless\" = \"Abdullah Basfar\";\n\"qari_dussary\" = \"Yasser Ad-Dussary (interrompu)\";\n\"qari_fares_abbad_gapless\" = \"Fares Abbad\";\n\"qari_farman_shawani_gapless\" = \"Farman Shawani\";\n\"qari_hady_toure_gapless\" = \"Hady Toure\";\n\"qari_hani_rifai\" = \"Hani Ar-Rifai (interrompu)\";\n\"qari_hani_rifai_gapless\" = \"Hani Ar-Rifai\";\n\"qari_hudhayfi\" = \"Ali Al-Hudhaify (interrompu)\";\n\"qari_hudhayfi_gapless\" = \"Ali Al-Hudhaify\";\n\"qari_husary_gapless\" = \"Husary\";\n\"qari_husary_iza3a_gapless\" = \"Husary Broadcast\";\n\"qari_husary_muallim_gapless\" = \"Husary (Muallim)\";\n\"qari_husary_mujawwad\" = \"Husary Mujawwad (interrompu)\";\n\"qari_husary_mujawwad_gapless\" = \"Husary (Mujawwad)\";\n\"qari_ibrahim_alakhdar_gapless\" = \"Ibrahim Al-Akhdar\";\n\"qari_idrees_abkar_gapless\" = \"Idrees Abkar\";\n\"qari_jibreel\" = \"Muhammad Jibreel (interrompu)\";\n\"qari_jibreel_gapless\" = \"Muhammad Jibreel\";\n\"qari_juhany_gapless\" = \"Abdullah Al-Juhany\";\n\"qari_khaled_muhanna_gapless\" = \"Khaled Al-Muhanna\";\n\"qari_khalid_jalil_gapless\" = \"Khalid Al-Jalil\";\n\"qari_khalid_qahtani_gapless\" = \"Khalid elkahtani\";\n\"qari_khalifa_taniji_gapless\" = \"Khalifa Taniji\";\n\"qari_luhaidan_gapless\" = \"Muhammad Al-Luhaidan\";\n\"qari_mahmoud_ali_albana_gapless\" = \"Mahmoud Ali al Bana\";\n\"qari_minshawi_mujawwad\" = \"Minshawy Mujawwad (interrompu)\";\n\"qari_minshawi_mujawwad_gapless\" = \"Minshawy Mujawwad\";\n\"qari_minshawi_murattal_gapless\" = \"Minshawi Murattal\";\n\"qari_mishari_walk_gapless\" = \"Mishari & Ibrahim Walk (anglaise)\";\n\"qari_mohammad_altablawi_gapless\" = \"Mohammad al Tablawy\";\n\"qari_mokhtasar_asmari_gapless\" = \"Abdullah Al-Asmari (commentaire arabe)\";\n\"qari_mostafa_ismaeel_gapless\" = \"Mostafa Ismaeel\";\n\"qari_muaiqly\" = \"Maher Al Muaiqly (interrompu)\";\n\"qari_muaiqly_gapless\" = \"Maher Al Muaiqly\";\n\"qari_muaiqly_haramain_gapless\" = \"Maher Al Muaiqly (Haramain)\";\n\"qari_muhammad_rashad_shereef_gapless\" = \"Muhammad Rashad Al-Chérif\";\n\"qari_nabil_rifa3i_gapless\" = \"Nabil Ar-Rifai\";\n\"qari_noreen_siddiq_gapless\" = \"Noreen Siddiq\";\n\"qari_peshawa_qadir_al_qurdi_gapless\" = \"Peshewa Qadir al-Kurdi\";\n\"qari_qatami_gapless\" = \"Nasser Al Qatami\";\n\"qari_raad_al_kurdi_gapless\" = \"Raad Al-Kurdi\";\n\"qari_saad_al_ghamdi\" = \"Saad Al-Ghamdi (interrompu)\";\n\"qari_saad_al_ghamidi_gapless\" = \"Saad Al-Ghamdi\";\n\"qari_sahl_yaseen_gapless\" = \"Sahl Yaseen\";\n\"qari_salah_budair_gapless\" = \"Salah Budair\";\n\"qari_salah_bukhatir_gapless\" = \"Salah Bukhatir\";\n\"qari_shatri\" = \"Abu Bakr Ash-Shatri (interrompu)\";\n\"qari_shatri_gapless\" = \"Abu Bakr Ash-Shatri\";\n\"qari_shuraym\" = \"Saood Ash-Shuraym (interrompu)\";\n\"qari_shuraym_gapless\" = \"Saood Ash-Shuraym\";\n\"qari_suadis\" = \"Abdurrahmaan As-Sudais (interrompu)\";\n\"qari_sudais_gapless\" = \"Abdurrahman As-Sudais\";\n\"qari_tablawy\" = \"Mohammad al Tablaway (interrompu)\";\n\"qari_tawfeeq_as_sawaigh_gapless\" = \"Tawfeeq as-Sawaigh\";\n\"qari_wadee3_alyamani_gapless\" = \"Wadee\\' Al-Yamani\";\n\"qari_walk\" = \"Ibrahim Walk (Trad. Anglaise)\";\n\"qari_walk_gapless\" = \"Ibrahim Walk (Trad. Anglaise)\";\n\"qari_yasser_dussary_gapless\" = \"Yasser Ad-Dussary\";\n\"qari_yasser_salama_hadr_gapless\" = \"Yasser Salama (hadr)\";\n"
  },
  {
    "path": "Core/Localization/Resources/fr.lproj/Suras.strings",
    "content": "\"sura_names_translation[0]\" = \"L\\'ouverture\";\n\"sura_names_translation[1]\" = \"La vache\";\n\"sura_names_translation[2]\" = \"La famille d\\'Imran\";\n\"sura_names_translation[3]\" = \"Les femmes\";\n\"sura_names_translation[4]\" = \"La table\";\n\"sura_names_translation[5]\" = \"Les bestiaux\";\n\"sura_names_translation[6]\" = \"Le mur d\\'A\\'raf\";\n\"sura_names_translation[7]\" = \"Le butin\";\n\"sura_names_translation[8]\" = \"Le repentir\";\n\"sura_names_translation[9]\" = \"Jonas\";\n\"sura_names_translation[10]\" = \"Hûd\";\n\"sura_names_translation[11]\" = \"Joseph\";\n\"sura_names_translation[12]\" = \"Le tonnerre\";\n\"sura_names_translation[13]\" = \"Abraham\";\n\"sura_names_translation[14]\" = \"Al-hijr\";\n\"sura_names_translation[15]\" = \"Les abeilles\";\n\"sura_names_translation[16]\" = \"Le voyage nocturne\";\n\"sura_names_translation[17]\" = \"La caverne\";\n\"sura_names_translation[18]\" = \"Marie\";\n\"sura_names_translation[19]\" = \"Ta-Ha\";\n\"sura_names_translation[20]\" = \"Les prophètes\";\n\"sura_names_translation[21]\" = \"Le pélerinage\";\n\"sura_names_translation[22]\" = \"Les croyants\";\n\"sura_names_translation[23]\" = \"La lumière\";\n\"sura_names_translation[24]\" = \"TLe discernement\";\n\"sura_names_translation[25]\" = \"Les poètes\";\n\"sura_names_translation[26]\" = \"Les fourmis\";\n\"sura_names_translation[27]\" = \"Le récit\";\n\"sura_names_translation[28]\" = \"L\\'araignée\";\n\"sura_names_translation[29]\" = \"Les romains\";\n\"sura_names_translation[30]\" = \"Luqman\";\n\"sura_names_translation[31]\" = \"La prosternation\";\n\"sura_names_translation[32]\" = \"Les coalisés\";\n\"sura_names_translation[33]\" = \"Saba\";\n\"sura_names_translation[34]\" = \"Le Créateur\";\n\"sura_names_translation[35]\" = \"Ya sîn\";\n\"sura_names_translation[36]\" = \"Les rangés\";\n\"sura_names_translation[37]\" = \"La lettre Sad\";\n\"sura_names_translation[38]\" = \"Les groupes\";\n\"sura_names_translation[39]\" = \"Le pardonneur\";\n\"sura_names_translation[40]\" = \"Les versets détaillés\";\n\"sura_names_translation[41]\" = \"La consultation\";\n\"sura_names_translation[42]\" = \"L\\'ornement\";\n\"sura_names_translation[43]\" = \"La fumée\";\n\"sura_names_translation[44]\" = \"L\\'agenouillée\";\n\"sura_names_translation[45]\" = \"Les dunes\";\n\"sura_names_translation[46]\" = \"Muhammad\";\n\"sura_names_translation[47]\" = \"La victoire éclatante\";\n\"sura_names_translation[48]\" = \"Les appartements\";\n\"sura_names_translation[49]\" = \"La lettre \\\"Qaf\\\"\";\n\"sura_names_translation[50]\" = \"Qui éparpillent\";\n\"sura_names_translation[51]\" = \"Le mont Tur\";\n\"sura_names_translation[52]\" = \"L\\'étoile\";\n\"sura_names_translation[53]\" = \"La Lune\";\n\"sura_names_translation[54]\" = \"Le miséricordieux\";\n\"sura_names_translation[55]\" = \"L\\'événement\";\n\"sura_names_translation[56]\" = \"Le fer\";\n\"sura_names_translation[57]\" = \"La discussion\";\n\"sura_names_translation[58]\" = \"L\\'exode\";\n\"sura_names_translation[59]\" = \"L\\'éprouvée\";\n\"sura_names_translation[60]\" = \"Les rangs\";\n\"sura_names_translation[61]\" = \"Le vendredi\";\n\"sura_names_translation[62]\" = \"Les hypocrites\";\n\"sura_names_translation[63]\" = \"La grande perte\";\n\"sura_names_translation[64]\" = \"Le divorce\";\n\"sura_names_translation[65]\" = \"L\\'interdiction\";\n\"sura_names_translation[66]\" = \"La royauté\";\n\"sura_names_translation[67]\" = \"La plume\";\n\"sura_names_translation[68]\" = \"Celle qui montre la vérité\";\n\"sura_names_translation[69]\" = \"Les voies d\\'ascension\";\n\"sura_names_translation[70]\" = \"Noé\";\n\"sura_names_translation[71]\" = \"Les djinns\";\n\"sura_names_translation[72]\" = \"L\\'enveloppé\";\n\"sura_names_translation[73]\" = \"Le revêtu d\\'un manteau\";\n\"sura_names_translation[74]\" = \"La résurrection\";\n\"sura_names_translation[75]\" = \"L\\'Homme\";\n\"sura_names_translation[76]\" = \"Les envoyés\";\n\"sura_names_translation[77]\" = \"La nouvelle\";\n\"sura_names_translation[78]\" = \"Les anges qui arrachent les âmes\";\n\"sura_names_translation[79]\" = \"Il s\\'est renfrogné\";\n\"sura_names_translation[80]\" = \"L\\'obscurcissement\";\n\"sura_names_translation[81]\" = \"La rupture\";\n\"sura_names_translation[82]\" = \"Les fraudeurs\";\n\"sura_names_translation[83]\" = \"La déchirure\";\n\"sura_names_translation[84]\" = \"Les constellations\";\n\"sura_names_translation[85]\" = \"L\\'astre nocturne\";\n\"sura_names_translation[86]\" = \"Le Très-Haut\";\n\"sura_names_translation[87]\" = \"L\\'enveloppante\";\n\"sura_names_translation[88]\" = \"L\\'aube\";\n\"sura_names_translation[89]\" = \"La cité\";\n\"sura_names_translation[90]\" = \"Le soleil\";\n\"sura_names_translation[91]\" = \"La nuit\";\n\"sura_names_translation[92]\" = \"Le jour montant\";\n\"sura_names_translation[93]\" = \"L\\'ouverture\";\n\"sura_names_translation[94]\" = \"Le figuier\";\n\"sura_names_translation[95]\" = \"L\\'adhérence\";\n\"sura_names_translation[96]\" = \"La Destinée\";\n\"sura_names_translation[97]\" = \"La preuve\";\n\"sura_names_translation[98]\" = \"La secousse\";\n\"sura_names_translation[99]\" = \"Les Coursiers\";\n\"sura_names_translation[100]\" = \"Le fracas\";\n\"sura_names_translation[101]\" = \"La course aux richesses\";\n\"sura_names_translation[102]\" = \"Le temps\";\n\"sura_names_translation[103]\" = \"Le calomniateurs\";\n\"sura_names_translation[104]\" = \"L\\'éléphant\";\n\"sura_names_translation[105]\" = \"Quraysh\";\n\"sura_names_translation[106]\" = \"L\\'ustensile\";\n\"sura_names_translation[107]\" = \"L\\'abondance\";\n\"sura_names_translation[108]\" = \"Les infidèles\";\n\"sura_names_translation[109]\" = \"Les secours\";\n\"sura_names_translation[110]\" = \"Les fibres\";\n\"sura_names_translation[111]\" = \"Le monothéisme pur\";\n\"sura_names_translation[112]\" = \"L\\'aube naissante\";\n\"sura_names_translation[113]\" = \"Les Hommes\";\n\"sura_names[0]\" = \"AL-FÃTIHAH\";\n\"sura_names[1]\" = \"AL-BAQARAH\";\n\"sura_names[2]\" = \"ÃL-`IMRÃN\";\n\"sura_names[3]\" = \"AN-NISÃ\\'\";\n\"sura_names[4]\" = \"AL-MÃ-\\'IDAH\";\n\"sura_names[5]\" = \"AL-AN`ÃM\";\n\"sura_names[6]\" = \"AL-A`RÃF\";\n\"sura_names[7]\" = \"AL-ANFÃL\";\n\"sura_names[8]\" = \"AT-TAWBAH\";\n\"sura_names[9]\" = \"YOUNUS\";\n\"sura_names[10]\" = \"HOUD\";\n\"sura_names[11]\" = \"YOUSUF\";\n\"sura_names[12]\" = \"AR-RA`D\";\n\"sura_names[13]\" = \"IBRÃHÎM\";\n\"sura_names[14]\" = \"AL-HIJR\";\n\"sura_names[15]\" = \"AN-NAHL\";\n\"sura_names[16]\" = \"AL-ISRÃ\\'\";\n\"sura_names[17]\" = \"AL-KAHF\";\n\"sura_names[18]\" = \"MARЇAM\";\n\"sura_names[19]\" = \"TÃ-HÃ\";\n\"sura_names[20]\" = \"AL-ANBIYÃ\\'\";\n\"sura_names[21]\" = \"AL-HAJJ\";\n\"sura_names[22]\" = \"AL-MU\\'MINOUN\";\n\"sura_names[23]\" = \"AN-NOUR\";\n\"sura_names[24]\" = \"AL-FURQÃN\";\n\"sura_names[25]\" = \"ACH-CHU`ARÃ\\'\";\n\"sura_names[26]\" = \"AN-NAML\";\n\"sura_names[27]\" = \"AL-QASAS\";\n\"sura_names[28]\" = \"AL-`ANKABOUT\";\n\"sura_names[29]\" = \"AR-ROUM\";\n\"sura_names[30]\" = \"LUQMÃN\";\n\"sura_names[31]\" = \"AS-SAJDAH\";\n\"sura_names[32]\" = \"AL-AHZÃB\";\n\"sura_names[33]\" = \"SABA\\'\";\n\"sura_names[34]\" = \"FÃTIR\";\n\"sura_names[35]\" = \"YÃ-SÎN\";\n\"sura_names[36]\" = \"AS-SÃFFÃT\";\n\"sura_names[37]\" = \"SÃD\";\n\"sura_names[38]\" = \"AZ-ZUMAR\";\n\"sura_names[39]\" = \"GHÃFIR\";\n\"sura_names[40]\" = \"FUSSILAT\";\n\"sura_names[41]\" = \"ACH-CHOURÃ\";\n\"sura_names[42]\" = \"AZ-ZUKHRUF\";\n\"sura_names[43]\" = \"AD-DUKHÃN\";\n\"sura_names[44]\" = \"AL-JÃTHIYAH\";\n\"sura_names[45]\" = \"AL-AHQÃF\";\n\"sura_names[46]\" = \"MUHAMMAD\";\n\"sura_names[47]\" = \"AL-FATH\";\n\"sura_names[48]\" = \"AL-HUJURÃT\";\n\"sura_names[49]\" = \"QÃF\";\n\"sura_names[50]\" = \"ADH-DHARIYÃT\";\n\"sura_names[51]\" = \"AT-TOUR\";\n\"sura_names[52]\" = \"AN-NAJM\";\n\"sura_names[53]\" = \"AL-QAMAR\";\n\"sura_names[54]\" = \"AR-RAHMÃN\";\n\"sura_names[55]\" = \"AL-WÃQI`AH\";\n\"sura_names[56]\" = \"AL-HADÎD\";\n\"sura_names[57]\" = \"AL-MUJÃDALAH\";\n\"sura_names[58]\" = \"AL-HASHR\";\n\"sura_names[59]\" = \"AL-MUMTAHANAH\";\n\"sura_names[60]\" = \"AS-SAFF\";\n\"sura_names[61]\" = \"AL-JUMU`AH\";\n\"sura_names[62]\" = \"AL-MUNÃFIQOUN\";\n\"sura_names[63]\" = \"AT-TAGHÃBUN\";\n\"sura_names[64]\" = \"AT-TALÃQ\";\n\"sura_names[65]\" = \"AT-TAHRÎM\";\n\"sura_names[66]\" = \"AL-MULK\";\n\"sura_names[67]\" = \"AL-QALAM\";\n\"sura_names[68]\" = \"AL-HÃQQAH\";\n\"sura_names[69]\" = \"AL-MA`ÃRIJ\";\n\"sura_names[70]\" = \"NOUH\";\n\"sura_names[71]\" = \"AL-JINN\";\n\"sura_names[72]\" = \"AL-MUZZAMMIL\";\n\"sura_names[73]\" = \"Al-MUDDATHTHIR\";\n\"sura_names[74]\" = \"AL-QIYÃMAH\";\n\"sura_names[75]\" = \"AL-INSÃN\";\n\"sura_names[76]\" = \"AL-MURSALÃTE\";\n\"sura_names[77]\" = \"AN-NABA\\'\";\n\"sura_names[78]\" = \"AN-NÃZI`ÃTE\";\n\"sura_names[79]\" = \"`ABASA\";\n\"sura_names[80]\" = \"AT-TAKWÎR\";\n\"sura_names[81]\" = \"AL-INFITÃR\";\n\"sura_names[82]\" = \"AL-MUTAFFIFÎN\";\n\"sura_names[83]\" = \"AL-INCHIQÃQ\";\n\"sura_names[84]\" = \"AL-BUROUJ\";\n\"sura_names[85]\" = \"AT-TÃRIQ\";\n\"sura_names[86]\" = \"AL-A`LÃ\";\n\"sura_names[87]\" = \"AL-GHÃCHIYAH\";\n\"sura_names[88]\" = \"AL-FAJR\";\n\"sura_names[89]\" = \"AL-BALAD\";\n\"sura_names[90]\" = \"ACH-CHAMS\";\n\"sura_names[91]\" = \"AL-LAЇL\";\n\"sura_names[92]\" = \"AD-DUHÃ\";\n\"sura_names[93]\" = \"ACH-CHARH\";\n\"sura_names[94]\" = \"AT-TÎN\";\n\"sura_names[95]\" = \"AL-`ALAQ\";\n\"sura_names[96]\" = \"AL-QADR\";\n\"sura_names[97]\" = \"AL-BAYYNAH\";\n\"sura_names[98]\" = \"AZ-ZALZALAH\";\n\"sura_names[99]\" = \"AL-`ÃDIYÃT\";\n\"sura_names[100]\" = \"AL-QÃRI`AH\";\n\"sura_names[101]\" = \"AT-TAKÃTHUR\";\n\"sura_names[102]\" = \"AL-`ASR\";\n\"sura_names[103]\" = \"AL-HUMAZAH\";\n\"sura_names[104]\" = \"AL-FÎL\";\n\"sura_names[105]\" = \"QURAYCH\";\n\"sura_names[106]\" = \"AL-MÃ`OUN\";\n\"sura_names[107]\" = \"AL-KAWTHAR\";\n\"sura_names[108]\" = \"AL-KÃFIROUN\";\n\"sura_names[109]\" = \"AN-NASR\";\n\"sura_names[110]\" = \"AL-MASAD\";\n\"sura_names[111]\" = \"AL-IKHLÃS\";\n\"sura_names[112]\" = \"AL-FALAQ\";\n\"sura_names[113]\" = \"AN-NÃS\";\n"
  },
  {
    "path": "Core/Localization/Resources/kk.lproj/Android.strings",
    "content": "\"about_contributors\" = \"Жасаушылар\";\n\"about_contributors_summary\" = \"Quran for Android бағдарламасының дамуына үлес қосқандар\";\n\"about_data_sources\" = \"Деректер көзі\";\n\"about_description\" = \"Quran for Android - тегін Құран бағдарламасы.\\\nОсы бағдарламаны жасаушыларға дұға жасауды ұмытпаңыз;)\";\n\"about_furqan_summary\" = \"Утмани мәтіні және араб тафазері\";\n\"about_images\" = \"Суреттер\";\n\"about_madani_images\" = \"Құран суреттері King Fahd Quran Printing Complex шрифттері бойынша жасалынды\";\n\"about_naskh_images\" = \"Naskh бағдарламасының суреттері SHL Info Systems рұқсатымен алынды\\\n\";\n\"about_noorhidayat_summary\" = \"Noorehira шрифті және Мүфти Мұхаммед Тақи Усмани аудармасы\";\n\"about_open_source\" = \"Ашық кодты жобалар\";\n\"about_others\" = \"Басқалар\";\n\"about_qaloon_images\" = \"Qaloon бағдарламасының суреттері Nous Memes Editions Et Diffusion (Тунис) рұқсатымен алынды\";\n\"about_quran_enc_summary\" = \"Көптеген тілдер үшін аудармалар\";\n\"about_quran_ksu\" = \"Электронды Мұсхаф жобасы\";\n\"about_quran_ksu_summary\" = \"Арабша тәпсір мен аудармалар Сауд королі университетінің Электронды Мұсхаф жобасынан алынды\";\n\"about_quranicaudio_summary\" = \"Құранның біріктіріліп (интервалсыз) оқылуы\";\n\"about_tanzil_summary\" = \"Бірнеше тілдегі Құран аудармалары\";\n\"app_name\" = \"Құран\";\n\"audio_manager\" = \"Аудио менеджер\";\n\"audio_manager_delete_selection\" = \"Таңдауды жою\";\n\"audio_manager_download_all\" = \"Барлығын жүктеу\";\n\"audio_manager_download_selection\" = \"Жүктеу таңдауы\";\n\"audio_manager_remove_audio_msg\" = \"%1$@ жойғыңыз келетініне сенімдісіз бе?\";\n\"audio_manager_remove_audio_title\" = \"Сураны жойып тастаңыз ба?\";\n\"audio_manager_remove_multiple_audio_msg\" = \"жойғыңыз келетініне сенімдісіз бе?\";\n\"audio_manager_surah_delete\" = \"Дыбыс файлын жою\";\n\"audio_manager_surah_download\" = \"Сурахты жүктеу\";\n\"audio_updated_text\" = \"Бірнеше Құран аудиофайлдары жаңартылды. Android құрылғысына арналған Құран бұл файлдардың көшірмесін жойды, осылайша ең жаңа нұсқаларды келесі рет қайта ойнатқанда жүктеп алуға болады.\";\n\"audio_updated_title\" = \"Құран дыбыс файлдарын жаңарту\";\n\"available_translations\" = \"Жүктеуге болатындар\";\n\"ayah_copied_popup\" = \"Аят көшірілді\";\n\"bookmark_ayah\" = \"Аятқа бетбелгі қою\";\n\"bookmarks_list_empty\" = \"Бетбелгі жоқ\";\n\"cancel\" = \"Болдырмау\";\n\"canceling\" = \"Болдырмау…\";\n\"copy_ayah\" = \"Аятты көшіру\";\n\"delete_tag\" = \"Белгіні жою\";\n\"delete_translation\" = \"Аударманы жою\";\n\"dialog_ok\" = \"OK\";\n\"download_amount_in_megabytes\" = \"%@ Mб\";\n\"download_cancel\" = \"Болдырмау\";\n\"download_error_disk\" = \"Құрылғыда бос орын жоқ\";\n\"download_error_general\" = \"Жүктелмеді\";\n\"download_error_invalid_download\" = \"Жүктелген файлдар бүлінген\";\n\"download_error_invalid_download_retry\" = \"Файл бүлінген; қайта жүктелуде…\";\n\"download_error_network\" = \"Байланыс қателігі\";\n\"download_error_network_retry\" = \"Байланыс қателігі; қайта қосылуда…\";\n\"download_error_perms\" = \"Рұқсат қателігі\";\n\"download_extra_data\" = \"Бөлісу және аудармаларды пайдалану үшін бір-екі файл жүктеу керек. Қазір жүктелсін бе?\";\n\"download_processing\" = \"Жүктеу…\";\n\"download_progress\" = \"%1$@/%2$@ жүктелді\";\n\"download_retry\" = \"Қайталау\";\n\"download_successful\" = \"Жүктелді\";\n\"download_sura_ayah_progress\" = \"%1$d-сүре %2$d-аят жүктелуде…\";\n\"download_sura_progress\" = \"%3$d-сүренің %1$@ жүктелді (барлығы: %2$@)…\";\n\"downloaded_translations\" = \"Жүктелгендер\";\n\"downloadImportantPrompt\" = \"Құран суреттері үшін кішігірім, бірақ маңызды өзгерістер пайда болды.\\\nЖаңа файлдар қазір жүктелінсін бе?\\\n\";\n\"downloading_message\" = \"Файлдар толық жазылғанша күтіңіз\";\n\"downloadPrompt\" = \"Бағдарламаның дұрыс істеуі үшін тағы басқа файлдар жазу керек.\\\nЕгер файлдар дәл қазір жазылмаса, Құран беттерінің жүктелуі біраз уақыт алуы мүмкін\\\nжәне Интернет қосылысы қажет болады. Файлдар қазір жазылсын ба?\";\n\"downloadPrompt_no\" = \"Жоқ\";\n\"downloadPrompt_ok\" = \"Иә\";\n\"downloadPrompt_title\" = \"Керекті файлдар жүктелінсін бе?\";\n\"downloadTabletPrompt\" = \"Планшеттер үшін суреттер жаңартылды. Жаңа файлдар жүктелінсін бе?\";\n\"edit_tag\" = \"Белгіні өзгерту\";\n\"email_us\" = \"Қалаған жауабыңызды алмасаңыз quranandroid@gmail.com поштасына жазыңыз. Бірақ, поштаға\\\nкөп хаттардың келу себебінен, жауап кешігіп келуі мүмкін. Өтініш, хабарламаны ағылшын тілінде жазыңыз.\";\n\"error_getting_translation_list\" = \"Аударма тізімі жүктелмеді. Кейінірек байқап көріңіз.\";\n\"export_data_error\" = \"Экспорт қателігі\";\n\"exported_data\" = \"Деректер %1$@ жеріне экспортталды\";\n\"extracting_title\" = \"Шығару…\";\n\"found_in_sura\" = \"Сүреде табылды (%1$d) %2$@, %3$d-аят (Бет %4$d)\";\n\"from\" = \"Басы\";\n\"get_arabic_search_db\" = \"Арабша іздеу деректерін орнату\";\n\"get_translations\" = \"Аударма жүктеу\";\n\"gotoPage\" = \"Бетке өту\";\n\"help\" = \"\\\n<b>Аудиоларды қалай тыңдауға болады?</b>\\\n<br/>Құран бетін ашып экранды бір рет басыңыз.\\\nЭкранның төменгі жағынан ойнату батырмасы мен қари есімін көресіз.\\\nЕсімнің үстіне басып басқа қариды таңдауға болады.\\\nОйнату батырмасын басып ашық тұрған бетті немесе сүрені тыңдауға болады.\\\n<br/>\\\n<br/><b>Аудармаларды қалай көруге болады?</b>\\\n<br/>Құран бетін ашып экранды бір рет басыңыз.\\\nЭкранның жоғарғы жағынан глобус суретін көресіз.\\\nГлобусты басып аудармасын көре аласыз.\\\n<br/>\\\nЕгер бұрын жүктелген аудармалар болмаса, аудармалар жүктеу беті ашылады.\\\nКеректі аударманы жүктеп кері қайтыңыз. Қайта глобусты басып аударманы көре аласыз.\\\n<br/>\\\n<br/><b>Бетке қалай белгі қоюға болады?</b>\\\n<br/>Құран бетін ашып экранды бір рет басыңыз.\\\nЭкранның жоғарғы оң жағынан бетбелгі суретін көресіз. Белгі қою үшін соны басыңыз\\\n(бетбелгі ақ түске боялады). Белгіні жою үшін батырманы қайта басыңыз.\\\n<br/>\\\n<br/><b>Мәтінді қалай үлкейтуге болады?</b>\\\n<br/>Арабша мәтінді үлкейту үшін құрылғыны көлденеңінен ұстаңыз (көлденең режимі).\\\nАударма мәтінін үлкейту үшін баптаулардан шрифт өлшемін таңдаңыз.\\\n<br/>\\\n<br/><b>Қалай аяттарды басқа адамдармен бөлісуге болады?</b>\\\n<br/>Құран бетін ашып арабша аяттың үстінен басып тұрыңыз.\\\nАшылған мәзір арқылы аятқа белгі қоюға, бөлісуге, аудармасын көруге,\\\nкөшіруге және қырағатын тыңдауға болады.\\\n<br/>\\\n<br/><b>Malayalam/Tamil/Bengali/Urdu шрифттері істемейді!</b>\\\n<br/>Өкінішке орай Android 4.0-тен төменгі нұсқалар бұл шрифттерді қолдамайды.\\\n\";\n\"help_title\" = \"Жиі қойылатын сұрақтар (FAQ)\";\n\"highlighting_database\" = \"Керекті файлдар\";\n\"import_data\" = \"Импорт\";\n\"import_data_and_override\" = \"Бұл импорт барлық бетбелгілерді %1$d бетбелгі(лер) және %2$d белгі(лер)ге алмастырады.\\\nИмпорттау керек пе?\";\n\"import_data_error\" = \"Жарамсыз резервтік файл (немесе резервтік файл оқылмайды).\";\n\"import_data_permissions_error\" = \"Рұқсат қателіктеріне байланысты резервтік файлдарды оқу мүмкін емес.\";\n\"import_successful\" = \"Деректер импортталды\";\n\"juz2_description\" = \"%1$@-пара\";\n\"kitkat_external_message\" = \"Бағдарлама сыртқы жадқа (SD карта) көшірілген соң жойылып қайта орнатылса\\\nнемесе деректер тазаланса барлық Құран суреттері мен аудиолары жойылады және ол деректерді қайта жүктеу керек болады.\\\nСыртқы жадты пайдалануға сенімдімісіз?\";\n\"loading\" = \"Жүктеу…\";\n\"madani\" = \"Мәдина\";\n\"makki\" = \"Мекке\";\n\"menu_about\" = \"Бағдарлама туралы\";\n\"menu_back_to_page\" = \"Құран\";\n\"menu_bookmarks\" = \"Бетбелгілер\";\n\"menu_bookmarks_ayah\" = \"Аят белгілері\";\n\"menu_bookmarks_page\" = \"Бет белгілері\";\n\"menu_get_translations\" = \"Аударма жүктеу\";\n\"menu_help\" = \"Көмек\";\n\"menu_jump\" = \"Өту\";\n\"menu_jump_last_page\" = \"Соңғы бет\";\n\"menu_other_apps\" = \"Басқа бағдарламалар\";\n\"menu_search\" = \"Іздеу\";\n\"menu_settings\" = \"Баптау\";\n\"menu_show_date\" = \"Күнді көрсету\";\n\"menu_sort\" = \"Сұрыптау\";\n\"menu_sort_date\" = \"Қосылған күні бойынша\";\n\"menu_sort_group_by_tags\" = \"Белгілер бойынша топтау\";\n\"menu_sort_location\" = \"Құрандағы реті бойынша\";\n\"menu_translation\" = \"Аудармалар\";\n\"more_translations\" = \"Қосымша аудармалар\";\n\"move_down\" = \"Төменге жылжу\";\n\"move_up\" = \"Жоғары жылжыту\";\n\"need_translation\" = \"Аударма/тәпсір жүктелмеген.\";\n\"new_tag\" = \"Жаңа белгі\";\n\"next\" = \"Келесі\";\n\"no_arabic_search_available\" = \"Арабша іздеу деректері орнатылмаған.\\\nАлдымен оны жүктеңіз. Кейін қайта іздеп көріңіз.\\\n\";\n\"no_results\" = \"\\\"%@\\\" бойынша нәтиже табылмады\";\n\"not_tagged\" = \"Белгілеусіз\";\n\"notification_channel_audio\" = \"Құранды қайталау\";\n\"notification_channel_download\" = \"Құран жүктеулері\";\n\"notification_download_canceled\" = \"Жүктелу тоқтатылды\";\n\"page_description\" = \"%1$@-бет, %2$@-пара\";\n\"pause\" = \"Кідірту\";\n\"play\" = \"Тыңдау\";\n\"play_apply\" = \"Қолдану\";\n\"play_apply_and_play\" = \"Қолдану және тыңдау\";\n\"play_each_verse\" = \"Әр бір аятты тыңдау:\";\n\"play_from_here\" = \"Осы жерден бастап тыңдау\";\n\"play_restrict_range\" = \"Тек жоғарыдағы аяттарды тыңдау\";\n\"play_verses_range\" = \"Аят топтамасын тыңдау:\";\n\"playback_prompt_title\" = \"Ойнатуды мынадан бастаңыз:\";\n\"playback_speed\" = \"Жүктеу жылдамдылығы:\";\n\"please_grant_permissions\" = \"Өтініш, бағдарлама баптаулары арқылы керекті рұқсаттарды беріңіз\";\n\"please_wait\" = \"Күте тұршы...\";\n\"prefs_app_location_summary\" = \"Құран файлдары сақталған орын\";\n\"prefs_app_location_title\" = \"Деректер орны\";\n\"prefs_app_size\" = \"Файлдар өлшемі:\";\n\"prefs_audio_manager_summary\" = \"Құран аудио файлдарын жүктеу және басқару\";\n\"prefs_ayah_before_translation_summary\" = \"Арабша аяттарды аудармалардың үстінен көрсету\";\n\"prefs_ayah_before_translation_title\" = \"Алдымен аятты көрсету\";\n\"prefs_calculating_app_size\" = \"Бағдарлама өлшемі есептелуде…\";\n\"prefs_category_advanced\" = \"Қосымша\";\n\"prefs_category_advanced_summary\" = \"Бетбелгілерді импорттау/экспорттау, Құран деректер каталогын орнату және т.б.\";\n\"prefs_category_display_settings\" = \"Көрініс\";\n\"prefs_category_download\" = \"Жүктеу\";\n\"prefs_category_dual_screen\" = \"Қос бет параметрлері\";\n\"prefs_category_reading\" = \"Оқу\";\n\"prefs_category_translation\" = \"Аударма баптаулары\";\n\"prefs_copying_app_files\" = \"Бағдарлама файлдары көшірілуде…\";\n\"prefs_display_marker_summary\" = \"Пара, хизб және т.б. бөлімдерге жеткенде мәлімет көрсету\";\n\"prefs_display_marker_title\" = \"Бөлім деректері\";\n\"prefs_download_amount_summary\" = \"Үзіктерге бөлінген аудио файлдарын жүктеу мөлшері\";\n\"prefs_download_amount_title\" = \"Жүктеу мөлшері\";\n\"prefs_dual_page_mode_disabled\" = \"Көлденең режимде тек бір бет көрсетіледі.\";\n\"prefs_dual_page_mode_enabled\" = \"Көлденең режимде екі бет қатарынан көрсетіледі.\";\n\"prefs_dual_page_mode_title\" = \"Планшет режимі\";\n\"prefs_err_moving_app_files\" = \"Файлдарды көшіру барсындағы қателік\";\n\"prefs_export_summary\" = \"Бетбелгілерді экспорттау\";\n\"prefs_export_title\" = \"Экспорт\";\n\"prefs_highlight_bookmarks_summary\" = \"Белгіленген аяттарды ажыратып көрсету\";\n\"prefs_highlight_bookmarks_title\" = \"Бетбелгі деректері\";\n\"prefs_import_summary\" = \"Бетбелгілер мен тегтерді импорттау\";\n\"prefs_import_title\" = \"Импорттау\";\n\"prefs_megabytes_int\" = \"%1$d Mб\";\n\"prefs_new_background_title\" = \"Жаңа фон\";\n\"prefs_night_mode_background_brightness_summary\" = \"Түнгі режим белсенді болған кездегі беттің жарықтығы\";\n\"prefs_night_mode_background_brightness_title\" = \"Фондық жарықтық\";\n\"prefs_night_mode_summary\" = \"Қара фон мен ашық түсті шрифт қолданылады\";\n\"prefs_night_mode_text_brightness_summary\" = \"Түнгі режимдегі мәтін ашықтығы\";\n\"prefs_night_mode_text_brightness_title\" = \"Мәтін ашықтығы\";\n\"prefs_night_mode_title\" = \"Түнгі режим\";\n\"prefs_no_enough_space_to_move_files\" = \"Файлдарды көшіруге бос орын жетпейді\";\n\"prefs_overlay_page_info_summary\" = \"Сүре аты, бет және пара ретін көрсету\";\n\"prefs_overlay_page_info_title\" = \"Бет деректері\";\n\"prefs_page_type_summary\" = \"Оқу беттерінің түрін таңдау\";\n\"prefs_page_type_title\" = \"Бет түрі (эксперименттік)\";\n\"prefs_preview\" = \"Алдын ала қарау\";\n\"prefs_sdcard_external\" = \"Сыртқы жады (SD карта %1$d)\";\n\"prefs_sdcard_internal\" = \"Ішкі жады\";\n\"prefs_send_logs_summary\" = \"Әзірлеушіге есептен шығару журналдарын жіберу\";\n\"prefs_send_logs_title\" = \"Журналдарды жіберу\";\n\"prefs_split_page_and_translation_summary\" = \"Аудармалары бар қосарлы бет режимінде Құран беті мен аудармасы көрсетілген\";\n\"prefs_split_page_and_translation_title\" = \"Құран және қосарлы режимдегі аударма\";\n\"prefs_streaming_summary\" = \"Мүмкіндігінше ағындық аудио пайдалану\";\n\"prefs_streaming_title\" = \"Ағындық\";\n\"prefs_sura_translated_name_summary\" = \"Сура атауының аудармасын көрсету\";\n\"prefs_sura_translated_name_title\" = \"Сура аударылған атауы\";\n\"prefs_translation_text_title\" = \"Аударма мәтіні өлшемі\";\n\"prefs_translations\" = \"Аудармалар\";\n\"prefs_translations_summary\" = \"Аудармалар жүктеу және басқару\";\n\"prefs_use_arabic_summary_on\" = \"Бағдарлама араб тілінде істейді\";\n\"prefs_use_arabic_title\" = \"Арабша режим (الوضع العربي)\";\n\"prefs_use_dyslexic_font_summary\" = \"Display translations in dyslexia friendly font\";\n\"prefs_use_dyslexic_font_title\" = \"Dyslexia friendly font\";\n\"prefs_volume_key_navigation_summary\" = \"Дауыс пернелері арқылы бет аудару\";\n\"prefs_volume_key_navigation_title\" = \"Дауыс пернелерін пайдалану\";\n\"previous\" = \"Алдыңғы\";\n\"process_progress\" = \"%1$d/%2$d жүктелді\";\n\"qarilist_dismiss\" = \"Жұмыстан шығару\";\n\"qarilist_gapless\" = \"Үздіксіз\";\n\"qarilist_gapped\" = \"Үздіксіз емес\";\n\"qarilist_qaris_with_downloads\" = \"Жүктеулері бар реципитерлер\";\n\"qarilist_ready_to_play\" = \"Тыңдауға дайын\";\n\"qarilist_select_qari\" = \"Кари параметрін таңдау\";\n\"qarilist_selected\" = \"Таңдалған\";\n\"quran_ayah\" = \"%1$d-аят\";\n\"quran_ayah_details\" = \"%1$@ %2$@-аят, %3$@-пара\";\n\"quran_hizb\" = \"Хизб\";\n\"quran_juz2\" = \"Пара\";\n\"quran_nos\" = \"½\";\n\"quran_page\" = \"Бет\";\n\"quran_rob3\" = \"¼\";\n\"quran_sura\" = \"Сүре\";\n\"quran_sura_title\" = \"%1$@ сүресі\";\n\"quran_talt_arb3\" = \"¾\";\n\"quranSearchType\" = \"Сүрелер\";\n\"recent_pages\" = \"Соңғы беттер\";\n\"recite_from_here\" = \"Осы жерден айт\";\n\"remove_button\" = \"Жою\";\n\"remove_dlg_msg\" = \"%1$@ аудармасын жоюға сенімдімісіз?\";\n\"remove_dlg_title\" = \"Аударма жойылсын ба?\";\n\"repeatValues[0]\" = \"1 рет\";\n\"repeatValues[1]\" = \"2 рет\";\n\"repeatValues[2]\" = \"3 рет\";\n\"repeatValues[3]\" = \"шексіз\";\n\"scoped_storage_message\" = \"Пайдаланушы құпиялылығын арттыру үшін Android өзгерістеріне байланысты файлдарды бағдарлама каталогтарынан тыс көшіру Android құрылғысына арналған Құранның Android-тың болашақ нұсқаларында оның деректеріне қол жеткізуін тоқтатуы мүмкін. Осы жолды пайдаланғыңыз келетініне сенімдісіз бе?\";\n\"sdcard_error\" = \"SD карта табылмады. Картаны салып қайта байқап көріңіз.\";\n\"search_data\" = \"Деректерді іздеу\";\n\"search_entire_mushaf\" = \"Бүкіл мушафты іздеу\";\n\"search_full_results\" = \"Толық нәтижелер\";\n\"search_hint\" = \"Іздеу\";\n\"search_key\" = \"Сүрені табу үшін іздеу батырмасын басыңыз\";\n\"see_tafseer_of_verse\" = \"Бұл аях тафсеері аях% d (Кеңейту үшін басу) тафсеерімен қосылған.\";\n\"share_ayah\" = \"Аятпен бөлісу\";\n\"share_ayah_text\" = \"Аят мәтінімен бөлісу\";\n\"starting_page_label\" = \"Беттің басы\";\n\"stop\" = \"Тоқтату\";\n\"storage_permission_please_restart\" = \"Өзгерістер күшіне ену үшін\\\nбағдарламаны қайта қосу керек.\\\n\";\n\"storage_permission_rationale\" = \"Құран деректерін сыртқы қоймаға сақтау үшін\\\nрұқсат сұралуда. Құран бағдарламасы рұқсат берілмесе де істей береді, бірақ бағдарлама\\\nжойылғанда немесе деректер тазартылғанда жүктелген беттер, аудиолар және басқа да мәліметтер\\\nбірге жойылып кетеді. Сыртқы қоймаға сақтауға рұқсат бересіз бе?\\\n\";\n\"sura_ayah_notification_str\" = \"%1$@ сүресі, %2$d-аят\";\n\"sura_ayah_sharing_str\" = \"%1$@ сүресі: %2$d\";\n\"tag_ayah\" = \"Аятты белгілеу\";\n\"tag_blank_tag_error\" = \"Тег атаулары бос бола алмайды!\";\n\"tag_bookmark\" = \"Бетбелгіні белгілеу\";\n\"tag_dlg_title\" = \"Белгі\";\n\"tag_duplicate_tag_error\" = \"Тег атауы бұрыннан бар!\";\n\"tag_name\" = \"Аты\";\n\"timing_database\" = \"Керекті файлдар\";\n\"to\" = \"Соңы\";\n\"translation_ayah\" = \"Аят аудармасы/тәпсірі\";\n\"translation_dialog_later\" = \"Кейін\";\n\"translation_dialog_yes\" = \"Иә\";\n\"translation_updates_available\" = \"Жаңа аудармалар пайда болды. Қазір тексеру керек пе?\";\n\"undo\" = \"Болдырмау\";\n\"update_available\" = \"Жаңа файлдар пайда болды\";\n\"warning\" = \"Назар аударыңыз\";\n"
  },
  {
    "path": "Core/Localization/Resources/kk.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>audio_manager_files_downloaded</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_files_downloaded@</string>\n            <key>audio_manager_files_downloaded</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>1 сүре жазылды</string>\n                <key>other</key>\n                <string>%1$d сүре жазылды</string>\n            </dict>\n        </dict>\n        <key>bookmark_tag_deleted</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@bookmark_tag_deleted@</string>\n            <key>bookmark_tag_deleted</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>1 элемент өшірілді</string>\n                <key>other</key>\n                <string>%d элемент өшірілді</string>\n            </dict>\n        </dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>\\&quot;%1$d\\&quot; бойынша 1 нәтиже:</string>\n                <key>other</key>\n                <string>\\&quot;%1$d\\&quot; бойынша %2$d нәтиже:</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>1 аят</string>\n                <key>other</key>\n                <string>%d аят</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/kk.lproj/Localizable.strings",
    "content": "\n\n// MARK: - General\n\n// Metadata: Translated by ChatGPT; human review required.\n\"button.done\" = \"Аяқталды\";\n// Metadata: Translated by ChatGPT; human review required.\n\"button.delete\" = \"Жою\";\n\n// MARK: - Errors\n\n\"error.dialog.title\" = \"Қате\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.connection_lost\" = \"Интернет байланысы үзілді. Тұрақты байланыс қолжетімді орынға жылжыңыз немесе байланыс тұрақты болғанша күтіңіз.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.international_roaming_off\" = \"Халықаралық роумингке рұқсат етілмеген. Халықаралық роуминг параметрлерін өзгертіңіз немесе Wi-Fi қосыңыз.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.not_connected_to_internet\" = \"Интернетке қосылмаған. Wi-Fi қосыңыз немесе ұялы деректер байланысын рұқсат етіңіз.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.general\" = \"Кешіріңіз! Бірдеңе дұрыс болмады. Қайталап көріңіз.\";\n\"error.message.no_disk_space\" = \"Жүктеулерді сақтау үшін бос жад орны жоқ.\";\n\n// MARK: - Quran\n\n\"ayah\" = \"Аят\";\n\"surah\" = \"Сүре\";\n// Metadata: Translated by AI; human review required.\n\"quran_alquran\" = \"Құран\";\n\n// MARK: - Translation\n\n\"translation.text-type.translation\" = \"Аударма\";\n\"translation.text-type.transliteration\" = \"Транслитерация\";\n\"translation.selectedTranslations\" = \"Таңдалған\";\n\"translation.translator\" = \"Аудармашы: \";\n\"translation.text.see-referenced-verse\" = \"%d аятты көріңіз.\";\n\"translation.text.read-more\" = \"Көбірек оқу\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-retrieval\" = \"Кешіріңіз! Бірдеңе дұрыс болмады. Аударманы қайтара алмадық.\";\n\"error.translation.text-not-available\" = \"Бұл аят үшін аударма жоқ.\";\n\n// MARK: - Search\n\n// Metadata: Translated by ChatGPT; human review required.\n\"search.recents.title\" = \"Соңғы іздеулер\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.popular.title\" = \"Іздеуді мынамен байқап көріңіз\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.placeholder.text\" = \"Сүре, аят, аударма, тәпсір және нөмірлер\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.result.count\" = \"%@ (%d)\";\n\n// MARK: - Settings\n\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.write_review\" = \"App Store-да пікір жазыңыз...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.contact_us\" = \"Бізбен хабарласыңыз\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.donate\" = \"Қайырымдылық жасау\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.share_app\" = \"Бағдарламаны бөлісіңіз...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.app_version\" = \"Бағдарламаның нұсқасы\";\n\n// MARK: - Quran Menu\n\n\"menu.arabic\" = \"Арабша\";\n\"menu.translation\" = \"Аударма/Тәпсір\";\n\"menu.select_translation\" = \"Аудармаларды/Тәпсірді таңдау\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer\" = \"Сөз аудармасының көрсеткіші\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer.select_translation\" = \"Көрсеткішті көрсету\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.fontSizeLetter\" = \"A\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translationFontSize\" = \"Аударма өлшемі\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabicFontSize\" = \"Құран өлшемі\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.twoPages\" = \"2 бет жанасып (альбомдық бетте)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.verticalScrolling\" = \"Тік жылжыту\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.theme_settings\" = \"Тақырыптар мен параметрлер\";\n\n// MARK: - Theme\n\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.light\" = \"Жарық\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.dark\" = \"Қараңғы\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto\" = \"Автоматты\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto.message\" = \"Құран қосымшасы iPhone-ның көрініс параметрлеріне сәйкес келеді\";\n\n// MARK: - Tabs\n\n// Metadata: Translated by ChatGPT; human review required.\n\"tab.notes\" = \"Жазбалар\";\n\n// MARK: - Update\n\n// Metadata: Translated by ChatGPT; human review required.\n\"update.filesystem.title\" = \"Дерекқорларды жаңарту...\";\n\"downloading_title\" = \"Жүктеу…\";\n\n// MARK: - Reciters\n\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.title\" = \"Тыңдау үшін қариды таңдаңыз\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.recent\" = \"Жуырда\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.downloaded\" = \"Жүктелген\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.all\" = \"Барлығы\";\n\n// MARK: - Audio\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.action.modify\" = \"Өзгерту\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.message\" = \"%@-дан %@-ға дейінгі аудио ойнатылуда\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.downloading.message\" = \"%@-дан %@-ға дейінгі аудио жүктелуде\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing-verses.label\" = \"Аяттарды ойнату\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.adjust-end-verse-to-the-end.label\" = \"Соңғы аятты соңына дейін реттеңіз\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-start-verse\" = \"Бастапқы аятты таңдаңыз\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-end-verse\" = \"Соңғы аятты таңдаңыз\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount\" = \"Жүктеу/Ойнату дейін\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount.description\" = \"Аудио ойнатқанда соңына дейін ойнатылады\";\n\n// MARK: - Bookmarks\n\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.title\" = \"Бетбелгілерді қосу...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.text\" = \"Құранды оқыған кезде, ағымдағы бетті белгілеу үшін бетбелгі түймесін басыңыз.\";\n\n// MARK: - Notes\n\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.title\" = \"Аяттың ерекше түсірілімдерін қосу...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.text\" = \"Аятқа басып ұстаңыз. Бірнеше аятты қосу үшін таңдауды кеңейте аласыз, содан кейін бетбелгі түймесін басыңыз.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.verses-count\" = \"(+%d аяттар)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.title\" = \"Ерекшеленгенді жою\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.body\" = \"Тиісті ескертпе де жойылады.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.title\" = \"iCloud синхрондауы\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.body\" = \"Бағдарлама сіздің құрылғыларыңызда бетбелгілер мен жазбаларды синхрондау үшін iCloud қолданады. Сіз оны құрылғыңыздың iCloud параметрлерінен өшіре аласыз.\";\n\n// MARK: - Ayah Menu\n\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.copy\" = \"Көшіру\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.share\" = \"Бөлісу...\";\n\"ayah.menu.play-end-juz\" = \"Пара соңына дейін\";\n\"ayah.menu.play-end-surah\" = \"Сүре соңына дейін\";\n\"ayah.menu.play-end-page\" = \"Бет соңына дейін\";\n// Metadata: Translated by AI; human review required.\n\"ayah.menu.play-end-quran\" = \"Құран соңына дейін\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.repeat\" = \"қайталаңыз\";\n\"ayah.menu.selected-verse\" = \"таңдалған аят\";\n\"ayah.menu.selected-verses\" = \"таңдалған аяттар\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight\" = \"Бөлектеу\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight-select-color\" = \"түс таңдау\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.add-note\" = \"Ескертпе қосу\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.edit-note\" = \"Ескертпені өңдеу\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-note\" = \"Ескертпені жою\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-highlight\" = \"Бөлектеуді жою\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.short\" = \"Таңдау\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.long\" = \"Ағымдағы Мусхаф ретінде орнату\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.title\" = \"Мусхафты таңдау\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selection-description\" = \"Көбірек ақпарат алу үшін Мусхафқа түртіңіз.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.hafs\" = \"Хафс Мусхафы\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.pages.604\" = \"604 бет\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.lines.15\" = \"15 жолдық бет\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.supported\" = \"Сөзбе-сөз аударма\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.not-supported\" = \"Сөзбе-сөз аудармасы жоқ\";\n\n// Hafs 1405\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.title\" = \"Хафс, классикалық Медина, 1405 АХ\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.description\" = \"Мединада 1405 Хижриде шығарылған классикалық Хафс Мусхафы. Бұл қосымша ұзақ уақыт бұл нұсқаны ұсынды.\\nКороль Фахд Құран баспа кешенінен.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.issue\" = \"1405 Хижри жылы шығарылған\";\n\n// Hafs 1421\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.title\" = \"Хафс, Медина, 1421 АХ\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.description\" = \"Мединада 1421 Хижриде шығарылған Хафс Мусхафы. Король Фахд Құран баспа кешенінен.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.issue\" = \"1421 Хижри жылы шығарылған\";\n\n// Hafs 1440\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.title\" = \"Хафс, Медина, 1440 АХ\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.description\" = \"Мединада 1440 Хижриде шығарылған Хафс Мусхафы. Король Фахд Құран баспа кешенінен.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.issue\" = \"1440 Хижри жылы шығарылған\";\n\n// Hafs Tajweed\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.title\" = \"Хафс, Тажвид\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.description\" = \"Тажвид Хафс Мусхафы. Аль-Құран Аль-Карим - Дар аль-Марефа басылымы.\";\n\n// MARK: - Diagnostics\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.title\" = \"Диагностика\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.details\" = \"Бұл параметрлер қосымша әзірлеуші тарапынан арнайы диагностикалау және қателерді түзету мақсатында қолданылады.\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.share_app_logs\" = \"Қосымша журналдарын бөлісу\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs\" = \"Қателерді түзету журналын қосу\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs.details\" = \"Бұл параметр қосымшаны келесі қайта іске қосқанда іске асады.\";\n\n\n// MARK: - What's new\n\n// Metadata: Translated by ChatGPT; human review required.\n\"new.title\" = \"Жаңалықтар\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.action\" = \"Жалғастыру\";\n\n// Mushafs\n\"new.mushafs\" = \"Жаңа Мусхафтар:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs.details\" = \"Аллаһ Газадағы бауырларымыздың және қарындастарымыздың зұлымдығын жеңілдетсін.\\n\\n* Тажвид Хафс Мусхафы: Аль-Құран Аль-Карим - Дар аль-Марефа басылымы.\\n* Медина Мусхафы 1421 хижри.\\n* Медина Мусхафы 1440 хижри.\\n* Сондай-ақ, 1405 хижридегі классикалық нұсқаны әрі қарай ләззат алыңыз.\";\n\n// Reciters\n\"new.reciters\" = \"Жаңа қарилар:\";\n\n// Miscellaneous\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous\" = \"Әртүрлі:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous.details\" = \"* Қосымшаның жаңартылған көрінісі.\\n* Іздеу қызметі жақсартылды (жаңа алгоритм жақында шығады).\\n* Вьетнам тіліндегі локализация қолдауы.\\n* Қайталау ойнатылмайтын кезде кеңейтілген аудио параметрлеріне қолжетімділік.\\n* Қосымша қазір ашық кодты: https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades\" = \"Дыбыс:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades.details\" = \"* Қайта оқу жылдамдығын 0.5x, 0.75x, 1x, 1.25x, 1.5x деңгейінде реттеңіз - @adnan29979-ға рахмет.\\n* Ойнату сүйікті жылдамдығыңызды есте сақтайды - @adnan29979-ға рахмет.\";\n\n// Personalization\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization\" = \"Оқу тақырыптары:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization.details\" = \"* Бірнеше тақырыпты қолдау. Құранның бір бетін ашыңыз -> жоғарғы оң мәзір -> Тақырыптар және баптаулар.\\n* Алдыңғы стильге оралғыңыз келсе, 'Original' параметрін пайдаланыңыз.\";\n\n// Library & Navigation\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation\" = \"Кітапхана және навигация:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation.details\" = \"* Үй бетінде сүрелер мен жүздерді сұрыптап, сүре нөмірлерін көрсетіңіз, сонда қажет нәрсеге тезірек жете аласыз - @yismailuofa-ға рахмет.\";\n"
  },
  {
    "path": "Core/Localization/Resources/kk.lproj/Readers.strings",
    "content": "\"qari_abdulaziz_zahrani_gapless\" = \"Abdulaziz Az-Zahrani\";\n\"qari_abdulbaset\" = \"Әбдүлбәсит Әбдусамад (үзілген)\";\n\"qari_abdulbaset_gapless\" = \"Әбдүлбәсит Әбдусамад\";\n\"qari_abdulbaset_mujawwad\" = \"Әбдүлбәсит Әбдусамад (тәжуид)\";\n\"qari_abdulbaset_mujawwad_gapless\" = \"Әбдүлбәсит Әбдусамад (тәжуид)\";\n\"qari_abdulhadi_kanakeri_gapless\" = \"АбдулХади Канакери\";\n\"qari_abdullah_matroud_gapless\" = \"Абдулла Матуд\";\n\"qari_abdulmuhsin_qasim_gapless\" = \"Абдул Мохсен Қасым\";\n\"qari_abdulrahman_alshahat_gapless\" = \"Abdulrahman Al-Shahat\";\n\"qari_abdurrashid_sufi_gapless\" = \"Abdur-Rashid Sufi\";\n\"qari_afasy\" = \"Мишәри Әфаси (үзілген)\";\n\"qari_afasy_cali_gapless\" = \"Мишари Афаси (Калифорния)\";\n\"qari_afasy_gapless\" = \"Мишәри Әфаси\";\n\"qari_ahmad_nauina_gapless\" = \"Ахмед Науина\";\n\"qari_ahmed_al_nufais_gapless\" = \"Ахмед Ал-Нуфайс\";\n\"qari_ajamy_gapless\" = \"Ахмед ибн Әли әл-Аджами\";\n\"qari_akram_al_alaqmi\" = \"Әкрам Ғалақми\";\n\"qari_ali_hajjaj_alsouasi_gapless\" = \"Әли Хажаж Суайси\";\n\"qari_ali_jaber_gapless\" = \"Али Джабер\";\n\"qari_alijon_qari_gapless\" = \"Әлижон Қари\";\n\"qari_aloosi_gapless\" = \"Абдул Рахман Аль-Авси\";\n\"qari_alzain_ahmad_gapless\" = \"Альзаин Мохаммед Ахмед\";\n\"qari_ayman_suwaid_gapless\" = \"Ayman Suwaid\";\n\"qari_ayman_suwaid_gapped\" = \"Ayman Suwaid (үзілген)\";\n\"qari_ayyoub\" = \"Мұхаммед Әйюб (үзілген)\";\n\"qari_ayyoub_gapless\" = \"Мұхаммед Әйюб\";\n\"qari_aziz_alili_gapless\" = \"Әзиз Әлили\";\n\"qari_badr_al_turki_gapless\" = \"Бадр Ал-Турки\";\n\"qari_bandar_baleela_gapless\" = \"Bandar Baleela\";\n\"qari_basfar\" = \"Абдуллах Басфар (үзілген)\";\n\"qari_basfar_gapless\" = \"Абдуллах Басфар\";\n\"qari_dussary\" = \"Ясир Дусари (үзілген)\";\n\"qari_fares_abbad_gapless\" = \"Фарес Аббад\";\n\"qari_farman_shawani_gapless\" = \"Фарман Шавани\";\n\"qari_hady_toure_gapless\" = \"Hady Toure\";\n\"qari_hani_rifai\" = \"Һәни Рифаи (үзілген)\";\n\"qari_hani_rifai_gapless\" = \"Һәни Рифаи\";\n\"qari_hudhayfi\" = \"Әли Хұзайфи (үзілген)\";\n\"qari_hudhayfi_gapless\" = \"Әли Хұзайфи\";\n\"qari_husary_gapless\" = \"Махмұд Һәлил Хусари\";\n\"qari_husary_iza3a_gapless\" = \"Husary Broadcast\";\n\"qari_husary_muallim_gapless\" = \"Гусари (мұғалім)\";\n\"qari_husary_mujawwad\" = \"Махмұд Һәлил Хусари (тәжуид)\";\n\"qari_husary_mujawwad_gapless\" = \"Махмұд Һәлил Хусари (тәжуид)\";\n\"qari_ibrahim_alakhdar_gapless\" = \"Ибрахим әл-Ахдар\";\n\"qari_idrees_abkar_gapless\" = \"Идрис Абкар\";\n\"qari_jibreel\" = \"Мұхаммед Жибрил (үзілген)\";\n\"qari_jibreel_gapless\" = \"Мұхаммед Жибрил\";\n\"qari_juhany_gapless\" = \"Абдулла әл-Джахани\";\n\"qari_khaled_muhanna_gapless\" = \"Халед әл-Муханна\";\n\"qari_khalid_jalil_gapless\" = \"Khalid Al-Jalil\";\n\"qari_khalid_qahtani_gapless\" = \"Халид әл-Кахтани\";\n\"qari_khalifa_taniji_gapless\" = \"Халифа Тенги\";\n\"qari_luhaidan_gapless\" = \"Мұхаммед Ал-Лухайдан\";\n\"qari_mahmoud_ali_albana_gapless\" = \"Mahmoud Ali al Bana\";\n\"qari_minshawi_mujawwad\" = \"Мұхаммед Сыддық Миншәуи (тәжуид)\";\n\"qari_minshawi_mujawwad_gapless\" = \"Мұхаммед Сыддық Миншәуи\";\n\"qari_minshawi_murattal_gapless\" = \"Мұхаммед Сыддық Миншәуи\";\n\"qari_mishari_walk_gapless\" = \"Мишәри Әфаси & Ибрахим Уолк (ағылшынша)\";\n\"qari_mohammad_altablawi_gapless\" = \"Мұхаммед Таблауи\";\n\"qari_mokhtasar_asmari_gapless\" = \"Абдулла Аль-Асмари (Арабский комментарий)\";\n\"qari_mostafa_ismaeel_gapless\" = \"Mostafa Ismaeel\";\n\"qari_muaiqly\" = \"Мәһир Мұғайкли (үзілген)\";\n\"qari_muaiqly_gapless\" = \"Мәһир Мұғайкли\";\n\"qari_muaiqly_haramain_gapless\" = \"Мәһир Мұғайкли (Харамейн)\";\n\"qari_muhammad_rashad_shereef_gapless\" = \"Мухаммад Рашад Аль-Шериф\";\n\"qari_nabil_rifa3i_gapless\" = \"Nabil Ar-Rifai\";\n\"qari_noreen_siddiq_gapless\" = \"Noreen Siddiq\";\n\"qari_peshawa_qadir_al_qurdi_gapless\" = \"Пешева Қадир аль-Курди\";\n\"qari_qatami_gapless\" = \"Насыр Қатами\";\n\"qari_raad_al_kurdi_gapless\" = \"Рағад Ал-Курди\";\n\"qari_saad_al_ghamdi\" = \"Сәид Ғамиди (үзілген)\";\n\"qari_saad_al_ghamidi_gapless\" = \"Saad Al-Ghamdi\";\n\"qari_sahl_yaseen_gapless\" = \"Сәһил Йасин\";\n\"qari_salah_budair_gapless\" = \"Салах Бұдаир\";\n\"qari_salah_bukhatir_gapless\" = \"Салах Бухатир\";\n\"qari_shatri\" = \"Әбу Бәкр Шатри (үзілген)\";\n\"qari_shatri_gapless\" = \"Әбу Бәкр Шатри\";\n\"qari_shuraym\" = \"Сауд Шураим (үзілген)\";\n\"qari_shuraym_gapless\" = \"Сауд Шураим\";\n\"qari_suadis\" = \"Әбдурахман Судаис (үзілген)\";\n\"qari_sudais_gapless\" = \"Әбдурахман Судаис\";\n\"qari_tablawy\" = \"Мұхаммед Таблауи (үзілген)\";\n\"qari_tawfeeq_as_sawaigh_gapless\" = \"Tawfeeq as-Sawaigh\";\n\"qari_wadee3_alyamani_gapless\" = \"Вадих әл-Ямани\";\n\"qari_walk\" = \"Ибрахим Уолк (ағылшынша)\";\n\"qari_walk_gapless\" = \"Ибрахим Уолк (ағылшынша)\";\n\"qari_yasser_dussary_gapless\" = \"Ясир Дусари\";\n\"qari_yasser_salama_hadr_gapless\" = \"Ясир Салама (хадр)\";\n"
  },
  {
    "path": "Core/Localization/Resources/kk.lproj/Suras.strings",
    "content": "\"sura_names[0]\" = \"Фатиха\";\n\"sura_names[1]\" = \"Бақара\";\n\"sura_names[2]\" = \"Әли Имран\";\n\"sura_names[3]\" = \"Ниса\";\n\"sura_names[4]\" = \"Мәида\";\n\"sura_names[5]\" = \"Әнʼам\";\n\"sura_names[6]\" = \"Аʼраф\";\n\"sura_names[7]\" = \"Әнфал\";\n\"sura_names[8]\" = \"Тәубә\";\n\"sura_names[9]\" = \"Юнус\";\n\"sura_names[10]\" = \"Һуд\";\n\"sura_names[11]\" = \"Юсуф\";\n\"sura_names[12]\" = \"Раʼд\";\n\"sura_names[13]\" = \"Ибрахим\";\n\"sura_names[14]\" = \"Хижр\";\n\"sura_names[15]\" = \"Нахл\";\n\"sura_names[16]\" = \"Исра\";\n\"sura_names[17]\" = \"Кәһф\";\n\"sura_names[18]\" = \"Мәриәм\";\n\"sura_names[19]\" = \"Таһа\";\n\"sura_names[20]\" = \"Әнбия\";\n\"sura_names[21]\" = \"Хаж\";\n\"sura_names[22]\" = \"Муʻминун\";\n\"sura_names[23]\" = \"Нур\";\n\"sura_names[24]\" = \"Фурқан\";\n\"sura_names[25]\" = \"Шуʻара\";\n\"sura_names[26]\" = \"Нәмл\";\n\"sura_names[27]\" = \"Қасас\";\n\"sura_names[28]\" = \"ʻАнкәбут\";\n\"sura_names[29]\" = \"Рум\";\n\"sura_names[30]\" = \"Луқман\";\n\"sura_names[31]\" = \"Сәждә\";\n\"sura_names[32]\" = \"Ахзаб\";\n\"sura_names[33]\" = \"Сәбәʼ\";\n\"sura_names[34]\" = \"Фатыр\";\n\"sura_names[35]\" = \"Йасин\";\n\"sura_names[36]\" = \"Саффат\";\n\"sura_names[37]\" = \"Сад\";\n\"sura_names[38]\" = \"Зумәр\";\n\"sura_names[39]\" = \"Муʻмин\";\n\"sura_names[40]\" = \"Фуссиләт\";\n\"sura_names[41]\" = \"Шура\";\n\"sura_names[42]\" = \"Зухруф\";\n\"sura_names[43]\" = \"Духан\";\n\"sura_names[44]\" = \"Жәсия\";\n\"sura_names[45]\" = \"Ахқаф\";\n\"sura_names[46]\" = \"Мухаммәд\";\n\"sura_names[47]\" = \"Фәтих\";\n\"sura_names[48]\" = \"Хужурат\";\n\"sura_names[49]\" = \"Қаф\";\n\"sura_names[50]\" = \"Зарият\";\n\"sura_names[51]\" = \"Тур\";\n\"sura_names[52]\" = \"Нәжм\";\n\"sura_names[53]\" = \"Қамар\";\n\"sura_names[54]\" = \"Рахман\";\n\"sura_names[55]\" = \"Уақиʼа\";\n\"sura_names[56]\" = \"Хадид\";\n\"sura_names[57]\" = \"Мужәдәлә\";\n\"sura_names[58]\" = \"Хашр\";\n\"sura_names[59]\" = \"Мумтәхинә\";\n\"sura_names[60]\" = \"Сафф\";\n\"sura_names[61]\" = \"Жумʼа\";\n\"sura_names[62]\" = \"Мунафиқун\";\n\"sura_names[63]\" = \"Тәғабун\";\n\"sura_names[64]\" = \"Таләқ\";\n\"sura_names[65]\" = \"Тахрим\";\n\"sura_names[66]\" = \"Мүлк\";\n\"sura_names[67]\" = \"Қалам\";\n\"sura_names[68]\" = \"Хаққа\";\n\"sura_names[69]\" = \"Мәʼариж\";\n\"sura_names[70]\" = \"Нух\";\n\"sura_names[71]\" = \"Жин\";\n\"sura_names[72]\" = \"Муззәмил\";\n\"sura_names[73]\" = \"Муддәссир\";\n\"sura_names[74]\" = \"Қиямә\";\n\"sura_names[75]\" = \"Инсан\";\n\"sura_names[76]\" = \"Мурсәләт\";\n\"sura_names[77]\" = \"Нәбәʼ\";\n\"sura_names[78]\" = \"Назиʼат\";\n\"sura_names[79]\" = \"ʼАбәсә\";\n\"sura_names[80]\" = \"Тәкуир\";\n\"sura_names[81]\" = \"Инфитар\";\n\"sura_names[82]\" = \"Мутаффифин\";\n\"sura_names[83]\" = \"Иншиқақ\";\n\"sura_names[84]\" = \"Буруж\";\n\"sura_names[85]\" = \"Тариқ\";\n\"sura_names[86]\" = \"Аʼлә\";\n\"sura_names[87]\" = \"Ғашия\";\n\"sura_names[88]\" = \"Фәжр\";\n\"sura_names[89]\" = \"Бәләд\";\n\"sura_names[90]\" = \"Шәмс\";\n\"sura_names[91]\" = \"Ләил\";\n\"sura_names[92]\" = \"Духа\";\n\"sura_names[93]\" = \"Инширах\";\n\"sura_names[94]\" = \"Тин\";\n\"sura_names[95]\" = \"ʼАләқ\";\n\"sura_names[96]\" = \"Қадр\";\n\"sura_names[97]\" = \"Бәйинә\";\n\"sura_names[98]\" = \"Зилзал\";\n\"sura_names[99]\" = \"ʼАдият\";\n\"sura_names[100]\" = \"Қариʼа\";\n\"sura_names[101]\" = \"Тәкәсур\";\n\"sura_names[102]\" = \"ʼАср\";\n\"sura_names[103]\" = \"Һумәзә\";\n\"sura_names[104]\" = \"Фил\";\n\"sura_names[105]\" = \"Қурәиш\";\n\"sura_names[106]\" = \"Мәʼун\";\n\"sura_names[107]\" = \"Кәусәр\";\n\"sura_names[108]\" = \"Кафирун\";\n\"sura_names[109]\" = \"Наср\";\n\"sura_names[110]\" = \"Тәббәт\";\n\"sura_names[111]\" = \"Ихлас\";\n\"sura_names[112]\" = \"Фәләқ\";\n\"sura_names[113]\" = \"Нас\";\n"
  },
  {
    "path": "Core/Localization/Resources/ms.lproj/Android.strings",
    "content": "\"about_contributors\" = \"Senarai Penyumbang\";\n\"about_contributors_summary\" = \"Senarai para penyumbang untuk projek aplikasi Quran for Android\";\n\"about_data_sources\" = \"Sumber data\";\n\"about_description\" = \"Quran for Android adalah aplikasi Quran percuma. Sila panjangkan doa untuk para sukarela yang telah menyumbang.\";\n\"about_furqan_summary\" = \"Teks Uthmani dan terjemahan Arab\";\n\"about_images\" = \"Gambar\";\n\"about_madani_images\" = \"Gambar Quran adalah berasaskan fon daripada King Fahd Quran Printing Complex\";\n\"about_naskh_images\" = \"Gambar-gambar Quran untuk aplikasi Naskh adalah diambil (dengan kebenaran) daripada SHL Info Systems\";\n\"about_noorhidayat_summary\" = \"Fon terjemahan Noorehira dan Mufti Taqi\";\n\"about_open_source\" = \"Projek Sumber Terbuka\";\n\"about_others\" = \"Lain-lain\";\n\"about_qaloon_images\" = \"Gambar-gambar Qaloon adalah digunakan dengan kebenaran Nous Memes Editions Et Diffusion (Tunisia)\";\n\"about_quran_enc\" = \"Ensiklopedia Alquran Alkarim\";\n\"about_quran_enc_summary\" = \"Terjemahan untuk banyak bahasa\";\n\"about_quran_ksu\" = \"Electronic Moshaf Project\";\n\"about_quran_ksu_summary\" = \"Projek King Saud University Electronic Moshaf adalah sumber terjemahan arab aplikasi ini dan beberapa bahasa lain. Ia juga adalah sumber bagi pembacaan Dr. Ayman Suwaid.\";\n\"about_quranicaudio_summary\" = \"mp3 pembacaan tanpa jurang Quran\";\n\"about_tanzil_summary\" = \"Terjemahan untuk pelbagai bahasa\";\n\"app_name\" = \"Quran\";\n\"audio_manager\" = \"Pengurus Audio\";\n\"audio_manager_delete_selection\" = \"Hapus pilihan\";\n\"audio_manager_download_all\" = \"Unduh semua\";\n\"audio_manager_download_selection\" = \"Pemilihan unduhan\";\n\"audio_manager_remove_audio_msg\" = \"Apakah Anda yakin ingin menghapus %1$@?\";\n\"audio_manager_remove_audio_title\" = \"Hapus Surat?\";\n\"audio_manager_remove_multiple_audio_msg\" = \"Apakah Anda yakin ingin menghapus?\";\n\"audio_manager_surah_delete\" = \"Hapus Surat\";\n\"audio_manager_surah_download\" = \"Unduh Surat\";\n\"audio_updated_text\" = \"Beberapa file audio Quran telah diperbarui. Quran telah menghapus salinan file-file ini sehingga versi terbaru dapat diunduh saat berikutnya Anda memutarnya kembali.\";\n\"audio_updated_title\" = \"Pembaruan file Audio Quran\";\n\"available_translations\" = \"Boleh untuk dimuat turun\";\n\"ayah_copied_popup\" = \"Ayat telah disalin\";\n\"bookmark_ayah\" = \"Penanda ayat ini\";\n\"bookmarks_list_empty\" = \"Tidak ada Penanda\";\n\"cancel\" = \"Batal\";\n\"canceling\" = \"Membatalkan…\";\n\"copy_ayah\" = \"Salin ayat\";\n\"delete_tag\" = \"Hapus Label\";\n\"delete_translation\" = \"Hapus Terjemahan\";\n\"dialog_ok\" = \"OK\";\n\"download_amount_in_megabytes\" = \"%@ MB\";\n\"download_cancel\" = \"Batal\";\n\"download_error_disk\" = \"Tidak cukup ruangan untuk memuat turun\";\n\"download_error_general\" = \"Muat turun gagal\";\n\"download_error_invalid_download\" = \"Fail dimuat turun tidak lengkap\";\n\"download_error_invalid_download_retry\" = \"Fail dimuat turun tidak lengkap, mencuba untuk muat turun semula\";\n\"download_error_network\" = \"Tidak dapat memuat turun kerana ralat jaringan\";\n\"download_error_network_retry\" = \"Ralat jaringan, mencuba semula…\";\n\"download_error_perms\" = \"Tidak dapat memuat turun kerana ralat keizinan pada peranti\";\n\"download_extra_data\" = \"Perlu memuat turun beberapa fail kecil untuk menyokong kemampuan berkongsi dan terjemahan. Muat turun sekarang?\";\n\"download_processing\" = \"Proses Muat Turun…\";\n\"download_progress\" = \"Muat turun %1$@ / %2$@\";\n\"download_retry\" = \"Cuba semula\";\n\"download_successful\" = \"Muat Turun Berjaya\";\n\"download_sura_ayah_progress\" = \"Mengunduh surat %1$d ayat %2$d\";\n\"download_sura_progress\" = \"Telah mengunduh %1$@ / %2$@ dari surat %3$d\";\n\"downloaded_translations\" = \"Telah dimuat turun\";\n\"downloadImportantPrompt\" = \"Terdapat kemas kini penting untuk halaman Quran peranti anda. Apakah anda ingin memuat turun sekarang?\";\n\"downloading_message\" = \"Sila tunggu fail dimuat turun. (Boleh menyambung semula)\";\n\"downloadPrompt\" = \"Untuk prestasi yang optimal, beberapa fail perlu dimuat turun. Jika anda memilih untuk tidak melakukannya sekarang, setiap halaman yang dibuka nanti akan mengambil lebih masa. Apakah anda ingin memuat turun fail yang diperlukan sekarang?\";\n\"downloadPrompt_no\" = \"Tidak\";\n\"downloadPrompt_ok\" = \"Ya\";\n\"downloadPrompt_title\" = \"Muat turun fail yang diperlukan?\";\n\"downloadTabletPrompt\" = \"Kami baru saja meningkatkan kualiti halaman untuk tablet. Apakah anda ingin memuat turun sekarang?\";\n\"edit_tag\" = \"Sunting Label\";\n\"email_us\" = \"Jika soalan anda tidak terjawab di atas, anda boleh cuba untuk menghantar email kepada quranandroid@gmail.com untuk sokongan. Sila maklum bahawa kami menerima banyak email dan mungkin tidak mampu menjawab kesemuanya.\";\n\"error_getting_translation_list\" = \"Tidak dapat memuat turun daftar terjemahan. Sila cuba lagi nanti.\";\n\"export_data_error\" = \"Kesalahan dalam mengekspor data.\";\n\"exported_data\" = \"Data diekspor ke %1$@.\";\n\"extracting_title\" = \"Sedang Proses…\";\n\"found_in_sura\" = \"Dijumpai dalam Surah (%1$d) %2$@: %3$d (Halaman %4$d)\";\n\"from\" = \"Dari\";\n\"get_arabic_search_db\" = \"Dapatkan Database Pencarian Arab\";\n\"get_translations\" = \"Muat Turun Terjemahan\";\n\"gotoPage\" = \"Ke halaman\";\n\"help\" = \"\\\n<b>Bagaimana cara memainkan audio tilawah?</b>\\\n<br/>Buka Quran pada halaman yang anda inginkan. Tekan pada skrin. Di bahagian bawah, anda akan lihat butang play dan beberapa teks dengan nama qari. Klik nama qari untuk mengganti pilihan qari. Klik butang play untuk memuat turun dan/atau memainkan audio dari halaman yang terpapar.\\\n<br/>\\\n<br/><b>Bagaimana cara memaparkan terjemahan?</b>\\\n<br/>Buka Quran pada halaman yang anda inginkan. Tekan pada layar. Di bahagian atas, tekan pada ikon dunia. Atau, jika tiada, anda mungkin melihat ikon dengan tiga titik. Tekan ikon tersebut dan pilih terjemahan).\\\n<br/>Jika anda tidak memiliki set data terjemahan yang diperlukan, anda akan diminta untuk memuat turun fail terjemahan yang diperlukan. Pilih dan muat turun terjemahan, kemudian kembali ke halaman ulangi proses di atas untuk melihat terjemahan.\\\n<br/>\\\n<br/><b>Bagaimana cara menanda halaman?</b>\\\n<br/>Buka Quran pada halaman yang anda inginkan. Tekan pada layar. Di bahagian kanan atas, anda akan melihat ikon bintang. Tekan ikon bintang untuk menandanya (akan berwarna putih sepenuhnya). Tekan ikon bintang sekali lagi untuk membuang penanda.\\\n<br/>\\\n<br/><b>Bagaimana cara membesarkan teks?</b>\\\n<br/>Pada mod halaman arab (paparan mushaf), pegang peranti anda dalam posisi melintang (landscape). Ini akan membuat teks lebih besar (bergantung pada tetapan). Pada mod terjemahan, masuk ke tetapan dan pilih saiz teks terjemahan.\\\n<br/>\\\n<br/><b>Bagaimana cara berkongsi ayat? </b>\\\n<br/>Pada mod halaman arab, tekan dan tahan pada ayat yang diinginkan, sebuah menu akan terpapar dimana anda boleh memilih untuk menanda, berkongsi, lihat terjemahan atau menyalin ayat.\\\n<br/>\\\n<br/><b>Font Malayalam/Tamil/Bangla/Urdu tidak berfungsi! </b>\\\n<br/>Android sebelum versi 4.0 memang tidak menyokong font tersebut.\\\n\";\n\"help_title\" = \"Soalan yang sering ditanya (FAQ)\";\n\"highlighting_database\" = \"Fail yang Diperlukan\";\n\"import_data\" = \"Impor Data\";\n\"import_data_and_override\" = \"Jika anda mengimpor berkas ini, ia akan menggantikan semua \\\\\npenanda anda dengan %1$d penanda dan %2$d label. Impor?\";\n\"import_data_error\" = \"Berkas cadangan tidak sah (atau tak bisa membaca berkas cadangan).\";\n\"import_data_permissions_error\" = \"Tidak bisa membaca berkas cadangan karena masalah otentikasi.\";\n\"import_successful\" = \"Impor Berhasil\";\n\"juz2_description\" = \"Juz\\' %1$@\";\n\"kitkat_external_message\" = \"Karena batasan pada Android, jika anda memilih untuk menempatkan data Quran         pada kartu SD eksternal dan kemudian hari membuang atau menghapus data Quran Android, semua halaman dan audio Quran         Android akan dihapus dan anda harus mengunduh mereka lagi. Anda yakin ingin menggunakan         kartu SD eksternal?\";\n\"loading\" = \"Memuat…\";\n\"madani\" = \"Madaniyah\";\n\"makki\" = \"Makkiyah\";\n\"menu_about\" = \"Tentang Kami\";\n\"menu_back_to_page\" = \"Tunjukkan Mushaf\";\n\"menu_bookmarks\" = \"Penanda\";\n\"menu_bookmarks_ayah\" = \"Penanda Ayat\";\n\"menu_bookmarks_page\" = \"Penanda Halaman\";\n\"menu_get_translations\" = \"Dapatkan Terjemahan\";\n\"menu_help\" = \"Bantuan\";\n\"menu_jump\" = \"Capaian cepat\";\n\"menu_jump_last_page\" = \"Halaman terakhir\";\n\"menu_other_apps\" = \"Aplikasi lain\";\n\"menu_search\" = \"Cari\";\n\"menu_settings\" = \"Tetapan\";\n\"menu_show_date\" = \"Tampilkan Tanggal\";\n\"menu_sort\" = \"Susunan\";\n\"menu_sort_date\" = \"Tarikh Dibuat\";\n\"menu_sort_group_by_tags\" = \"Kelompokkan berdasar Label\";\n\"menu_sort_location\" = \"Lokasi dalam Quran\";\n\"menu_translation\" = \"Tunjukkan Terjemahan\";\n\"more_translations\" = \"Terjemahan Lainnya\";\n\"move_down\" = \"Bergerak Ke Bawah\";\n\"move_up\" = \"Bergerak Ke Atas\";\n\"need_translation\" = \"Anda belum memuat turun fail terjemahan/tafsir.\";\n\"new_tag\" = \"Label Baru\";\n\"next\" = \"Seterus\";\n\"no_arabic_search_available\" = \"Anda belum memuat turun paket pencarian Arab. Sila muat turun dan ulangi pencarian\";\n\"no_results\" = \"Tidak dijumpai \\\"%@\\\"\";\n\"not_tagged\" = \"Penanda tanpa Label\";\n\"notification_channel_audio\" = \"Pembacaan Quran\";\n\"notification_channel_download\" = \"Muat turun Quran\";\n\"notification_download_canceled\" = \"Muat turun dibatalkan\";\n\"page_description\" = \"Halaman %1$@, Juz\\' %2$@\";\n\"pause\" = \"Pause\";\n\"play\" = \"Mainkan\";\n\"play_apply\" = \"Tetapkan\";\n\"play_apply_and_play\" = \"Tetapkan dan main\";\n\"play_each_verse\" = \"Mainkan setiap ayat:\";\n\"play_from_here\" = \"Mainkan tilawah dari sini\";\n\"play_restrict_range\" = \"Hanya mainkan ayat di atas\";\n\"play_verses_range\" = \"Mainkan set ayat:\";\n\"playback_prompt_title\" = \"Main semula dari:\";\n\"playback_speed\" = \"درجة سرعة التشغيل:\";\n\"please_grant_permissions\" = \"Harap berikan izin dalam setelan aplikasi.\";\n\"please_wait\" = \"Harap tunggu...\";\n\"prefs_app_location_summary\" = \"Pilih lokasi untuk menyimpan fail\";\n\"prefs_app_location_title\" = \"Lokasi aplikasi\";\n\"prefs_app_size\" = \"Saiz aplikasi\";\n\"prefs_audio_manager_summary\" = \"Urus dan muat turun audio Quran\";\n\"prefs_ayah_before_translation_summary\" = \"Papar ayat (dalam bahasa Arab) di atas terjemahan\";\n\"prefs_ayah_before_translation_title\" = \"Papar ayat sebelum terjemahan\";\n\"prefs_calculating_app_size\" = \"Mengira saiz aplikasi\";\n\"prefs_category_advanced\" = \"Pilihan lanjutan\";\n\"prefs_category_advanced_summary\" = \"Import/export penanda, tetapkan direktori data Quran, dll.\";\n\"prefs_category_display_settings\" = \"Tetapan Paparan\";\n\"prefs_category_download\" = \"Pilihan Muat Turun\";\n\"prefs_category_dual_screen\" = \"Preferensi Halaman Ganda\";\n\"prefs_category_reading\" = \"Keutamaan Bacaan\";\n\"prefs_category_translation\" = \"Keutamaan Terjemahan\";\n\"prefs_copying_app_files\" = \"Menyalin fail aplikasi\";\n\"prefs_display_marker_summary\" = \"Paparkan popup ketika mencapai pergantian juz\\', hizb, dll\";\n\"prefs_display_marker_title\" = \"Paparkan popup penanda\";\n\"prefs_download_amount_summary\" = \"Paket fail setiap muat turun untuk audio berjurang.\";\n\"prefs_download_amount_title\" = \"Paket Muat Turun\";\n\"prefs_dual_page_mode_disabled\" = \"Dalam mod landscape, hanya paparkan satu halaman.\";\n\"prefs_dual_page_mode_enabled\" = \"Dalam mod landscape, dua halaman akan muncul bersebelahan.\";\n\"prefs_dual_page_mode_title\" = \"Mod Tablet\";\n\"prefs_err_moving_app_files\" = \"Gagal memindahkan fail aplikasi\";\n\"prefs_export_summary\" = \"Export salinan penanda dan tag\";\n\"prefs_export_title\" = \"Export\";\n\"prefs_highlight_bookmarks_summary\" = \"Papar penanda ketika membaca\";\n\"prefs_highlight_bookmarks_title\" = \"Papar penanda\";\n\"prefs_import_summary\" = \"Import penanda dan tag\";\n\"prefs_import_title\" = \"Import\";\n\"prefs_megabytes_int\" = \"%1$d MB\";\n\"prefs_new_background_title\" = \"Latar beakang baru\";\n\"prefs_night_mode_background_brightness_summary\" = \"Kecerahan halaman apabila mod malam aktif\";\n\"prefs_night_mode_background_brightness_title\" = \"Kecerahan latar belakang\";\n\"prefs_night_mode_summary\" = \"Menggunakan latar belakang gelap dan teks terang\";\n\"prefs_night_mode_text_brightness_summary\" = \"Kecerahan teks ketika mod malam aktif\";\n\"prefs_night_mode_text_brightness_title\" = \"Kecerahan teks\";\n\"prefs_night_mode_title\" = \"Mod malam\";\n\"prefs_no_enough_space_to_move_files\" = \"Tidak cukup ruang untuk memindahkan fail aplikasi\";\n\"prefs_overlay_page_info_summary\" = \"Nombor halaman, nama surah dan nomor juz\\' akan dipaparkan\";\n\"prefs_overlay_page_info_title\" = \"Papar maklumat halaman\";\n\"prefs_page_type_summary\" = \"Pilih jenis mukasurat bacaan\";\n\"prefs_page_type_title\" = \"Jenis mukasurat (dalam cubaan)\";\n\"prefs_preview\" = \"Pratayang\";\n\"prefs_sdcard_external\" = \"SD Card Luar %1$d\";\n\"prefs_sdcard_internal\" = \"Simpanan Dalaman\";\n\"prefs_send_logs_summary\" = \"Hantar log untuk membantu pemaju aplikasi\";\n\"prefs_send_logs_title\" = \"Hantar log\";\n\"prefs_split_page_and_translation_summary\" = \"Dalam mode halaman ganda dengan terjemahan, halaman Quran dan terjemahan ditampilkan\";\n\"prefs_split_page_and_translation_title\" = \"Al-Quran dan terjemahan dalam mode ganda\";\n\"prefs_streaming_summary\" = \"Stream audio apabila boleh\";\n\"prefs_streaming_title\" = \"Streaming\";\n\"prefs_sura_translated_name_summary\" = \"Menunjukkan terjemahan nama surat\";\n\"prefs_sura_translated_name_title\" = \"Surat nama yang diterjemahkan\";\n\"prefs_translation_text_title\" = \"Saiz teks terjemahan\";\n\"prefs_translations\" = \"Terjemahan\";\n\"prefs_translations_summary\" = \"Muat turun dan penetapan terjemahan\";\n\"prefs_use_arabic_summary_on\" = \"Aplikasi keseluruhan akan menggunakan tulisan dan bahasa Arab\";\n\"prefs_use_arabic_title\" = \"Mod Aplikasi Arab (الوضع العربي)\";\n\"prefs_use_dyslexic_font_summary\" = \"Display translations in dyslexia friendly font\";\n\"prefs_use_dyslexic_font_title\" = \"Dyslexia friendly font\";\n\"prefs_volume_key_navigation_summary\" = \"Berpindah halaman dengan menggunakan butang volume\";\n\"prefs_volume_key_navigation_title\" = \"Navigasi butang volume\";\n\"previous\" = \"Sebelum\";\n\"process_progress\" = \"Memproses fail %1$d / %2$d\";\n\"qarilist_dismiss\" = \"Memecat\";\n\"qarilist_gapless\" = \"Berterusan\";\n\"qarilist_gapped\" = \"Tidak Berterusan\";\n\"qarilist_qaris_with_downloads\" = \"Qari dengan Muat Turun\";\n\"qarilist_ready_to_play\" = \"Sedia untuk mendengar\";\n\"qarilist_select_qari\" = \"Pilih Qari\";\n\"qarilist_selected\" = \"Dipilih\";\n\"quran_ayah\" = \"Ayat %1$d\";\n\"quran_ayah_details\" = \"%1$@ - Ayat %2$@, Juz\\' %3$@\";\n\"quran_hizb\" = \"Hizb\";\n\"quran_juz2\" = \"Juz\\'\";\n\"quran_nos\" = \"½\";\n\"quran_page\" = \"Halaman\";\n\"quran_rob3\" = \"¼\";\n\"quran_sura\" = \"Surah\";\n\"quran_sura_title\" = \"Surah %1$@\";\n\"quran_talt_arb3\" = \"¾\";\n\"quranSearchType\" = \"Ayat Quran\";\n\"recent_pages\" = \"Muka surat terkini\";\n\"recite_from_here\" = \"Mengaji dari sini\";\n\"remove_button\" = \"Hapus\";\n\"remove_dlg_msg\" = \"Apakah anda yakin ingin menghapuskan %1$@?\";\n\"remove_dlg_title\" = \"Hapus Terjemahan?\";\n\"repeatValues[0]\" = \"1 kali\";\n\"repeatValues[1]\" = \"2 kali\";\n\"repeatValues[2]\" = \"3 kali\";\n\"repeatValues[3]\" = \"Ulang\";\n\"scoped_storage_message\" = \"Karena perubahan Android untuk meningkatkan privasi pengguna, menyalin file di luar direktori aplikasi mungkin menghentikan Quran mengakses datanya di versi Android yang akan datang. Apakah Anda yakin ingin menggunakan jalur ini?\";\n\"sdcard_error\" = \"Tidak bisa menemukan kartu SD. Harap masukkan dan coba lagi.\";\n\"search_data\" = \"Cari Data\";\n\"search_entire_mushaf\" = \"Cari seluruh mushaf\";\n\"search_full_results\" = \"Hasil Lengkap\";\n\"search_hint\" = \"Cari dalam Quran\";\n\"search_key\" = \"Tekan butang carian untuk mencari ayat\";\n\"see_tafseer_of_verse\" = \"Lihat terjemahan untuk ayat %d.\";\n\"share_ayah\" = \"Kongsikan pautan (URL) ayat\";\n\"share_ayah_text\" = \"Kongsikan teks ayat\";\n\"starting_page_label\" = \"Mula muka surat\";\n\"stop\" = \"Hentikan\";\n\"storage_permission_please_restart\" = \"Sila keluar dan mulakan semula aplikasi untuk tetapan terkini.\";\n\"storage_permission_rationale\" = \"Quran perlukan kebenaran untuk menyimpan data dalam storan luaran.\\\nQuran masih akan berfungsi tanpa kebenaran ini tetapi jika anda nyahpasang aplikasi, segala data surah, audio dan lain-lain yang dimuat turun akan hilang.\\\nBeri kebenaran?\";\n\"sura_ayah_notification_str\" = \"Surah %1$@, Ayat %2$d\";\n\"sura_ayah_sharing_str\" = \"Surah %1$@: %2$d\";\n\"tag_ayah\" = \"Beri label ayat ini\";\n\"tag_blank_tag_error\" = \"Nama label tidak boleh kosong!\";\n\"tag_bookmark\" = \"Beri Label pada Penanda\";\n\"tag_dlg_title\" = \"Label\";\n\"tag_duplicate_tag_error\" = \"Nama label sudah dipakai\";\n\"tag_name\" = \"Nama\";\n\"timing_database\" = \"Fail yang Diperlukan\";\n\"to\" = \"Sehingga\";\n\"translation_ayah\" = \"Terjemah/tafsir ayat\";\n\"translation_dialog_later\" = \"Nanti\";\n\"translation_dialog_yes\" = \"Ya\";\n\"translation_updates_available\" = \"Terdapat kemaskini untuk terjemahan anda. Paparkan terjemahan sekarang?\";\n\"undo\" = \"Batalkan\";\n\"update_available\" = \"Kemaskini Ada\";\n\"warning\" = \"Peringatan\";\n"
  },
  {
    "path": "Core/Localization/Resources/ms.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>audio_manager_files_downloaded</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_files_downloaded@</string>\n            <key>audio_manager_files_downloaded</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>other</key>\n                <string>%1$d surah telah dimuat turun</string>\n            </dict>\n        </dict>\n        <key>bookmark_tag_deleted</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@bookmark_tag_deleted@</string>\n            <key>bookmark_tag_deleted</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Penanda dipadamkan</string>\n                <key>other</key>\n                <string>%d penanda telah dipadam</string>\n            </dict>\n        </dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Satu hasil carian untuk \\&quot;%1$d\\&quot;:</string>\n                <key>other</key>\n                <string>%2$d hasil carian untuk \\&quot;%1$d\\&quot;:</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Satu ayat</string>\n                <key>other</key>\n                <string>%d ayat-ayat</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/ms.lproj/Localizable.strings",
    "content": "/*\n  Author: https://github.com/faizmokh\n */\n\n\n// MARK: - General\n\n// Metadata: Translated by ChatGPT; human review required.\n\"button.done\" = \"Selesai\";\n// Metadata: Translated by ChatGPT; human review required.\n\"button.delete\" = \"Padam\";\n\n// MARK: - Errors\n\n// Metadata: Translated by ChatGPT; human review required.\n\"error.dialog.title\" = \"Ralat\";\n\"error.message.connection_lost\" = \"Tiada sambungan internet. Ubah ke lokasi yang mempunyai internet yang stabil atau tunggu sehingga sambungan internet menjadi lebih stabil.\";\n\"error.message.international_roaming_off\" = \"Perayauan antarabangsa tidak dibenarkan. Ubah tetapan perayauan atau hidupkan Wi-Fi anda.\";\n\"error.message.not_connected_to_internet\" = \"Tiada sambungan internet. Hidupkan Wi-Fi atau hidupkan sambungan data selular.\";\n\"error.message.general\" = \"Maaf! sesuatu yang tidak diingini terjadi. Sila cuba lagi.\";\n\"error.message.no_disk_space\" = \"Ruang storan tidak mencukupi untuk memuat turun.\";\n\n// MARK: - Quran\n\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah\" = \"Ayat\";\n// Metadata: Translated by ChatGPT; human review required.\n\"surah\" = \"Surah\";\n// Metadata: Translated by AI; human review required.\n\"quran_alquran\" = \"Al-Quran\";\n\n// MARK: - Translation\n\n\"translation.text-type.translation\" = \"Terjemahan\";\n\"translation.text-type.transliteration\" = \"Transliterasi\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.selectedTranslations\" = \"Terpilih\";\n\"translation.translator\" = \"Penterjemah: \";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.see-referenced-verse\" = \"Lihat ayat %d.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.read-more\" = \"Baca lagi\";\n\"error.translation.text-retrieval\" = \"Maaf! Sesuatu yang tidak diingini terjadi. Kami tidak dapat menjumpai terjemahannya.\";\n\"error.translation.text-not-available\" = \"Tiada terjemahan untuk Ayat ini.\";\n\n// MARK: - Search\n\n\"search.recents.title\" = \"Carian terbaharu\";\n\"search.popular.title\" = \"Cuba cari\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.placeholder.text\" = \"Surah, ayat, terjemahan, tafsir dan nombor\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.result.count\" = \"%@ (%d)\";\n\n// MARK: - Settings\n\n\"setting.write_review\" = \"Tinggalkan ulasan di App Store...\";\n\"setting.contact_us\" = \"Hubungi Kami\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.donate\" = \"Sumbang\";\n\"setting.share_app\" = \"Kongi aplikasi ini...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.app_version\" = \"Versi aplikasi\";\n\n// MARK: - Quran Menu\n\n\"menu.arabic\" = \"Arab\";\n\"menu.translation\" = \"Terjemahan\";\n\"menu.select_translation\" = \"Pilih terjemahan/tafsir\";\n\"menu.pointer\" = \"Penuding terjemahan perkataan\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer.select_translation\" = \"Menunjukkan penuding\";\n\"menu.fontSizeLetter\" = \"A\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translationFontSize\" = \"Saiz terjemahan\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabicFontSize\" = \"Saiz Quran\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.twoPages\" = \"2 halaman bersebelahan (dalam landskap)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.verticalScrolling\" = \"Skrol menegak\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.theme_settings\" = \"Tema & Tetapan\";\n\n// MARK: - Theme\n\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.light\" = \"Cerah\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.dark\" = \"Gelap\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto\" = \"Auto\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto.message\" = \"Aplikasi Quran akan mematuhi tetapan penampilan iPhone anda\";\n\n// MARK: - Tabs\n\n// Metadata: Translated by ChatGPT; human review required.\n\"tab.notes\" = \"Nota\";\n\n// MARK: - Update\n\n// Metadata: Translated by ChatGPT; human review required.\n\"update.filesystem.title\" = \"Mengemas kini pangkalan data...\";\n\"downloading_title\" = \"Sedang memuat turun…\";\n\n// MARK: - Reciters\n\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.title\" = \"Pilih qari untuk didengar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.recent\" = \"Baru-baru ini\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.downloaded\" = \"Dimuat turun\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.all\" = \"Semua\";\n\n// MARK: - Audio\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.action.modify\" = \"Ubah\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.message\" = \"Memainkan audio dari %@ hingga %@\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.downloading.message\" = \"Memuat turun audio dari %@ ke %@\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing-verses.label\" = \"Memainkan ayat-ayat\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.adjust-end-verse-to-the-end.label\" = \"Laraskan ayat akhir ke penghujung\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-start-verse\" = \"Pilih ayat permulaan\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-end-verse\" = \"Pilih ayat penutup\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount\" = \"Muat turun/Main sehingga\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount.description\" = \"Ketika memainkan audio, ia akan dimainkan hingga akhir\";\n\n// MARK: - Bookmarks\n\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.title\" = \"Menambah penanda buku...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.text\" = \"Ketika anda membaca Al-Quran, tekan butang penanda buku untuk menandakan halaman semasa.\";\n\n// MARK: - Notes\n\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.title\" = \"Menambah penekanan Ayah...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.text\" = \"Tekan dan tahan pada Ayah. Anda boleh meluaskan pilihan untuk merangkumi beberapa Ayat, kemudian tekan butang penanda buku.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.verses-count\" = \"(+%d ayat)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.title\" = \"Padamkan penonjolan\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.body\" = \"Nota yang berkaitan juga akan dipadamkan.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.title\" = \"Penyegerakan iCloud\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.body\" = \"Aplikasi ini menggunakan iCloud untuk menyelaraskan penanda buku & nota di seluruh peranti anda. Anda boleh mematikannya dari tetapan iCloud peranti anda.\";\n\n// MARK: - Ayah Menu\n\n\"ayah.menu.copy\" = \"Salin\";\n\"ayah.menu.share\" = \"Kongsi...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-juz\" = \"hingga akhir Juz'\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-surah\" = \"hingga akhir Surah\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-page\" = \"hingga akhir halaman\";\n// Metadata: Translated by AI; human review required.\n\"ayah.menu.play-end-quran\" = \"hingga akhir Al-Quran\";\n\"ayah.menu.repeat\" = \"Ulang\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verse\" = \"ayat yang dipilih\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verses\" = \"ayat-ayat yang dipilih\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight\" = \"Sorot\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight-select-color\" = \"pilih warna\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.add-note\" = \"Tambah nota\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.edit-note\" = \"Edit nota\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-note\" = \"Padam nota\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-highlight\" = \"Padam sorotan\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.short\" = \"Pilih\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.long\" = \"Tetapkan sebagai Mushaf semasa\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.title\" = \"Pilih Mushaf\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selection-description\" = \"Ketik pada Mushaf untuk maklumat lanjut.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.hafs\" = \"Mushaf Hafs\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.pages.604\" = \"604 halaman\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.lines.15\" = \"halaman 15 baris\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.supported\" = \"Terjemahan kata demi kata\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.not-supported\" = \"Tiada terjemahan kata demi kata\";\n\n// Hafs 1405\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.title\" = \"Hafs, Madinah klasik, 1405 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.description\" = \"Mushaf Hafs klasik yang diterbitkan di Madinah pada tahun 1405 Hijri. Aplikasi ini menawarkan versi ini untuk waktu yang lama.\\nDari Kompleks Percetakan Al-Quran Raja Fahd.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.issue\" = \"Diterbitkan pada tahun 1405 Hijri\";\n\n// Hafs 1421\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.title\" = \"Hafs, Madinah, 1421 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.description\" = \"Mushaf Hafs yang diterbitkan di Madinah pada tahun 1421 Hijri. Dari Kompleks Percetakan Al-Quran Raja Fahd.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.issue\" = \"Diterbitkan pada tahun 1421 Hijri\";\n\n// Hafs 1440\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.title\" = \"Hafs, Madinah, 1440 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.description\" = \"Mushaf Hafs yang diterbitkan di Madinah pada tahun 1440 Hijri. Dari Kompleks Percetakan Al-Quran Raja Fahd.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.issue\" = \"Diterbitkan pada tahun 1440 Hijri\";\n\n// Hafs Tajweed\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.title\" = \"Hafs, Tajweed\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.description\" = \"Mushaf Hafs Tajweed. Al-Quran Al-Kareem - Edisi Dar al-Marefa.\";\n\n// MARK: - Diagnostics\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.title\" = \"Diagnostik\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.details\" = \"Tetapan ini digunakan oleh pembangun aplikasi khusus untuk tujuan penyahpepijatan dan diagnostik.\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.share_app_logs\" = \"Kongsi log aplikasi\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs\" = \"Aktifkan pencatatan penyahpepijatan\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs.details\" = \"Tetapan akan berkuatkuasa pada mulanya semula aplikasi seterusnya.\";\n\n\n// MARK: - What's new\n\n// Metadata: Translated by ChatGPT; human review required.\n\"new.title\" = \"Apa yang baru\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.action\" = \"Teruskan\";\n\n// Mushafs\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs\" = \"Mushaf Baru:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs.details\" = \"* Tajweed Hafs Mushaf: Al-Quran Al-Kareem - Edisi Dar al-Marefa.\\n* Mushaf Madinah 1421 hijri.\\n* Mushaf Madinah 1440 hijri.\\n* Selain itu, terus menikmati versi klasik 1405 hijri.\";\n\n// Reciters\n// Metadata: Translated by ChatGPT; human review required.\n\"new.reciters\" = \"Qari Baru:\";\n\n// Miscellaneous\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous\" = \"Pelbagai:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous.details\" = \"* Rupa aplikasi dikemas kini.\\n* Ciri carian diperhebatkan (algoritma baru akan datang tidak lama lagi).\\n* Sokongan penyetempatan Bahasa Vietnam.\\n* Akses opsyen audio lanjutan tersedia apabila tiada bacaan sedang dimainkan.\\n* Aplikasi kini bersumber terbuka: https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades\" = \"Audio:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades.details\" = \"* Kawalan kelajuan bacaan boleh laras: 0.5x, 0.75x, 1x, 1.25x, 1.5x - terima kasih kepada @adnan29979.\\n* Main balik mengingati kadar pilihan anda - terima kasih kepada @adnan29979.\";\n\n// Personalization\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization\" = \"Tema Membaca:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization.details\" = \"* Sokongan untuk pelbagai tema. Buka satu halaman Al-Quran -> Menu kanan atas -> Tema & Tetapan.\\n* Gunakan 'Original' jika anda mahu kembali kepada gaya sebelumnya.\";\n\n// Library & Navigation\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation\" = \"Perpustakaan & Navigasi:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation.details\" = \"* Susun surah dan juz di Halaman Utama serta paparkan nombor surah supaya anda boleh pergi ke yang diperlukan dengan lebih pantas - terima kasih kepada @yismailuofa.\";\n"
  },
  {
    "path": "Core/Localization/Resources/ms.lproj/Readers.strings",
    "content": "\"qari_abdulaziz_zahrani_gapless\" = \"Abdulaziz Az-Zahrani\";\n\"qari_abdulbaset\" = \"Abd Al-Basit (jurang)\";\n\"qari_abdulbaset_gapless\" = \"Abd Al-Basit\";\n\"qari_abdulbaset_mujawwad\" = \"Abd Al-Basit Mujawwad (jurang)\";\n\"qari_abdulbaset_mujawwad_gapless\" = \"Abd Al-Basit Mujawwad\";\n\"qari_abdulhadi_kanakeri_gapless\" = \"AbdulHadi Kanakeri\";\n\"qari_abdullah_matroud_gapless\" = \"Abdullah Matroud\";\n\"qari_abdulmuhsin_qasim_gapless\" = \"Abdul Mohsen Al-Qasim\";\n\"qari_abdulrahman_alshahat_gapless\" = \"Abdulrahman Al-Shahat\";\n\"qari_abdurrashid_sufi_gapless\" = \"Abdur-Rashid Sufi\";\n\"qari_afasy\" = \"Mishary Al-Afasy (jurang)\";\n\"qari_afasy_cali_gapless\" = \"Mishari Al-Afasy (California)\";\n\"qari_afasy_gapless\" = \"Mishary Al-Afasy\";\n\"qari_ahmad_nauina_gapless\" = \"Ahmad Nauina\";\n\"qari_ahmed_al_nufais_gapless\" = \"Ahmed Al-Nufais\";\n\"qari_ajamy_gapless\" = \"Ahmed ibn Ali al-Ajamy\";\n\"qari_akram_al_alaqmi\" = \"Akram Al-Alaqmi\";\n\"qari_ali_hajjaj_alsouasi_gapless\" = \"Ali Hajjaj Alsouasi\";\n\"qari_ali_jaber_gapless\" = \"Ali Jaber\";\n\"qari_alijon_qari_gapless\" = \"Alijon Qari\";\n\"qari_aloosi_gapless\" = \"Abdul Rahman Aloosi\";\n\"qari_alzain_ahmad_gapless\" = \"Alzain Mohammad Ahmad\";\n\"qari_ayman_suwaid_gapless\" = \"Ayman Suwaid\";\n\"qari_ayman_suwaid_gapped\" = \"Ayman Suwaid (jurang)\";\n\"qari_ayyoub\" = \"Muhammad Ayyoub (jurang)\";\n\"qari_ayyoub_gapless\" = \"Muhammad Ayyoub\";\n\"qari_aziz_alili_gapless\" = \"Aziz Alili\";\n\"qari_badr_al_turki_gapless\" = \"Badr Al-Turki\";\n\"qari_bandar_baleela_gapless\" = \"Bandar Baleela\";\n\"qari_basfar\" = \"Abdullah Basfar (jurang)\";\n\"qari_basfar_gapless\" = \"Abdullah Basfar\";\n\"qari_dussary\" = \"Yasser Ad-Dussary (jurang)\";\n\"qari_fares_abbad_gapless\" = \"Fares Abbad\";\n\"qari_farman_shawani_gapless\" = \"Farman Shawani\";\n\"qari_hady_toure_gapless\" = \"Hady Toure\";\n\"qari_hani_rifai\" = \"Hani Ar-Rifai (jurang)\";\n\"qari_hani_rifai_gapless\" = \"Hani Ar-Rifai\";\n\"qari_hudhayfi\" = \"Ali Al-Hudhaify (jurang)\";\n\"qari_hudhayfi_gapless\" = \"Ali Al-Hudhaify\";\n\"qari_husary_gapless\" = \"Husary\";\n\"qari_husary_iza3a_gapless\" = \"Husary Broadcast\";\n\"qari_husary_muallim_gapless\" = \"Husary (Muallim)\";\n\"qari_husary_mujawwad\" = \"Husary Mujawwad (jurang)\";\n\"qari_husary_mujawwad_gapless\" = \"Husary (Mujawwad)\";\n\"qari_ibrahim_alakhdar_gapless\" = \"Ibrahim Al-Akhdar\";\n\"qari_idrees_abkar_gapless\" = \"Idrees Abkar\";\n\"qari_jibreel\" = \"Muhammad Jibreel (jurang)\";\n\"qari_jibreel_gapless\" = \"Muhammad Jibreel\";\n\"qari_juhany_gapless\" = \"Abdullah Al-Juhany\";\n\"qari_khaled_muhanna_gapless\" = \"Khaled Al-Muhanna\";\n\"qari_khalid_jalil_gapless\" = \"Khalid Al-Jalil\";\n\"qari_khalid_qahtani_gapless\" = \"Khalid Al Qahtani\";\n\"qari_khalifa_taniji_gapless\" = \"Khalifa Taniji\";\n\"qari_luhaidan_gapless\" = \"Muhammad Al-Luhaidan\";\n\"qari_mahmoud_ali_albana_gapless\" = \"Mahmoud Ali al Bana\";\n\"qari_minshawi_mujawwad\" = \"Minshawy Mujawwad (jurang)\";\n\"qari_minshawi_mujawwad_gapless\" = \"Minshawy Mujawwad\";\n\"qari_minshawi_murattal_gapless\" = \"Minshawi Murattal\";\n\"qari_mishari_walk_gapless\" = \"Mishari & Ibrahim Walk (English)\";\n\"qari_mohammad_altablawi_gapless\" = \"Mohammad al Tablawy\";\n\"qari_mokhtasar_asmari_gapless\" = \"Abdullah Al-Asmari (Ulasan Bahasa Arab)\";\n\"qari_mostafa_ismaeel_gapless\" = \"Mostafa Ismaeel\";\n\"qari_muaiqly\" = \"Maher Al Muaiqly (jurang)\";\n\"qari_muaiqly_gapless\" = \"Maher Al Muaiqly\";\n\"qari_muaiqly_haramain_gapless\" = \"Maher Al Muaiqly (Haramain)\";\n\"qari_muhammad_rashad_shereef_gapless\" = \"Muhammad Rashad Al-Shereef\";\n\"qari_nabil_rifa3i_gapless\" = \"Nabil Ar-Rifai\";\n\"qari_noreen_siddiq_gapless\" = \"Noreen Siddiq\";\n\"qari_peshawa_qadir_al_qurdi_gapless\" = \"Peshewa Qadir al-Kurdi\";\n\"qari_qatami_gapless\" = \"Nasser Al Qatami\";\n\"qari_raad_al_kurdi_gapless\" = \"Raad Al-Kurdi\";\n\"qari_saad_al_ghamdi\" = \"Saad Al-Ghamdi (jurang)\";\n\"qari_saad_al_ghamidi_gapless\" = \"Saad Al-Ghamdi\";\n\"qari_sahl_yaseen_gapless\" = \"Sahl Yaseen\";\n\"qari_salah_budair_gapless\" = \"Salah Budair\";\n\"qari_salah_bukhatir_gapless\" = \"Salah Bukhatir\";\n\"qari_shatri\" = \"Abu Bakr Ash-Shatri (jurang)\";\n\"qari_shatri_gapless\" = \"Abu Bakr Ash-Shatri\";\n\"qari_shuraym\" = \"Saood Ash-Shuraym (jurang)\";\n\"qari_shuraym_gapless\" = \"Saood Ash-Shuraym\";\n\"qari_suadis\" = \"Abdurrahmaan As-Sudais (jurang)\";\n\"qari_sudais_gapless\" = \"Abdurrahman As-Sudais\";\n\"qari_tablawy\" = \"Mohammad al Tablaway (jurang)\";\n\"qari_tawfeeq_as_sawaigh_gapless\" = \"Tawfeeq as-Sawaigh\";\n\"qari_wadee3_alyamani_gapless\" = \"Wadee\\' Al-Yamani\";\n\"qari_walk\" = \"Ibrahim Walk (English Trans.)\";\n\"qari_walk_gapless\" = \"Ibrahim Walk (English)\";\n\"qari_yasser_dussary_gapless\" = \"Yasser Ad-Dussary\";\n\"qari_yasser_salama_hadr_gapless\" = \"Yasser Salama (hadr)\";\n"
  },
  {
    "path": "Core/Localization/Resources/nl.lproj/Android.strings",
    "content": "\"about_androidx\" = \"AndroidX\";\n\"about_androidx_url\" = \"\\\nhttps://developer.android.com/jetpack/androidx\";\n\"about_contributors\" = \"Bijdragers\";\n\"about_contributors_summary\" = \"Een lijst met mensen die hebben bijgedragen aan de\\\nontwikkeling van Koran voor Android\";\n\"about_dagger2\" = \"Dagger 2\";\n\"about_dagger2_url\" = \"https://google.github.io/dagger\";\n\"about_data_sources\" = \"Data bronnen\";\n\"about_description\" = \"Koran voor Android is een gratis Koran-applicatie. Vergeet de bijdragers niet in uw gebeden.\";\n\"about_dnsjava\" = \"dnsjava\";\n\"about_dnsjava_url\" = \"http://dnsjava.org\";\n\"about_furqan\" = \"Al-Bāḥith al-Qur’ānī (tafsir.app)\";\n\"about_furqan_summary\" = \"Uthmani-tekst en Arabische Tafseer\";\n\"about_furqan_url\" = \"https://tafsir.app\";\n\"about_images\" = \"Afbeeldingen\";\n\"about_kotlin\" = \"Kotlin\";\n\"about_kotlin_url\" = \"https://kotlinlang.org\";\n\"about_madani_images\" = \"De koranafbeeldingen zijn gebaseerd op de lettertypen van het\\\nKing Fahd Quran Printing Complex\";\n\"about_madani_images_url\" = \"\\\nhttps://github.com/quran/quran.com-images\";\n\"about_material_components\" = \"Material Components for Android\";\n\"about_material_components_url\" = \"\\\nhttps://github.com/material-components/material-components-android\";\n\"about_moshi\" = \"Moshi\";\n\"about_moshi_url\" = \"https://github.com/square/moshi\";\n\"about_naskh_images\" = \"De koranafbeeldingen voor de Naskh-app zijn (met toestemming)\\\nafkomstig van SHL Info Systems\";\n\"about_naskh_images_url\" = \"http://www.shlinfosystems.com\";\n\"about_noorhidayat\" = \"Noorhidayat\";\n\"about_noorhidayat_summary\" = \"Noorehira-lettertype en Mufti Taqi-vertaling\";\n\"about_noorhidayat_url\" = \"http://www.noorehidayat.org\";\n\"about_numberPicker\" = \"Number Picker\";\n\"about_numberPicker_url\" = \"\\\nhttps://github.com/ShawnLin013/NumberPicker\";\n\"about_okhttp\" = \"OkHttp\";\n\"about_okhttp_url\" = \"https://github.com/square/okhttp\";\n\"about_open_source\" = \"Open Source Projects\";\n\"about_others\" = \"Andere\";\n\"about_qaloon_images\" = \"Qaloon-afbeeldingen worden gebruikt met toestemming van Nous\\\nMemes Editions Et Diffusion (Tunesië)\";\n\"about_quran_enc\" = \"Noble Quran Encyclopedia (QuranEnc)\";\n\"about_quran_enc_summary\" = \"Vertalingen voor vele talen\";\n\"about_quran_enc_url\" = \"https://quranenc.com\";\n\"about_quran_ksu\" = \"Electronic Moshaf Project\";\n\"about_quran_ksu_summary\" = \"Het King Saud University Electronic Moshaf Project is de\\\napp\\'s bron van Arabische Tafaseer en vertalingen voor verschillende talen. Het is ook de bron\\\nvoor de recitatie van Dr. Ayman Suwaid.\";\n\"about_quran_ksu_url\" = \"https://quran.ksu.edu.sa\";\n\"about_quranicaudio\" = \"QuranicAudio\";\n\"about_quranicaudio_summary\" = \"Gapless mp3 koranrecitaties\";\n\"about_quranicaudio_url\" = \"https://quranicaudio.com\";\n\"about_rxandroid\" = \"RxAndroid\";\n\"about_rxandroid_url\" = \"https://github.com/ReactiveX/RxAndroid\";\n\"about_rxjava\" = \"RxJava\";\n\"about_rxjava_url\" = \"https://github.com/ReactiveX/RxJava\";\n\"about_sliding_panel\" = \"AndroidSlidingUpPanel\";\n\"about_sliding_panel_url\" = \"\\\nhttps://github.com/umano/AndroidSlidingUpPanel\";\n\"about_tanzil\" = \"Tanzil\";\n\"about_tanzil_summary\" = \"Vertalingen voor enkele talen\";\n\"about_tanzil_url\" = \"http://tanzil.net\";\n\"about_timber\" = \"Timber\";\n\"about_timber_url\" = \"https://github.com/JakeWharton/timber\";\n\"app_name\" = \"Koran\";\n\"audio_manager\" = \"Geluid Manager\";\n\"audio_manager_delete_selection\" = \"Selectie verwijderen\";\n\"audio_manager_download_all\" = \"Alles downloaden\";\n\"audio_manager_download_selection\" = \"Selectie downloaden\";\n\"audio_manager_remove_audio_msg\" = \"Weet u zeker dat u %1$@ wilt verwijderen?\";\n\"audio_manager_remove_audio_title\" = \"Surah verwijderen?\";\n\"audio_manager_remove_multiple_audio_msg\" = \"Weet u zeker dat wilt verwijderen?\";\n\"audio_manager_surah_delete\" = \"Verwijderen audiobestand\";\n\"audio_manager_surah_download\" = \"Soera downloaden\";\n\"audio_updated_text\" = \"Verschillende koran-audiobestanden zijn bijgewerkt. Koran heeft\\\nuw exemplaar van deze bestanden verwijderd, zodat de nieuwste versies kunnen worden gedownload\\\nde volgende keer dat u ze afspeelt.\";\n\"audio_updated_title\" = \"Koran Audiobestanden Update\";\n\"available_translations\" = \"Beschikbaar om te downloaden\";\n\"ayah_copied_popup\" = \"Ayah Gekopieerd\";\n\"bookmark_ayah\" = \"Bladwijzer deze Ayah\";\n\"bookmarks_list_empty\" = \"Geen bladwijzers\";\n\"cancel\" = \"Annuleer\";\n\"canceling\" = \"Annuleren…\";\n\"copy_ayah\" = \"Kopieer Ayah\";\n\"delete_tag\" = \"Verwijder Tag\";\n\"delete_translation\" = \"Vertaling verwijderen\";\n\"dialog_ok\" = \"OK\";\n\"download_amount_in_megabytes\" = \"%@ MB\";\n\"download_cancel\" = \"Annuleren\";\n\"download_error_disk\" = \"Niet genoeg schijfruimte om te downloaden\";\n\"download_error_general\" = \"Downloaden mislukt\";\n\"download_error_invalid_download\" = \"Gedownloade bestand was beschadigd\";\n\"download_error_invalid_download_retry\" = \"Beschadigd bestand, opnieuw downloaden wordt\\\ngeprobeerd\";\n\"download_error_network\" = \"Downloaden mislukt vanwege netwerkfout\";\n\"download_error_network_retry\" = \"Netwerkfout, proberen te hervatten…\";\n\"download_error_perms\" = \"Downloaden mislukt vanwege machtigingsfout\";\n\"download_extra_data\" = \"We moeten een of twee kleine bestanden downloaden om delen en\\\nvertalen te ondersteunen. Download nu?\";\n\"download_processing\" = \"Download verwerken…\";\n\"download_progress\" = \"%1$@ Gedowload van %2$@\";\n\"download_retry\" = \"Opnieuw Proberen\";\n\"download_successful\" = \"Download succesvol\";\n\"download_sura_ayah_progress\" = \"Downloaden van Soera %1$d ayah %2$d\";\n\"download_sura_progress\" = \"%1$@ Gedowload van %2$@ van soera %3$d\";\n\"downloaded_translations\" = \"Gedownload\";\n\"downloadImportantPrompt\" = \"Er is een kleine maar belangrijke update voor de\\\nkoranafbeeldingen die je op je apparaat hebt staan. Wilt u deze patch nu downloaden?\\\n\";\n\"downloading_message\" = \"Wacht tot de bestanden zijn gedownload (hervatting wordt\\\nondersteund).\";\n\"downloadPrompt\" = \"Om Koran Android goed te laten werken,\\\nmoeten we enkele bestanden downloaden. Doe je dit nu niet, dan is de app\\\nwerkt mogelijk niet betrouwbaar en vereist een internetverbinding om te lezen.\\\nWilt u de benodigde bestanden nu downloaden?\\\n\";\n\"downloadPrompt_no\" = \"Nee\";\n\"downloadPrompt_ok\" = \"Ja\";\n\"downloadPrompt_title\" = \"Benodigde bestanden downloaden?\";\n\"downloadTabletPrompt\" = \"We hebben onlangs verbeterde afbeeldingen voor tablets\\\ntoegevoegd. Wilt u deze afbeeldingen nu downloaden?\";\n\"edit_tag\" = \"Bewerk Tag\";\n\"email_us\" = \"Als uw vraag hierboven niet wordt beantwoord, kunt u een e-mail sturen\\\nnaar quranandroid@gmail.com voor ondersteuning. Houd er rekening mee dat we veel e-mails\\\nontvangen, dus we kunnen ze mogelijk niet allemaal beantwoorden.\";\n\"error_getting_translation_list\" = \"Kan de lijst met vertalingen niet downloaden.\\\nProbeer het later opnieuw.\";\n\"export_data_error\" = \"Fout bij exporteren van gegevens\";\n\"exported_data\" = \"Gegevens geëxporteerd naar %1$@\";\n\"extracting_title\" = \"Verwerken…\";\n\"found_in_sura\" = \"Gevonden in Soera (%1$d) %2$@: %3$d (pagina %4$d)\";\n\"from\" = \"Van\";\n\"get_arabic_search_db\" = \"Arabische zoekdatabase verkrijgen\";\n\"get_translations\" = \"Vertalingen Ophalen\";\n\"gotoPage\" = \"Ga naar pagina\";\n\"help\" = \"\\\n<b>Hoe speel ik audio af?</b>\\\n<br/>Open een willekeurige pagina van de Koran. Tik eenmaal op het scherm. Onderaan zie je\\\neen afspeelknop en wat tekst met de naam van een qari. Klik op de naam van de qari om een andere\\\nqari te kiezen. Klik op afspelen om de huidige pagina of sura te downloaden en af te spelen.\\\n<br/>\\\n<br/><b>Hoe bekijk ik de vertaling?</b>\\\n<br/>Open een willekeurige pagina van de Koran. Tik eenmaal op het scherm. Bovenaan zie je\\\neen wereldbolpictogram (of, als je het niet ziet, klik op een pictogram met drie vierkante\\\nstippen) - klik hierop en kies vertaling om de vertaling te bekijken.\\\n<br/>\\\nAls je geen vertalingen hebt gedownload, brengt het je naar een scherm waar je vertalingen kunt\\\ndownloaden. Kies en download een vertaling, keer dan terug en tik opnieuw op het\\\nwereldbolpictogram om de vertaling te bekijken.\\\n<br/>\\\n<br/><b>Hoe maak ik een bladwijzer van een pagina?</b>\\\n<br/>Open een willekeurige pagina van de Koran. Tik eenmaal op het scherm. Rechtsboven zie je\\\neen bladwijzerpictogram. Tik op het bladwijzerpictogram om de pagina als bladwijzer toe te\\\nvoegen (de kleur wordt wit). Tik opnieuw op het bladwijzerpictogram om de bladwijzer te\\\nverwijderen.\\\n<br/>\\\n<br/><b>Hoe maak ik de tekst groter?</b>\\\n<br/>Houd je telefoon in landschapsmodus voor de Arabische pagina\\'s. Dit maakt de tekst\\\ngroter. Voor vertalingen ga je naar de instellingen en stel je de grootte van de vertalingstekst\\\nin.\\\n<br/>\\\n<br/><b>Hoe deel ik een ayah?</b>\\\n<br/>Terwijl je op een willekeurige Arabische pagina bent, druk en houd je op een ayah om een\\\nmenu te krijgen waar je kunt kiezen om de ayah als bladwijzer te markeren, taggen, delen of\\\nkopiëren naar het klembord, de vertaling te bekijken, of naar de recitatie te luisteren.\\\n<br/>\\\n<br/><b>Malayalam/Tamil/Bengali/Urdu-lettertypen werken niet!</b>\\\n<br/>Helaas ondersteunen Android-versies vóór 4.0 deze lettertypen niet en er is weinig dat\\\nwe hieraan kunnen doen.\\\n\";\n\"help_title\" = \"Veel Gestelde Vragen\";\n\"highlighting_database\" = \"Vereiste Bestanden\";\n\"import_data\" = \"Gegevens importeren\";\n\"import_data_and_override\" = \"Als je dit bestand importeert, worden alle bladwijzers\\\nvervangen door %1$d bladwijzer(s) en %2$d tag(s). Importeren?\";\n\"import_data_error\" = \"Ongeldig back-upbestand (of kan back-upbestand niet lezen).\";\n\"import_data_permissions_error\" = \"Kan back-upbestand niet lezen vanwege\\\ntoestemmingsfout.\";\n\"import_successful\" = \"Importeren voltooid\";\n\"juz2_description\" = \"Juz\\' %1$@\";\n\"kitkat_external_message\" = \"Vanwege beperkingen in Android, als u ervoor kiest om\\\nKoran-gegevens op uw externe SD-kaart te plaatsen en later Koran Android verwijdert of gegevens\\\nwist, worden alle pagina\\'s en audio van Koran Android verwijderd en moet u deze opnieuw\\\ndownloaden. Weet u zeker dat u de externe SD-kaart wilt gebruiken?\";\n\"loading\" = \"Laden…\";\n\"logs_email\" = \"quranandroid+logs@gmail.com\";\n\"madani\" = \"Madani\";\n\"makki\" = \"Makki\";\n\"menu_about\" = \"Over Ons\";\n\"menu_back_to_page\" = \"Toon Koran\";\n\"menu_bookmarks\" = \"Bladwijzers\";\n\"menu_bookmarks_ayah\" = \"Ayah Bladwijzers\";\n\"menu_bookmarks_page\" = \"Pagina Bladwijzers\";\n\"menu_get_translations\" = \"Ontvang vertalingen\";\n\"menu_help\" = \"Hulp\";\n\"menu_jump\" = \"Ga naar pagina\";\n\"menu_jump_last_page\" = \"Laatste Pagina\";\n\"menu_other_apps\" = \"Andere apps\";\n\"menu_search\" = \"Zoeken\";\n\"menu_settings\" = \"Instellingen\";\n\"menu_show_date\" = \"Datum tonen\";\n\"menu_show_recents\" = \"Recente pagina\\'s\";\n\"menu_sort\" = \"Sorteer\";\n\"menu_sort_date\" = \"Datum Toegevoegd\";\n\"menu_sort_group_by_tags\" = \"Groeperen op tags\";\n\"menu_sort_location\" = \"Locatie in de Koran\";\n\"menu_translation\" = \"Toon vertaling\";\n\"more_arabic\" = \"المزيد…\";\n\"more_translations\" = \"Meer vertalingen\";\n\"move_down\" = \"Omlaag verplaatsen\";\n\"move_up\" = \"Omhoog verplaatsen\";\n\"need_translation\" = \"U heeft nog geen vertalingen/tafaseer gedownload.\";\n\"new_tag\" = \"Nieuwe Tag\";\n\"next\" = \"Volgende\";\n\"no_arabic_search_available\" = \"U heeft het Arabische zoekpakket niet gedownload.\\\nDownload het alstublieft en probeer uw zoekopdracht opnieuw.\";\n\"no_results\" = \"Geen resultaten gevonden voor \\\"%@\\\"\";\n\"not_tagged\" = \"Niet Getaged\";\n\"notification_channel_audio\" = \"Koran Recitaties\";\n\"notification_channel_download\" = \"Koran Downloads\";\n\"notification_download_canceled\" = \"Download geannuleerd\";\n\"page_description\" = \"Pagina %1$@, Juz\\' %2$@\";\n\"pause\" = \"Pauzeren\";\n\"play\" = \"Afspelen\";\n\"play_apply\" = \"Toepassen\";\n\"play_apply_and_play\" = \"Toepassen en Afspelen\";\n\"play_each_verse\" = \"Speel elke vers af:\";\n\"play_from\" = \"Van\";\n\"play_from_here\" = \"Afspelen van hier\";\n\"play_restrict_range\" = \"Speel alleen bovenstaande verzen\";\n\"play_to\" = \"Naar\";\n\"play_verses_range\" = \"Speel een set van verzen af:\";\n\"playback_prompt_title\" = \"Begin met afspelen vanaf:\";\n\"playback_speed\" = \"Afspeelsnelheid:\";\n\"please_grant_permissions\" = \"Verleen toestemming in de applicatie-instellingen\";\n\"please_wait\" = \"Even geduld aub…\";\n\"prefs_app_location_summary\" = \"Kies waar Koran-bestanden moeten worden opgeslagen\";\n\"prefs_app_location_title\" = \"Koran gegevensmap\";\n\"prefs_app_size\" = \"Huidige gegevensgrootte is\";\n\"prefs_audio_manager\" = \"Geluid Manager\";\n\"prefs_audio_manager_summary\" = \"Koran audio beheren en downloaden\";\n\"prefs_ayah_before_translation_summary\" = \"Toon ayah in het Arabisch boven de vertaling\";\n\"prefs_ayah_before_translation_title\" = \"Ayah vóór vertaling\";\n\"prefs_calculating_app_size\" = \"App-grootte berekenen\";\n\"prefs_category_advanced\" = \"Geavanceerde opties\";\n\"prefs_category_advanced_summary\" = \"Bladwijzers importeren/exporteren,\\\nKoran-gegevensdirectory instellen, enzovoort.\";\n\"prefs_category_display_settings\" = \"Weergave-instellingen\";\n\"prefs_category_download\" = \"Downloadopties\";\n\"prefs_category_dual_screen\" = \"Voorkeuren voor dubbele pagina\\'s\";\n\"prefs_category_reading\" = \"Leesvoorkeuren\";\n\"prefs_category_translation\" = \"Vertaalvoorkeuren\";\n\"prefs_copying_app_files\" = \"App-bestanden kopiëren\";\n\"prefs_display_marker_summary\" = \"Popup tonen bij het bereiken van juz\\', hizb, enz.\";\n\"prefs_display_marker_title\" = \"Popup-markeringen tonen\";\n\"prefs_download_amount_summary\" = \"Voorkeurshoeveelheid voor het downloaden van\\\nniet-gapless audio\";\n\"prefs_download_amount_title\" = \"Downloadhoeveelheid\";\n\"prefs_dual_page_mode_disabled\" = \"In landschapmodus wordt slechts één pagina\\\nweergegeven.\";\n\"prefs_dual_page_mode_enabled\" = \"In landschapmodus worden twee pagina\\'s naast elkaar\\\nweergegeven.\";\n\"prefs_dual_page_mode_title\" = \"Dubbele Paginamodus\";\n\"prefs_err_moving_app_files\" = \"Fout bij het verplaatsen van app-bestanden\";\n\"prefs_export_csv_summary\" = \"Exporteer een kopie van bladwijzers en tags naar CSV\";\n\"prefs_export_csv_title\" = \"Exporteren naar CSV\";\n\"prefs_export_summary\" = \"Exporteer een kopie van bladwijzers en tags\";\n\"prefs_export_title\" = \"Exporteren\";\n\"prefs_highlight_bookmarks_summary\" = \"Gemarkeerde ayah\\'s markeren tijdens het lezen\";\n\"prefs_highlight_bookmarks_title\" = \"Bladwijzers markeren\";\n\"prefs_import_summary\" = \"Importeer bladwijzers en tags\";\n\"prefs_import_title\" = \"Importeren\";\n\"prefs_megabytes_int\" = \"%1$d MB\";\n\"prefs_megabytes_str\" = \"%@ MB\";\n\"prefs_new_background_title\" = \"Nieuwe achtergrond\";\n\"prefs_night_mode_background_brightness_summary\" = \"Helderheid van de pagina wanneer de\\\nnachtmodus actief is\";\n\"prefs_night_mode_background_brightness_title\" = \"Achtergrondhelderheid\";\n\"prefs_night_mode_summary\" = \"Gebruik een donkere achtergrond en lichte lettertypen\";\n\"prefs_night_mode_text_brightness_summary\" = \"Helderheid van de tekst wanneer de\\\nnachtmodus actief is\";\n\"prefs_night_mode_text_brightness_title\" = \"Teksthelderheid\";\n\"prefs_night_mode_title\" = \"Nachtmodus\";\n\"prefs_no_enough_space_to_move_files\" = \"Onvoldoende ruimte om app-bestanden te\\\nverplaatsen\";\n\"prefs_overlay_page_info_summary\" = \"Overlay van paginanummer, soera naam en juz\\' nummer\\\ntijdens het lezen\";\n\"prefs_overlay_page_info_title\" = \"Paginagegevens tonen\";\n\"prefs_page_type_summary\" = \"Selecteer het type leespagina\\'s\";\n\"prefs_page_type_title\" = \"Paginatype (experimenteel)\";\n\"prefs_preview\" = \"Voorbeeld\";\n\"prefs_sdcard_external\" = \"Externe opslag %1$d\";\n\"prefs_sdcard_internal\" = \"Intern geheugen\";\n\"prefs_send_logs_summary\" = \"Debug logs naar de ontwikkelaar verzenden\";\n\"prefs_send_logs_title\" = \"Logs verzenden\";\n\"prefs_split_page_and_translation_summary\" = \"In dubbele paginamodus met vertalingen,\\\nkoranpagina en vertaling wordt weergegeven\";\n\"prefs_split_page_and_translation_title\" = \"Koran en vertaling in dubbele modus\";\n\"prefs_streaming_summary\" = \"Audio streamen in plaats van downloaden\";\n\"prefs_streaming_title\" = \"Streamen\";\n\"prefs_sura_translated_name_summary\" = \"Toon de vertaling van de naam van de soera\";\n\"prefs_sura_translated_name_title\" = \"Vertaalde naam van soera\";\n\"prefs_translation_text_title\" = \"Tekstgrootte van vertalingen\";\n\"prefs_translations\" = \"Vertalingen\";\n\"prefs_translations_summary\" = \"Vertalingen downloaden en beheren\";\n\"prefs_use_arabic_summary_on\" = \"Gebruik Arabisch voor de toepassingsinterface\";\n\"prefs_use_arabic_title\" = \"Arabische modus (الوضع العربي)\";\n\"prefs_use_dyslexic_font_summary\" = \"Vertalingen weergeven in een dyslexie-vriendelijk\\\nlettertype\";\n\"prefs_use_dyslexic_font_title\" = \"Dyslexie-vriendelijk lettertype\";\n\"prefs_volume_key_navigation_summary\" = \"Blader tussen pagina\\'s met de volumetoetsen\";\n\"prefs_volume_key_navigation_title\" = \"Volume-toets navigatie\";\n\"previous\" = \"Vorige\";\n\"process_progress\" = \"Bestand verwerken %1$d / %2$d\";\n\"qarilist_dismiss\" = \"Ontsla\";\n\"qarilist_gapless\" = \"continu\";\n\"qarilist_gapped\" = \"niet-continu\";\n\"qarilist_qaris_with_downloads\" = \"Recitanten met Downloads\";\n\"qarilist_ready_to_play\" = \"Klaar om te luisteren\";\n\"qarilist_select_qari\" = \"Kies een Qari\";\n\"qarilist_selected\" = \"Geselecteerd\";\n\"quran_ayah\" = \"Ayah %1$d\";\n\"quran_ayah_details\" = \"%1$@ - Ayah %2$@, Juz\\' %3$@\";\n\"quran_hizb\" = \"Hizb\";\n\"quran_juz2\" = \"Juz\\'\";\n\"quran_nos\" = \"½\";\n\"quran_page\" = \"Pagina\";\n\"quran_rob3\" = \"¼\";\n\"quran_sura\" = \"Soera\";\n\"quran_sura_title\" = \"Soera %1$@\";\n\"quran_talt_arb3\" = \"¾\";\n\"quranSearchType\" = \"Verzen van de Koran\";\n\"recent_pages\" = \"Recente pagina\\'s\";\n\"recite_from_here\" = \"Reciteer vanaf hier\";\n\"remove_button\" = \"Verwijder\";\n\"remove_dlg_msg\" = \"Weet u zeker dat u de %1$@ wilt verwijderen?\";\n\"remove_dlg_title\" = \"Vertaling Verwijderen?\";\n\"repeatValues[0]\" = \"1 keer\";\n\"repeatValues[1]\" = \"2 keer\";\n\"repeatValues[2]\" = \"3 keer\";\n\"repeatValues[3]\" = \"lus\";\n\"scoped_storage_message\" = \"Vanwege wijzigingen in Android om de privacy van gebruikers\\\nte vergroten, kan het kopiëren van bestanden buiten de app-mappen voorkomen dat Koran in\\\ntoekomstige versies van Android toegang heeft tot zijn gegevens. Weet u zeker dat u deze locatie\\\nwilt gebruiken?\";\n\"sdcard_error\" = \"SD-kaart niet gevonden. Monteer de kaart en probeer opnieuw.\";\n\"search_data\" = \"Data Zoeken\";\n\"search_entire_mushaf\" = \"Doorzoek de hele mushaf\";\n\"search_full_results\" = \"Volledige resultaten\";\n\"search_hint\" = \"Zoek in de Koran\";\n\"search_key\" = \"Druk op de zoek-toets om een vers te zoeken.\";\n\"see_tafseer_of_verse\" = \"De tafseer van deze ayah is inbegrepen bij de tafseer van ayah\\\n%d (Klik om uit te vouwen).\";\n\"share_ayah\" = \"Deel Ayah Link\";\n\"share_ayah_text\" = \"Deel Ayah Tekst\";\n\"starting_page_label\" = \"Begin van Pagina\";\n\"stop\" = \"Onderbreken\";\n\"storage_permission_please_restart\" = \"Start de app opnieuw op zodat de wijzigingen van\\\nkracht worden.\";\n\"storage_permission_rationale\" = \"Koran wil toestemming om zijn gegevens op externe\\\nopslag op te slaan. Koran werkt zonder deze toestemming, maar als u gegevens wist of de app\\\nverwijdert, worden alle gedownloade pagina\\'s, audio en gegevens verwijderd. Wilt u Koran\\\ntoestemming geven?\";\n\"sura_ayah\" = \"%1$d:%2$d\";\n\"sura_ayah_notification_str\" = \"Soera %1$@, Ayah %2$d\";\n\"sura_ayah_sharing_str\" = \"Soera %1$@: %2$d\";\n\"tag_ayah\" = \"Label deze Ayah\";\n\"tag_blank_tag_error\" = \"Tagnaam mag niet leeg zijn!\";\n\"tag_bookmark\" = \"Tag Bladwijzer\";\n\"tag_dlg_title\" = \"Tags\";\n\"tag_duplicate_tag_error\" = \"Tagnaam bestaat al!\";\n\"tag_name\" = \"Naam\";\n\"timing_database\" = \"Vereiste Bestanden\";\n\"to\" = \"Naar\";\n\"translation_ayah\" = \"Ayah Vertaling/Tafseer\";\n\"translation_dialog_later\" = \"Later\";\n\"translation_dialog_yes\" = \"Ja\";\n\"translation_updates_available\" = \"Er is een update beschikbaar voor sommige van uw\\\nvertalingen. Wilt u nu naar het vertalingenscherm gaan?\";\n\"translations\" = \"Vertalingen\";\n\"undo\" = \"Ongedaan maken\";\n\"update_available\" = \"Update beschikbaar\";\n\"warning\" = \"Waarschuwing\";\n"
  },
  {
    "path": "Core/Localization/Resources/nl.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>audio_manager_files_downloaded</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_files_downloaded@</string>\n            <key>audio_manager_files_downloaded</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>1 soera gedownload</string>\n                <key>other</key>\n                <string>%1$d soera\\&apos;s gedownload</string>\n            </dict>\n        </dict>\n        <key>bookmark_tag_deleted</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@bookmark_tag_deleted@</string>\n            <key>bookmark_tag_deleted</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Eén item verwijderd</string>\n                <key>other</key>\n                <string>%d items verwijderd</string>\n            </dict>\n        </dict>\n        <key>plural_recent_pages</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@plural_recent_pages@</string>\n            <key>plural_recent_pages</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Laatste Pagina</string>\n                <key>other</key>\n                <string>Recente pagina\\&apos;s</string>\n            </dict>\n        </dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Eén resultaat voor \\&quot;%1$d\\&quot;:</string>\n                <key>other</key>\n                <string>%2$d resultaten voor \\&quot;%1$d\\&quot;:</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Eén vers</string>\n                <key>other</key>\n                <string>%d verzen</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/nl.lproj/Localizable.strings",
    "content": "/*\n  Author: https://github.com/abdelouali\n */\n\n\n// MARK: - General\n\n\"button.done\" = \"Klaar\";\n\"button.delete\" = \"Verwijderen\";\n\n// MARK: - Errors\n\n// Metadata: Translated by ChatGPT; human review required.\n\"error.dialog.title\" = \"Fout\";\n\"error.message.connection_lost\" = \"Internet verbinding is verbroken. Ga naar een locatie waar een meer stabiele verbinding beschikbaar is, of wacht tot de verbinding terug tot stand is gekomen.\";\n\"error.message.international_roaming_off\" = \"Internationale roaming is niet toegestaan. Verander de internationale roaming-instelling, of schakel Wi-Fi aan.\";\n\"error.message.not_connected_to_internet\" = \"Niet verbonden met het internet. Schakel Wifi aan, of mobiele dataverbinding.\";\n\"error.message.general\" = \"Oeps! Er is iets verkeerd gegaan. Probeer het opnieuw.\";\n\"error.message.no_disk_space\" = \"Er is geen opslagruimte meer beschikbaar. Downloaden mislukt.\";\n\n// MARK: - Quran\n\n\"ayah\" = \"Ayah\";\n\"surah\" = \"Soera\";\n// Metadata: Translated by AI; human review required.\n\"quran_alquran\" = \"De Koran\";\n\n// MARK: - Translation\n\n\"translation.text-type.translation\" = \"Vertaling\";\n\"translation.text-type.transliteration\" = \"Transliteratie\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.selectedTranslations\" = \"Geselecteerd\";\n\"translation.translator\" = \"Vertaler: \";\n\"translation.text.see-referenced-verse\" = \"Zie ayah %d.\";\n\"translation.text.read-more\" = \"Lees Meer\";\n\"error.translation.text-retrieval\" = \"Oeps! Er is iets fout gegaan. We konden de vertaling niet ophalen.\";\n\"error.translation.text-not-available\" = \"Er is geen vertaling beschikbaar voor deze ayah.\";\n\n// MARK: - Search\n\n\"search.recents.title\" = \"Recente zoekopdrachten\";\n\"search.popular.title\" = \"Probeer te zoeken met\";\n\"search.placeholder.text\" = \"Soera, vers, vertaling, tafseer en nummers\";\n\"search.result.count\" = \"%@ (%d)\";\n\n// MARK: - Settings\n\n\"setting.write_review\" = \"Schrijf een app store-recensie...\";\n\"setting.contact_us\" = \"Contacteer ons\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.donate\" = \"Doneren\";\n\"setting.share_app\" = \"Deel de app...\";\n\"setting.app_version\" = \"App Versie\";\n\n// MARK: - Quran Menu\n\n\"menu.arabic\" = \"Arabisch\";\n\"menu.translation\" = \"Vertaling/Tafseer\";\n\"menu.select_translation\" = \"Selecteer vertalingen/tafseer\";\n\"menu.pointer\" = \"Aanwijzer voor woordvertaling\";\n\"menu.pointer.select_translation\" = \"Aanwijzer weergegeven\";\n\"menu.fontSizeLetter\" = \"A\";\n\"menu.translationFontSize\" = \"Vertaalgrootte\";\n\"menu.arabicFontSize\" = \"Koran Grootte\";\n\"menu.twoPages\" = \"2 pagina's naast elkaar (liggend)\";\n\"menu.verticalScrolling\" = \"Verticaal scrollen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.theme_settings\" = \"Thema's en instellingen\";\n\n// MARK: - Theme\n\n\"theme.light\" = \"Licht\";\n\"theme.dark\" = \"Donker\";\n\"theme.auto\" = \"Auto\";\n\"theme.auto.message\" = \"De Koran-app houdt zich aan de weergave-instelling van uw iPhone\";\n\n// MARK: - Tabs\n\n\"tab.notes\" = \"Notities\";\n\n// MARK: - Update\n\n\"update.filesystem.title\" = \"Databases bijwerken...\";\n\"downloading_title\" = \"Downloaden…\";\n\n// MARK: - Reciters\n\n\"reciters.title\" = \"Selecteer de reciteerder om naar te luisteren\";\n\"reciters.recent\" = \"Recent\";\n\"reciters.downloaded\" = \"Gedownload\";\n\"reciters.all\" = \"Alle\";\n\n// MARK: - Audio\n\n\"audio.playing.action.modify\" = \"Wijzigen\";\n\"audio.playing.message\" = \"Audio afspelen van %@ tot %@\";\n\"audio.downloading.message\" = \"Audio downloaden van %@ tot %@\";\n\n\"audio.playing-verses.label\" = \"Verzen Afgespeeld\";\n\"audio.adjust-end-verse-to-the-end.label\" = \"Pas het eindvers aan het einde van de\";\n\n\"audio.select-start-verse\" = \"Selecteer Beginvers\";\n\"audio.select-end-verse\" = \"Selecteer Eindvers\";\n\n\"audio.download-play-amount\" = \"Downloaden/Afspelen tot\";\n\"audio.download-play-amount.description\" = \"Bij het afspelen van audio wordt deze afgespeeld tot het einde van de\";\n\n// MARK: - Bookmarks\n\n\"bookmarks.no-data.title\" = \"Bladwijzers toevoegen...\";\n\"bookmarks.no-data.text\" = \"Tik tijdens het lezen van de Koran op de knop Bladwijzer om de huidige pagina te markeren.\";\n\n// MARK: - Notes\n\n\"notes.no-data.title\" = \"Ayah-hoogtepunten toevoegen...\";\n\"notes.no-data.text\" = \"Tik op een Ayah en houd deze vast. U kunt de selectie uitbreiden om meerdere Ayat op te nemen en tik vervolgens op de bladwijzerknop.\";\n\"notes.verses-count\" = \"(+%d ayat)\";\n\"notes.delete.alert.title\" = \"Hoogtepunt verwijderen\";\n\"notes.delete.alert.body\" = \"De bijbehorende notitie zal ook worden verwijderd.\";\n\"notes.icloud.alert.title\" = \"iCloud-synchronisatie\";\n\"notes.icloud.alert.body\" = \"De app gebruikt iCloud om bladwijzers en notities op al je apparaten te synchroniseren. U kunt het uitschakelen via de iCloud-instellingen van uw apparaat.\";\n\n// MARK: - Ayah Menu\n\n\"ayah.menu.copy\" = \"Kopieer\";\n\"ayah.menu.share\" = \"Deel...\";\n\"ayah.menu.play-end-juz\" = \"tot het einde van Juz'\";\n\"ayah.menu.play-end-surah\" = \"tot het einde van Soera\";\n\"ayah.menu.play-end-page\" = \"tot het einde van Pagina\";\n// Metadata: Translated by AI; human review required.\n\"ayah.menu.play-end-quran\" = \"tot het einde van de Koran\";\n\"ayah.menu.repeat\" = \"Herhaal\";\n\"ayah.menu.selected-verse\" = \"geselecteerd vers\";\n\"ayah.menu.selected-verses\" = \"geselecteerde verzen\";\n\"ayah.menu.highlight\" = \"Markeer\";\n\"ayah.menu.highlight-select-color\" = \"selecteer kleur\";\n\"ayah.menu.add-note\" = \"Voeg Notitie Toe\";\n\"ayah.menu.edit-note\" = \"Bewerk Notitie\";\n\"ayah.menu.delete-note\" = \"Verwijder Notitie\";\n\"ayah.menu.delete-highlight\" = \"Verwijder Hoogtepunt\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n\"reading.selector.selectMushaf.short\" = \"Selecteer\";\n\"reading.selector.selectMushaf.long\" = \"Stel in als huidige Mushaf\";\n\"reading.selector.title\" = \"Kies Musaf\";\n\"reading.selector.selection-description\" = \"Tik op een Mushaf voor meer informatie.\";\n\"reading.selector.property.hafs\" = \"Hafs Mushaf\";\n\"reading.selector.property.pages.604\" = \"604 pagina's\";\n\"reading.selector.property.lines.15\" = \"Pagina van 15 regels\";\n\"reading.selector.property.word-translation.supported\" = \"Woord-voor-woord vertaling\";\n\"reading.selector.property.word-translation.not-supported\" = \"Geen woord-voor-woord vertaling\";\n\n// Hafs 1405\n\"reading.hafs-1405.title\" = \"Hafs, klassieke Madina, 1405 AH\";\n\"reading.hafs-1405.description\" = \"De klassieke hafs Mushaf, uitgegeven in Medina in 1405 Hijri. De app bood deze versie lange tijd aan.\\nUit het King Fahd Quran Printing Complex.\";\n\"reading.hafs-1405.issue\" = \"Uitgegeven in 1405 Hijri\";\n\n// Hafs 1421\n\"reading.hafs-1421.title\" = \"Hafs, klassieke Medina, 1421 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.description\" = \"De Hafs Mushaf uitgegeven in Medina in 1421 Hijri. Van het Koning Fahd Koran Drukkomplex.\";\n\"reading.hafs-1421.issue\" = \"Uitgegeven in 1421 Hijri\";\n\n// Hafs 1440\n\"reading.hafs-1440.title\" = \"Hafs, Medina, 1440 AH\";\n\"reading.hafs-1440.description\" = \"De hafs Mushaf uitgegeven in Medina in 1440 Hijri. Van het King Fahd Quran Printing Complex.\";\n\"reading.hafs-1440.issue\" = \"Uitgegeven in 1440 Hijri\";\n\n// Hafs Tajweed\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.title\" = \"Hafs, Tajweed\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.description\" = \"De Tajweed Hafs Mushaf. Al-Quran Al-Kareem - Dar al-Marefa Editie.\";\n\n// MARK: - Diagnostics\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.title\" = \"Diagnostiek\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.details\" = \"Deze instellingen worden door de app-ontwikkelaar specifiek gebruikt voor debugging en diagnostische doeleinden.\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.share_app_logs\" = \"App-logs delen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs\" = \"Debug-logging inschakelen\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs.details\" = \"De instelling wordt van kracht bij de volgende herstart van de app.\";\n\n\n// MARK: - What's new\n\n\"new.title\" = \"Wat is er nieuw\";\n\"new.action\" = \"Ga verder\";\n\n// Mushafs\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs\" = \"Nieuwe Mushafs:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs.details\" = \"* Tajweed Hafs Mushaf: Al-Quran Al-Kareem - Dar al-Marefa Editie.\\n* Medina Mushaf 1421 hijri.\\n* Medina Mushaf 1440 hijri.\\n* Plus, blijf genieten van de klassieke versie uit 1405 hijri.\";\n\n// Reciters\n\"new.reciters\" = \"Nieuwe Reciteurs\";\n\n// Miscellaneous\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous\" = \"Diversen:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous.details\" = \"* Bijgewerkte app-uitstraling.\\n* Verbeterde zoekfunctie (nieuw algoritme binnenkort beschikbaar).\\n* Ondersteuning voor Vietnamese lokalisatie.\\n* Geavanceerde audio-opties toegankelijk wanneer er geen recitatie wordt afgespeeld.\\n* App is nu open source: https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades\" = \"Audio:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades.details\" = \"* Instelbare recitatiesnelheid: 0,5x, 0,75x, 1x, 1,25x, 1,5x - dankzij @adnan29979.\\n* De weergave onthoudt je favoriete snelheid - dankzij @adnan29979.\";\n\n// Personalization\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization\" = \"Leesthema's:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization.details\" = \"* Ondersteuning voor meerdere thema's. Open een pagina van de Koran -> Menu rechtsboven -> Thema's & Instellingen.\\n* Gebruik 'Original' als je wilt teruggaan naar de vorige stijl.\";\n\n// Library & Navigation\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation\" = \"Bibliotheek & Navigatie:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation.details\" = \"* Sorteer soera's en juz op het Startscherm en toon soeranummers zodat je sneller gaat naar wat je nodig hebt - dankzij @yismailuofa.\";\n"
  },
  {
    "path": "Core/Localization/Resources/nl.lproj/Readers.strings",
    "content": "\"qari_abdulaziz_zahrani_gapless\" = \"Abdulaziz Az-Zahrani\";\n\"qari_abdulbaset\" = \"Abd Al-Basit (pauzes)\";\n\"qari_abdulbaset_gapless\" = \"Abd Al-Basit\";\n\"qari_abdulbaset_mujawwad\" = \"Abd Al-Basit Mujawwad (pauzes)\";\n\"qari_abdulbaset_mujawwad_gapless\" = \"Abd Al-Basit Mujawwad\";\n\"qari_abdulhadi_kanakeri_gapless\" = \"AbdulHadi Kanakeri\";\n\"qari_abdullah_matroud_gapless\" = \"Abdullah Matroud\";\n\"qari_abdulmuhsin_qasim_gapless\" = \"Abdul Mohsen Al-Qasim\";\n\"qari_abdulrahman_alshahat_gapless\" = \"Abdulrahman Al-Shahat\";\n\"qari_abdurrashid_sufi_gapless\" = \"Abdur-Rashid Sufi\";\n\"qari_afasy\" = \"Mishary Al-Afasy (pauzes)\";\n\"qari_afasy_cali_gapless\" = \"Mishari Al-Afasy (Californië)\";\n\"qari_afasy_gapless\" = \"Mishary Al-Afasy\";\n\"qari_ahmad_nauina_gapless\" = \"Ahmad Nauina\";\n\"qari_ahmed_al_nufais_gapless\" = \"Ahmed Al-Nufais\";\n\"qari_ajamy_gapless\" = \"Ahmed ibn Ali al-Ajamy\";\n\"qari_akram_al_alaqmi\" = \"Akram Al-Alaqmi\";\n\"qari_ali_hajjaj_alsouasi_gapless\" = \"Ali Hajjaj Alsouasi\";\n\"qari_ali_jaber_gapless\" = \"Ali Jaber\";\n\"qari_alijon_qari_gapless\" = \"Alijon Qari\";\n\"qari_aloosi_gapless\" = \"Abdul Rahman Aloosi\";\n\"qari_alzain_ahmad_gapless\" = \"Alzain Muhammad Ahmad\";\n\"qari_ayman_suwaid_gapless\" = \"Ayman Suwaid\";\n\"qari_ayman_suwaid_gapped\" = \"Ayman Suwaid (pauzes)\";\n\"qari_ayyoub\" = \"Muhammad Ayyoub (pauzes)\";\n\"qari_ayyoub_gapless\" = \"Muhammad Ayyoub\";\n\"qari_aziz_alili_gapless\" = \"Aziz Alili\";\n\"qari_badr_al_turki_gapless\" = \"Badr Al-Turki\";\n\"qari_bandar_baleela_gapless\" = \"Bandar Baleela\";\n\"qari_basfar\" = \"Abdullah Basfar (pauzes)\";\n\"qari_basfar_gapless\" = \"Abdullah Basfar\";\n\"qari_dussary\" = \"Yasser Ad-Dussary (pauzes)\";\n\"qari_fares_abbad_gapless\" = \"Fares Abbad\";\n\"qari_farman_shawani_gapless\" = \"Farman Shawani\";\n\"qari_hady_toure_gapless\" = \"Hady Toure\";\n\"qari_hani_rifai\" = \"Hani Ar-Rifai (pauzes)\";\n\"qari_hani_rifai_gapless\" = \"Hani Ar-Rifai\";\n\"qari_hudhayfi\" = \"Ali Al-Hudhaify (pauzes)\";\n\"qari_hudhayfi_gapless\" = \"Ali Al-Hudhaify\";\n\"qari_husary_gapless\" = \"Husary\";\n\"qari_husary_iza3a_gapless\" = \"Husary Broadcast\";\n\"qari_husary_muallim_gapless\" = \"Husar (Muallim)\";\n\"qari_husary_mujawwad\" = \"Husary Mujawwad (pauzes)\";\n\"qari_husary_mujawwad_gapless\" = \"Husary (Mujawwad)\";\n\"qari_ibrahim_alakhdar_gapless\" = \"Ibrahim Al-Akhdar\";\n\"qari_idrees_abkar_gapless\" = \"Idrees Abkar\";\n\"qari_jibreel\" = \"Muhammad Jibreel (pauzes)\";\n\"qari_jibreel_gapless\" = \"Muhammad Jibreel\";\n\"qari_juhany_gapless\" = \"Abdullah Al-Juhany\";\n\"qari_khaled_muhanna_gapless\" = \"Khaled Al-Muhanna\";\n\"qari_khalid_jalil_gapless\" = \"Khalid Al-Jalil\";\n\"qari_khalid_qahtani_gapless\" = \"Khalid Al Qahtani\";\n\"qari_khalifa_taniji_gapless\" = \"Khalifa Taniji\";\n\"qari_luhaidan_gapless\" = \"Muhammad Al-Luhaidan\";\n\"qari_mahmoud_ali_albana_gapless\" = \"Mahmoud Ali al Bana\";\n\"qari_minshawi_mujawwad\" = \"Minshawy Mujawwad (pauzes)\";\n\"qari_minshawi_mujawwad_gapless\" = \"Minshawy Mujawwad\";\n\"qari_minshawi_murattal_gapless\" = \"Minshawi Murattal\";\n\"qari_mishari_walk_gapless\" = \"Mishari & Ibrahim Walk (Engels)\";\n\"qari_mohammad_altablawi_gapless\" = \"Mohammad al Tablawy\";\n\"qari_mokhtasar_asmari_gapless\" = \"Abdullah Al-Asmari (Arabisch commentaar)\";\n\"qari_mostafa_ismaeel_gapless\" = \"Mostafa Ismaeel\";\n\"qari_muaiqly\" = \"Maher Al Muaiqly (pauzes)\";\n\"qari_muaiqly_gapless\" = \"Maher Al Muaiqly\";\n\"qari_muaiqly_haramain_gapless\" = \"Maher Al Muaiqly (Haramain)\";\n\"qari_muhammad_rashad_shereef_gapless\" = \"Muhammad Rashad Al-Scherif\";\n\"qari_nabil_rifa3i_gapless\" = \"Nabil Ar-Rifai\";\n\"qari_noreen_siddiq_gapless\" = \"Noreen Siddiq\";\n\"qari_peshawa_qadir_al_qurdi_gapless\" = \"Peshewa Qadir al-Kurdi\";\n\"qari_qatami_gapless\" = \"Nasser Al Qatami\";\n\"qari_raad_al_kurdi_gapless\" = \"Raad Al-Kurdi\";\n\"qari_saad_al_ghamdi\" = \"Saad Al-Ghamdi (pauzes)\";\n\"qari_saad_al_ghamidi_gapless\" = \"Saad Al-Ghamdi\";\n\"qari_sahl_yaseen_gapless\" = \"Sahl Yaseen\";\n\"qari_salah_budair_gapless\" = \"Salah Budair\";\n\"qari_salah_bukhatir_gapless\" = \"Salah Bukhatir\";\n\"qari_shatri\" = \"Abu Bakr Ash-Shatri (pauzes)\";\n\"qari_shatri_gapless\" = \"Abu Bakr Ash-Shatri\";\n\"qari_shuraym\" = \"Saood Ash-Shuraym (pauzes)\";\n\"qari_shuraym_gapless\" = \"Saood Ash-Shuraym\";\n\"qari_suadis\" = \"Abdurrahmaan As-Sudais (pauzes)\";\n\"qari_sudais_gapless\" = \"Abdurrahman As-Sudais\";\n\"qari_tablawy\" = \"Mohammad al Tablaway (pauzes)\";\n\"qari_tawfeeq_as_sawaigh_gapless\" = \"Tawfeeq as-Sawaigh\";\n\"qari_wadee3_alyamani_gapless\" = \"Wadee\\' Al-Yamani\";\n\"qari_walk\" = \"Ibrahim Walk (Engelse vertaling)\";\n\"qari_walk_gapless\" = \"Ibrahim Walk (Engelse vertaling)\";\n\"qari_yasser_dussary_gapless\" = \"Yasser Ad-Dussary\";\n\"qari_yasser_salama_hadr_gapless\" = \"Yasser Salama (hadr)\";\n"
  },
  {
    "path": "Core/Localization/Resources/nl.lproj/Suras.strings",
    "content": "\"sura_names_translation[0]\" = \"De Opening\";\n\"sura_names_translation[1]\" = \"De Koe\";\n\"sura_names_translation[2]\" = \"De Familie van Imran\";\n\"sura_names_translation[3]\" = \"De Vrouwen\";\n\"sura_names_translation[4]\" = \"De Tafel\";\n\"sura_names_translation[5]\" = \"Het Vee\";\n\"sura_names_translation[6]\" = \"De Kantelen\";\n\"sura_names_translation[7]\" = \"De Buit\";\n\"sura_names_translation[8]\" = \"Het Berouw\";\n\"sura_names_translation[9]\" = \"De Profeet Jonas\";\n\"sura_names_translation[10]\" = \"De Profeet Hūd\";\n\"sura_names_translation[11]\" = \"De Profeet Jozef\";\n\"sura_names_translation[12]\" = \"De Donder\";\n\"sura_names_translation[13]\" = \"Abraham\";\n\"sura_names_translation[14]\" = \"Al-Hidjr\";\n\"sura_names_translation[15]\" = \"De Bijen\";\n\"sura_names_translation[16]\" = \"De Nachtreis\";\n\"sura_names_translation[17]\" = \"De Grot\";\n\"sura_names_translation[18]\" = \"Maryam\";\n\"sura_names_translation[19]\" = \"Ta-Ha\";\n\"sura_names_translation[20]\" = \"De Profeten\";\n\"sura_names_translation[21]\" = \"De Bedevaart\";\n\"sura_names_translation[22]\" = \"De Gelovigen\";\n\"sura_names_translation[23]\" = \"Het Licht\";\n\"sura_names_translation[24]\" = \"Het Reddend Onderscheidingsmiddel\";\n\"sura_names_translation[25]\" = \"De Dichters\";\n\"sura_names_translation[26]\" = \"De Mieren\";\n\"sura_names_translation[27]\" = \"Het Verhaal\";\n\"sura_names_translation[28]\" = \"De Spin\";\n\"sura_names_translation[29]\" = \"De Romeinen\";\n\"sura_names_translation[30]\" = \"Luqmān\";\n\"sura_names_translation[31]\" = \"De Eerbiedige Neerbuiging\";\n\"sura_names_translation[32]\" = \"De Partijen\";\n\"sura_names_translation[33]\" = \"Saba\";\n\"sura_names_translation[34]\" = \"De Engelen\";\n\"sura_names_translation[35]\" = \"Ya Sin\";\n\"sura_names_translation[36]\" = \"De Zich Opstellenden\";\n\"sura_names_translation[37]\" = \"De Arabische Letter \\\"Saad\\\"\";\n\"sura_names_translation[38]\" = \"De Drommen\";\n\"sura_names_translation[39]\" = \"Hij Die Vergeeft\";\n\"sura_names_translation[40]\" = \"Zij Zijn Uiteengezet\";\n\"sura_names_translation[41]\" = \"Het Beraad\";\n\"sura_names_translation[42]\" = \"Pracht en Praal\";\n\"sura_names_translation[43]\" = \"De Rook\";\n\"sura_names_translation[44]\" = \"De Neergeknielden\";\n\"sura_names_translation[45]\" = \"De Zandduinen\";\n\"sura_names_translation[46]\" = \"Mohammed صَلَّى ٱللَّهُ عَلَيۡهِ وَسَلَّمَ\";\n\"sura_names_translation[47]\" = \"Het Succes\";\n\"sura_names_translation[48]\" = \"De Binnenste Vertrekken\";\n\"sura_names_translation[49]\" = \"De Arabische Letter \\\"Qaf\\\"\";\n\"sura_names_translation[50]\" = \"De Schiftende Winden\";\n\"sura_names_translation[51]\" = \"De Berg\";\n\"sura_names_translation[52]\" = \"De Sterren\";\n\"sura_names_translation[53]\" = \"De Maan\";\n\"sura_names_translation[54]\" = \"De Weldadige, de Weldoener\";\n\"sura_names_translation[55]\" = \"Het Onvermijdelijke\";\n\"sura_names_translation[56]\" = \"IJzer\";\n\"sura_names_translation[57]\" = \"De Vrouw die pleitte\";\n\"sura_names_translation[58]\" = \"Exodus, Ballingschap\";\n\"sura_names_translation[59]\" = \"De Vrouw die ondervraagd werd\";\n\"sura_names_translation[60]\" = \"De Gelederen\";\n\"sura_names_translation[61]\" = \"Vrijdag\";\n\"sura_names_translation[62]\" = \"De Hypocrieten\";\n\"sura_names_translation[63]\" = \"Wederzijdse Winst en Verlies\";\n\"sura_names_translation[64]\" = \"De Scheiding\";\n\"sura_names_translation[65]\" = \"Verbod\";\n\"sura_names_translation[66]\" = \"Heerschappij\";\n\"sura_names_translation[67]\" = \"De Pen\";\n\"sura_names_translation[68]\" = \"De Realiteit\";\n\"sura_names_translation[69]\" = \"De Stijgende Trap(pen)\";\n\"sura_names_translation[70]\" = \"(de profeet) Nuh\";\n\"sura_names_translation[71]\" = \"De Djinns\";\n\"sura_names_translation[72]\" = \"Degene Gekleed in een Mantel\";\n\"sura_names_translation[73]\" = \"Degene Omwikkeld met Gewaden\";\n\"sura_names_translation[74]\" = \"De Wederopstanding\";\n\"sura_names_translation[75]\" = \"De Mensheid\";\n\"sura_names_translation[76]\" = \"De Afgezanten\";\n\"sura_names_translation[77]\" = \"De Aankondiging\";\n\"sura_names_translation[78]\" = \"Zij die (de ziel) wegrukken (Engelen)\";\n\"sura_names_translation[79]\" = \"Hij Fronste\";\n\"sura_names_translation[80]\" = \"Het Rollen (of Opvouwen, Omverwerpen)\";\n\"sura_names_translation[81]\" = \"De Splijting\";\n\"sura_names_translation[82]\" = \"De Oplichters\";\n\"sura_names_translation[83]\" = \"De Scheuring\";\n\"sura_names_translation[84]\" = \"De Sterrenstelsels\";\n\"sura_names_translation[85]\" = \"De Heldere Ster (\\\"Nachtkomer\\\")\";\n\"sura_names_translation[86]\" = \"De Hoogste\";\n\"sura_names_translation[87]\" = \"De Overweldiging\";\n\"sura_names_translation[88]\" = \"De Dageraad\";\n\"sura_names_translation[89]\" = \"De Stad\";\n\"sura_names_translation[90]\" = \"De Zon\";\n\"sura_names_translation[91]\" = \"De Nacht\";\n\"sura_names_translation[92]\" = \"De Voormiddag\";\n\"sura_names_translation[93]\" = \"Soelaas\";\n\"sura_names_translation[94]\" = \"De Vijg\";\n\"sura_names_translation[95]\" = \"De Klonter\";\n\"sura_names_translation[96]\" = \"Het Noodlot\";\n\"sura_names_translation[97]\" = \"Het (duidelijke) Bewijs\";\n\"sura_names_translation[98]\" = \"De Aardbeving\";\n\"sura_names_translation[99]\" = \"De Renners (Paarden)\";\n\"sura_names_translation[100]\" = \"Dag des Oordeels\";\n\"sura_names_translation[101]\" = \"De Vergaring (van goederen)\";\n\"sura_names_translation[102]\" = \"De Namiddag\";\n\"sura_names_translation[103]\" = \"De Roddelaar, Lasteraar\";\n\"sura_names_translation[104]\" = \"De Olifant\";\n\"sura_names_translation[105]\" = \"De Qoeraisj\";\n\"sura_names_translation[106]\" = \"Kleine Vriendelijkheden, Liefdadigheid\";\n\"sura_names_translation[107]\" = \"De (Rivier/Bron van) Overvloed\";\n\"sura_names_translation[108]\" = \"De Ongelovigen\";\n\"sura_names_translation[109]\" = \"Goddelijke Hulp\";\n\"sura_names_translation[110]\" = \"Doorns, Palmvezels\";\n\"sura_names_translation[111]\" = \"Oprechtheid\";\n\"sura_names_translation[112]\" = \"De Dageraad\";\n\"sura_names_translation[113]\" = \"De Mensheid\";\n\"sura_names[0]\" = \"Al-Fātihah\";\n\"sura_names[1]\" = \"Al-Baqarah\";\n\"sura_names[2]\" = \"Āli-ʿImrān\";\n\"sura_names[3]\" = \"An-Nisāʾ\";\n\"sura_names[4]\" = \"Al-Māʾidah\";\n\"sura_names[5]\" = \"Al-Anʿām\";\n\"sura_names[6]\" = \"Al-Aʿrāf\";\n\"sura_names[7]\" = \"Al-Anfāl\";\n\"sura_names[8]\" = \"At-Tawbah\";\n\"sura_names[9]\" = \"Yūnus\";\n\"sura_names[10]\" = \"Hūd\";\n\"sura_names[11]\" = \"Yūsuf\";\n\"sura_names[12]\" = \"Ar-Raʿd\";\n\"sura_names[13]\" = \"Ibrāhīm\";\n\"sura_names[14]\" = \"Al-Ḥijr\";\n\"sura_names[15]\" = \"An-Naḥl\";\n\"sura_names[16]\" = \"Al-Isrāʾ\";\n\"sura_names[17]\" = \"Al-Kahf\";\n\"sura_names[18]\" = \"Maryam\";\n\"sura_names[19]\" = \"Ṭā-Hā\";\n\"sura_names[20]\" = \"Al-Anbiyāʾ\";\n\"sura_names[21]\" = \"Al-Ḥajj\";\n\"sura_names[22]\" = \"Al-Muʾminūn\";\n\"sura_names[23]\" = \"An-Nūr\";\n\"sura_names[24]\" = \"Al-Furqān\";\n\"sura_names[25]\" = \"Ash-Shuʿarāʾ\";\n\"sura_names[26]\" = \"An-Naml\";\n\"sura_names[27]\" = \"Al-Qaṣaṣ\";\n\"sura_names[28]\" = \"Al-ʿAnkabūt\";\n\"sura_names[29]\" = \"Ar-Rūm\";\n\"sura_names[30]\" = \"Luqmān\";\n\"sura_names[31]\" = \"As-Sajdah\";\n\"sura_names[32]\" = \"Al-Aḥzāb\";\n\"sura_names[33]\" = \"Sabaʾ\";\n\"sura_names[34]\" = \"Fāṭir\";\n\"sura_names[35]\" = \"Yā-Sīn\";\n\"sura_names[36]\" = \"Aṣ-Ṣāffāt\";\n\"sura_names[37]\" = \"Ṣād\";\n\"sura_names[38]\" = \"Az-Zumar\";\n\"sura_names[39]\" = \"Ghāfir\";\n\"sura_names[40]\" = \"Fuṣṣilat\";\n\"sura_names[41]\" = \"Ash-Shūrā\";\n\"sura_names[42]\" = \"Az-Zukhruf\";\n\"sura_names[43]\" = \"Ad-Dukhān\";\n\"sura_names[44]\" = \"Al-Jāthiyah\";\n\"sura_names[45]\" = \"Al-Aḥqāf\";\n\"sura_names[46]\" = \"Muḥammad\";\n\"sura_names[47]\" = \"Al-Fatḥ\";\n\"sura_names[48]\" = \"Al-Ḥujurāt\";\n\"sura_names[49]\" = \"Qāf\";\n\"sura_names[50]\" = \"Adh-Dhāriyāt\";\n\"sura_names[51]\" = \"Aṭ-Ṭūr\";\n\"sura_names[52]\" = \"An-Najm\";\n\"sura_names[53]\" = \"Al-Qamar\";\n\"sura_names[54]\" = \"Ar-Raḥmān\";\n\"sura_names[55]\" = \"Al-Wāqiʿah\";\n\"sura_names[56]\" = \"Al-Ḥadīd\";\n\"sura_names[57]\" = \"Al-Mujādilah\";\n\"sura_names[58]\" = \"Al-Ḥashr\";\n\"sura_names[59]\" = \"Al-Mumtaḥanah\";\n\"sura_names[60]\" = \"Aṣ-Ṣaff\";\n\"sura_names[61]\" = \"Al-Jumuʿah\";\n\"sura_names[62]\" = \"Al-Munāfiqūn\";\n\"sura_names[63]\" = \"At-Taghābun\";\n\"sura_names[64]\" = \"Aṭ-Ṭalāq\";\n\"sura_names[65]\" = \"At-Taḥrīm\";\n\"sura_names[66]\" = \"Al-Mulk\";\n\"sura_names[67]\" = \"Al-Qalam\";\n\"sura_names[68]\" = \"Al-Ḥāqqah\";\n\"sura_names[69]\" = \"Al-Maʿārij\";\n\"sura_names[70]\" = \"Nūḥ\";\n\"sura_names[71]\" = \"Al-Jinn\";\n\"sura_names[72]\" = \"Al-Muzzammil\";\n\"sura_names[73]\" = \"Al-Muddaththir\";\n\"sura_names[74]\" = \"Al-Qiyāmah\";\n\"sura_names[75]\" = \"Al-Insān\";\n\"sura_names[76]\" = \"Al-Mursalāt\";\n\"sura_names[77]\" = \"An-Nabaʾ\";\n\"sura_names[78]\" = \"An-Nāziʿāt\";\n\"sura_names[79]\" = \"ʿAbasa\";\n\"sura_names[80]\" = \"At-Takwīr\";\n\"sura_names[81]\" = \"Al-Infiṭār\";\n\"sura_names[82]\" = \"Al-Muṭaffifīn\";\n\"sura_names[83]\" = \"Al-Inshiqāq\";\n\"sura_names[84]\" = \"Al-Burūj\";\n\"sura_names[85]\" = \"Aṭ-Ṭāriq\";\n\"sura_names[86]\" = \"Al-Aʿlā\";\n\"sura_names[87]\" = \"Al-Ghāshiyah\";\n\"sura_names[88]\" = \"Al-Fajr\";\n\"sura_names[89]\" = \"Al-Balad\";\n\"sura_names[90]\" = \"Ash-Shams\";\n\"sura_names[91]\" = \"Al-Layl\";\n\"sura_names[92]\" = \"Aḍ-Ḍuḥā\";\n\"sura_names[93]\" = \"Ash-Sharḥ\";\n\"sura_names[94]\" = \"At-Tīn\";\n\"sura_names[95]\" = \"Al-ʿAlaq\";\n\"sura_names[96]\" = \"Al-Qadr\";\n\"sura_names[97]\" = \"Al-Bayyinah\";\n\"sura_names[98]\" = \"Az-Zalzalah\";\n\"sura_names[99]\" = \"Al-ʿĀdiyāt\";\n\"sura_names[100]\" = \"Al-Qāriʿah\";\n\"sura_names[101]\" = \"At-Takāthur\";\n\"sura_names[102]\" = \"Al-ʿAṣr\";\n\"sura_names[103]\" = \"Al-Humazah\";\n\"sura_names[104]\" = \"Al-Fīl\";\n\"sura_names[105]\" = \"Quraysh\";\n\"sura_names[106]\" = \"Al-Māʿūn\";\n\"sura_names[107]\" = \"Al-Kawthar\";\n\"sura_names[108]\" = \"Al-Kāfirūn\";\n\"sura_names[109]\" = \"An-Naṣr\";\n\"sura_names[110]\" = \"Al-Masad\";\n\"sura_names[111]\" = \"Al-Ikhlāṣ\";\n\"sura_names[112]\" = \"Al-Falaq\";\n\"sura_names[113]\" = \"An-Nās\";\n"
  },
  {
    "path": "Core/Localization/Resources/pt.lproj/Android.strings",
    "content": "\"about_contributors\" = \"Contribuintes\";\n\"about_contributors_summary\" = \"Uma lista de pessoas que contribuíram para o desenvolvimento do Alcorão para Android\";\n\"about_data_sources\" = \"Fontes de dados\";\n\"about_description\" = \"Quran Android é um aplicativo para o Android, é um software livre gratuito do Alcorão. As imagens usadas são do projeto\";\n\"about_furqan_summary\" = \"Texto Uthmani e Tafaseer arábico\";\n\"about_images\" = \"Imagens\";\n\"about_madani_images\" = \"\\\"As imagens do Alcorão são baseadas nas fontes do Complexo do Rei Fahd imprimir o Alcorão Nobre \\\"\";\n\"about_naskh_images\" = \"As imagens do Alcorão para o aplicativo Naskh são tiradas (com permissão) da SHL Info Systems\";\n\"about_noorhidayat_summary\" = \"Fonte Noorehira e Mufti Taqi Tradução\";\n\"about_open_source\" = \"Projetos de código aberto\";\n\"about_others\" = \"Outros\";\n\"about_qaloon_images\" = \"Imagens de Qaloon são utilizadas com a permissão das Edições Nous Memes Et Diffusion (Tunísia)\";\n\"about_quran_enc\" = \"Enciclopédia do Nobre Qur’an\";\n\"about_quran_enc_summary\" = \"Traduções para vários idiomas\";\n\"about_quran_ksu\" = \"Projeto Moshaf Eletrônico\";\n\"about_quran_ksu_summary\" = \"O Projeto Moshaf Eletrônico da Universidade King Saud é a fonte do aplicativo Tafaseer Árabe e traduções para vários idiomas. É também a fonte para a recitação do Dr. Ayman Suwaid.\";\n\"about_quranicaudio_summary\" = \"Recitações de Alcorão mp3 sem Gapless\";\n\"about_tanzil_summary\" = \"Traduções para alguns idiomas\";\n\"app_name\" = \"Quran\";\n\"audio_manager\" = \"Gerente de áudio\";\n\"audio_manager_delete_selection\" = \"Eliminar seleção\";\n\"audio_manager_download_all\" = \"Baixar tudo\";\n\"audio_manager_download_selection\" = \"Seleção para download\";\n\"audio_manager_remove_audio_msg\" = \"Você tem certeza de que gostaria de remover %1$@?\";\n\"audio_manager_remove_audio_title\" = \"Remover o Sura?\";\n\"audio_manager_remove_multiple_audio_msg\" = \"Você tem certeza de que gostaria de remover?\";\n\"audio_manager_surah_delete\" = \"Excluir arquivo de áudio\";\n\"audio_manager_surah_download\" = \"Baixar surah\";\n\"audio_updated_text\" = \"Vários arquivos de áudio do Alcorão foram atualizados. O Alcorão para Android removeu sua cópia desses arquivos para que as versões mais recentes possam ser baixadas na próxima vez que você os reproduzir.\";\n\"audio_updated_title\" = \"Atualização dos arquivos de áudio do Alcorão\";\n\"available_translations\" = \"Disponível para Download\";\n\"ayah_copied_popup\" = \"Ayah Copiada\";\n\"bookmark_ayah\" = \"Adicionar Ayah aos Favoritos\";\n\"bookmarks_list_empty\" = \"Sem Marcadores\";\n\"cancel\" = \"Cancelar\";\n\"canceling\" = \"Cancelando…\";\n\"copy_ayah\" = \"Copiar Ayah\";\n\"delete_tag\" = \"Deletar Tag\";\n\"delete_translation\" = \"Remover Tradução\";\n\"dialog_ok\" = \"OK\";\n\"download_cancel\" = \"Cancelar\";\n\"download_error_disk\" = \"Não há espaço em disco para fazer o download\";\n\"download_error_general\" = \"Download Fahou\";\n\"download_error_invalid_download\" = \"Arquivo baixado corrumpido\";\n\"download_error_invalid_download_retry\" = \"Arquivo corrumpido, tentando baixar novamente\";\n\"download_error_network\" = \"Não foi possível fazer o download, erro de rede\";\n\"download_error_network_retry\" = \"Erro de rede, tentando resumir…\";\n\"download_error_perms\" = \"Não foi possível fazer o download, erro de permissão\";\n\"download_extra_data\" = \"Precisamos fazer download de um ou dois pequenos arquivos para apoiar tradução e compartilhamento. Fazer isso agora?\";\n\"download_processing\" = \"Processando Download…\";\n\"download_progress\" = \"Baixado %1$@ / %2$@\";\n\"download_retry\" = \"Tentar Novamente\";\n\"download_successful\" = \"Download Sucedido\";\n\"download_sura_ayah_progress\" = \"Baixar sura %1$d ayah %2$d\";\n\"download_sura_progress\" = \"Transferido %1$@ / %2$@ de surah %3$d\";\n\"downloaded_translations\" = \"Já foi baixado\";\n\"downloadImportantPrompt\" = \"Há uma atualização pequena porem importante\\\npara as imagens do Alcorão instaladas no seu dispositivo. Voce gostaria de baixar\\\neste patch agora?\";\n\"downloading_message\" = \"Por favor aguarde o download dos aqruivos. (Resumo permitido)\";\n\"downloadPrompt\" = \"Para uma performance ótima, alguns arquivos precisam\\\nser baixados. Se voce optar para não fazer isso agora, cada página irá demorar\\\nsignificamente mais para carregar. Voce gostaria de baixar os arquivos\\\nnecessários agora?\\\n\";\n\"downloadPrompt_no\" = \"Não\";\n\"downloadPrompt_ok\" = \"Sim\";\n\"downloadPrompt_title\" = \"Baixar Arquivos Necessários?\";\n\"downloadTabletPrompt\" = \"Recentemente acrescentamos imagens melhoradas para tablets.\\\nVoce gostaria fazer download dessas imagens agora?\";\n\"edit_tag\" = \"Editar Tag\";\n\"email_us\" = \"Se a tua pergunta não foi respondida, mande e-mail para quranandroid@gmail.com. Anote por favor que recebemos muitos e-mails, há a possibilidade de não responder todos os e-mails.\";\n\"error_getting_translation_list\" = \"Não foi possível baixar a lista de traduções. Por favor tente mais tarde.\";\n\"export_data_error\" = \"Erro ao exportar dados\";\n\"exported_data\" = \"Dados exportados para %1$@\";\n\"extracting_title\" = \"Procesando…\";\n\"found_in_sura\" = \"Encontrado em Sura (%1$d) %2$@: %3$d (Página %4$d)\";\n\"from\" = \"De\";\n\"get_arabic_search_db\" = \"Obter a base de pesquisa em Árabe\";\n\"get_translations\" = \"Obter Traduções\";\n\"gotoPage\" = \"Ir para página\";\n\"help\" = \"\\\n\";\n\"help_title\" = \"Perguntas mais frequentes\";\n\"highlighting_database\" = \"Arquivos Necessários\";\n\"import_data\" = \"Dados de importação\";\n\"import_data_and_override\" = \"Se você importar este arquivo, ele substituirá todos os seus bookmarks por %1$d bookmarks e %2$d tags. Importar?\";\n\"import_data_error\" = \"Arquivo de backup inválido (ou incapaz de ler o arquivo de backup).\";\n\"import_data_permissions_error\" = \"Não foi possível ler o arquivo de backup devido a erro de permissão.\";\n\"import_successful\" = \"Importação bem sucedida\";\n\"juz2_description\" = \"Juz\\' %1$@\";\n\"kitkat_external_message\" = \"Devido às limitações do Android, se você optar por colocar dados do Alcorão em seu cartão SD externo e posteriormente desinstalar ou limpar dados para o Android do Alcorão, todas as páginas e áudio do Android do Alcorão serão excluídas e você terá que baixá-los novamente. Você tem certeza de que deseja usar o cartão SD externo?\";\n\"loading\" = \"Carregando…\";\n\"madani\" = \"Madanita\";\n\"makki\" = \"Makkita\";\n\"menu_about\" = \"Sobre Nos\";\n\"menu_back_to_page\" = \"Mostrar o Alcorão\";\n\"menu_bookmarks\" = \"Favoritos\";\n\"menu_bookmarks_ayah\" = \"Ayas Favoritas\";\n\"menu_bookmarks_page\" = \"Páginas Favoritas\";\n\"menu_get_translations\" = \"Obter Traduções\";\n\"menu_help\" = \"Ajuda\";\n\"menu_jump\" = \"Pular\";\n\"menu_jump_last_page\" = \"Última página\";\n\"menu_other_apps\" = \"Outras aplicações\";\n\"menu_search\" = \"Pesquisar\";\n\"menu_settings\" = \"Configurações\";\n\"menu_show_date\" = \"Data da exposição\";\n\"menu_sort\" = \"Ordenar\";\n\"menu_sort_date\" = \"Data Adicionado\";\n\"menu_sort_group_by_tags\" = \"Agrupar por Tags\";\n\"menu_sort_location\" = \"Localização em Quran\";\n\"menu_translation\" = \"Mostre Tradução\";\n\"more_translations\" = \"Mais Traduções\";\n\"move_down\" = \"Descer\";\n\"move_up\" = \"Avançar\";\n\"need_translation\" = \"Voce não tem traduções/tafaseer baixado ainda.\";\n\"new_tag\" = \"Sem Tag\";\n\"next\" = \"Próximo\";\n\"no_arabic_search_available\" = \"Voce ainda não fez o download do pacote de pesquisa em Àrabe. Por favor faça o download primeiro e tente novamente.\";\n\"no_results\" = \"Nenhum resultado encontrado para \\\"%@\\\"\";\n\"not_tagged\" = \"Não Tageado\";\n\"notification_channel_audio\" = \"Recitação do Alcorão\";\n\"notification_channel_download\" = \"Downloads do Alcorão\";\n\"notification_download_canceled\" = \"Download cancelado\";\n\"page_description\" = \"Página %1$@, Juz\\' %2$@\";\n\"pause\" = \"Pausa\";\n\"play\" = \"Ouça\";\n\"play_apply\" = \"Aplicar\";\n\"play_apply_and_play\" = \"Aplicar e ouvir\";\n\"play_each_verse\" = \"Ouça cada ayah:\";\n\"play_from_here\" = \"Tocar daqui\";\n\"play_restrict_range\" = \"Toque apenas o ayat acima\";\n\"play_verses_range\" = \"Ouça o conjunto de ayat:\";\n\"playback_prompt_title\" = \"Iniciar a reprodução a partir de:\";\n\"playback_speed\" = \"Velocidade de reprodução:\";\n\"please_grant_permissions\" = \"Por favor, conceda permissão nas configurações de aplicação\";\n\"please_wait\" = \"Por favor, aguarde...\";\n\"prefs_app_location_summary\" = \"Selecione qual sdcard para armazenar os arquivos\";\n\"prefs_app_location_title\" = \"Local da App\";\n\"prefs_app_size\" = \"Tamanho da App é\";\n\"prefs_audio_manager_summary\" = \"Gerenciar e baixar o áudio do Alcorão\";\n\"prefs_ayah_before_translation_summary\" = \"MOstrar ayah em Árabe em cima da tradução\";\n\"prefs_ayah_before_translation_title\" = \"Ayah antes da tradução\";\n\"prefs_calculating_app_size\" = \"Calculando Tamanho da App\";\n\"prefs_category_advanced\" = \"Opções avançadas\";\n\"prefs_category_advanced_summary\" = \"Importar/exportar marcadores, definir diretório de dados do Alcorão, etc.\";\n\"prefs_category_display_settings\" = \"Configurações de Visualização\";\n\"prefs_category_download\" = \"Opções de Download\";\n\"prefs_category_dual_screen\" = \"Preferências de página dupla\";\n\"prefs_category_reading\" = \"Preferencias de Leitura\";\n\"prefs_category_translation\" = \"Preferncias de Tradução\";\n\"prefs_copying_app_files\" = \"Copiando arquivos do App\";\n\"prefs_display_marker_summary\" = \"Mostrar popup quando alcançar juz\\', hizb, etc.\";\n\"prefs_display_marker_title\" = \"Mostarar popups do marcador\";\n\"prefs_download_amount_summary\" = \"Quantidade de download preferida para audio continuou.\";\n\"prefs_download_amount_title\" = \"Quantidade de download\";\n\"prefs_dual_page_mode_disabled\" = \"Em Paisagem, somente uma página aprecerá\";\n\"prefs_dual_page_mode_enabled\" = \"Em Paisagem, duas páginas aparecerão lado ao lado\";\n\"prefs_dual_page_mode_title\" = \"Modo de Tablet\";\n\"prefs_err_moving_app_files\" = \"Não foi possível mover os arquivos do App\";\n\"prefs_export_summary\" = \"Exportar uma cópia dos marcadores e tags\";\n\"prefs_export_title\" = \"Exportação\";\n\"prefs_highlight_bookmarks_summary\" = \"Destacar ayahs marcadas enquanto lê\";\n\"prefs_highlight_bookmarks_title\" = \"Marcadores de destaque\";\n\"prefs_import_summary\" = \"Importação de marcadores e etiquetas\";\n\"prefs_import_title\" = \"Importação\";\n\"prefs_new_background_title\" = \"New background\";\n\"prefs_night_mode_background_brightness_summary\" = \"Luminosidade da página quando o modo nocturno está activo\";\n\"prefs_night_mode_background_brightness_title\" = \"Brilho de fundo\";\n\"prefs_night_mode_summary\" = \"Dark background and light fonts will be used\";\n\"prefs_night_mode_text_brightness_summary\" = \"Brightness of the text when night mode is active\";\n\"prefs_night_mode_text_brightness_title\" = \"Text Brightness\";\n\"prefs_night_mode_title\" = \"Night mode\";\n\"prefs_no_enough_space_to_move_files\" = \"Espaço Insufficiente para mover arquivos do App\";\n\"prefs_overlay_page_info_summary\" = \"sobreposicione númeoro da página, nome da sura, e número do juz\\' durante a leitura\";\n\"prefs_overlay_page_info_title\" = \"Show page info (beta)\";\n\"prefs_page_type_summary\" = \"Selecione o tipo de página de leitura\";\n\"prefs_page_type_title\" = \"Tipo de página (experimental)\";\n\"prefs_preview\" = \"Pré-visualização\";\n\"prefs_sdcard_external\" = \"Cartão SD Externo %1$d\";\n\"prefs_sdcard_internal\" = \"Armazenamento Interno\";\n\"prefs_send_logs_summary\" = \"Enviar logs de debug para o desenvolvedor\";\n\"prefs_send_logs_title\" = \"Enviar logs\";\n\"prefs_split_page_and_translation_summary\" = \"No modo página dupla com traduções, a página do Alcorão e a tradução é mostrada\";\n\"prefs_split_page_and_translation_title\" = \"Alcorão e tradução em modo duplo\";\n\"prefs_streaming_summary\" = \"Fazer estreaming de audio quando possível.\";\n\"prefs_streaming_title\" = \"Estreaming\";\n\"prefs_sura_translated_name_summary\" = \"Mostrar a tradução do nome sura\";\n\"prefs_sura_translated_name_title\" = \"Nome traduzido Sura\";\n\"prefs_translation_text_title\" = \"Tamanho do texto da Tradução\";\n\"prefs_translations\" = \"Traduções\";\n\"prefs_translations_summary\" = \"Fazer download e gerenciar as traduções\";\n\"prefs_use_arabic_summary_on\" = \"Aplicação irá ser alterada para Árabe (Requer reinicialização)\";\n\"prefs_use_arabic_title\" = \"Modo de Árabe (الوضع العربي)\";\n\"prefs_use_dyslexic_font_summary\" = \"Display translations in dyslexia friendly font\";\n\"prefs_use_dyslexic_font_title\" = \"Dyslexia friendly font\";\n\"prefs_volume_key_navigation_summary\" = \"Navegar entre páginas usando o botão de volume\";\n\"prefs_volume_key_navigation_title\" = \"Navegação pelo botão de volume\";\n\"previous\" = \"Anterior\";\n\"process_progress\" = \"Procesando arquivo %1$d / %2$d\";\n\"qarilist_dismiss\" = \"Indeferimento\";\n\"qarilist_gapless\" = \"Contínuo\";\n\"qarilist_gapped\" = \"Não-Continuidade\";\n\"qarilist_qaris_with_downloads\" = \"Recitadores com Downloads\";\n\"qarilist_ready_to_play\" = \"Pronto para ouvir\";\n\"qarilist_select_qari\" = \"Seleccione um Qari\";\n\"qarilist_selected\" = \"Seleccionado\";\n\"quran_ayah\" = \"Ayah %1$d\";\n\"quran_ayah_details\" = \"%1$@ - Ayah %2$@, Juz\\' %3$@\";\n\"quran_hizb\" = \"Hizb\";\n\"quran_juz2\" = \"Juz\\'\";\n\"quran_nos\" = \"½\";\n\"quran_page\" = \"Página\";\n\"quran_rob3\" = \"¼\";\n\"quran_sura\" = \"Sura\";\n\"quran_sura_title\" = \"Sura %1$@\";\n\"quran_talt_arb3\" = \"¾\";\n\"quranSearchType\" = \"Ayas do Alcorão\";\n\"recent_pages\" = \"Páginas recentes\";\n\"recite_from_here\" = \"Recite daqui\";\n\"remove_button\" = \"Remover\";\n\"remove_dlg_msg\" = \"Voce tem certesa que deseja remover o %1$@?\";\n\"remove_dlg_title\" = \"Remova Trandução?\";\n\"scoped_storage_message\" = \"Devido às mudanças no Android para aumentar a privacidade do usuário, a cópia de arquivos fora dos diretórios de aplicativos pode impedir o Alcorão para Android de acessar seus dados em futuras versões do Android. Você tem certeza de que gostaria de usar este caminho?\";\n\"sdcard_error\" = \"Não foi possível encontrar o cartão SD. Por favor, monte-o e tente novamente.\";\n\"search_data\" = \"Pesquise dados\";\n\"search_entire_mushaf\" = \"Pesquisar o mushaf inteiro\";\n\"search_full_results\" = \"Resultados completos\";\n\"search_hint\" = \"Pesquisar no Alcorão\";\n\"search_key\" = \"Clique o botão de pesquisa para procurar um versículo\";\n\"see_tafseer_of_verse\" = \"Este tafseer de ayah está incluído com o tafseer de ayah %d (Clique para expandir).\";\n\"share_ayah\" = \"Compartilhar Link da Ayah\";\n\"share_ayah_text\" = \"Compartilhar Texto da Ayah\";\n\"starting_page_label\" = \"Início da página\";\n\"stop\" = \"Parada\";\n\"storage_permission_please_restart\" = \"Por favor, reinicie o aplicativo para que isto tenha efeito.\";\n\"storage_permission_rationale\" = \"O Alcorão para Android quer sua permissão para armazenar seus dados em armazenamento externo. O Alcorão para Android funcionará sem esta permissão, mas se você limpar os dados ou desinstalar o aplicativo, todas as páginas baixadas, áudio e dados serão removidos. Conceder permissão ao Alcorão para Android?\";\n\"sura_ayah_notification_str\" = \"Sura %1$@, Ayah %2$d\";\n\"sura_ayah_sharing_str\" = \"Sura %1$@: %2$d\";\n\"tag_ayah\" = \"Marcar esta Ayah\";\n\"tag_blank_tag_error\" = \"Os nomes das etiquetas não podem estar em branco!\";\n\"tag_bookmark\" = \"Tagear Marcador\";\n\"tag_dlg_title\" = \"Tag\";\n\"tag_duplicate_tag_error\" = \"O nome da etiqueta já existe!\";\n\"tag_name\" = \"Nome\";\n\"timing_database\" = \"Arquivos Necessários\";\n\"to\" = \"Para\";\n\"translation_ayah\" = \"Ayah Tradução/Tafseer\";\n\"translation_dialog_later\" = \"Mais Tarde\";\n\"translation_dialog_yes\" = \"Sim\";\n\"translation_updates_available\" = \"Há uma atualização para tua tradução. Ir à tela das traduções agora?\";\n\"undo\" = \"Desfazer\";\n\"update_available\" = \"Atualização Disponível\";\n\"warning\" = \"Advertência\";\n"
  },
  {
    "path": "Core/Localization/Resources/pt.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Resultados para \\&quot;%d\\&quot;:</string>\n                <key>other</key>\n                <string>Resultados para \\&quot;%d\\&quot;:</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>%1$d versículo</string>\n                <key>other</key>\n                <string>versículos</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/pt.lproj/Localizable.strings",
    "content": "\n\n// MARK: - General\n\n// Metadata: Translated by ChatGPT; human review required.\n\"button.done\" = \"Concluído\";\n// Metadata: Translated by ChatGPT; human review required.\n\"button.delete\" = \"Excluir\";\n\n// MARK: - Errors\n\n// Metadata: Translated by ChatGPT; human review required.\n\"error.dialog.title\" = \"Erro\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.connection_lost\" = \"A conexão com a internet foi perdida. Mova-se para um local onde uma conexão mais estável está disponível, ou espere até que a conexão se torne estável.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.international_roaming_off\" = \"O roaming internacional não é permitido. Altere as configurações de roaming internacional ou ligue o Wi-Fi.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.not_connected_to_internet\" = \"Não conectado à internet. Ligue o Wi-Fi ou permita a conexão de dados móveis.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.general\" = \"Ops! Algo deu errado. Por favor, tente novamente.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.no_disk_space\" = \"Não há espaço disponível em disco para salvar os downloads.\";\n\n// MARK: - Quran\n\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah\" = \"Aya\";\n// Metadata: Translated by ChatGPT; human review required.\n\"surah\" = \"Surata\";\n// Metadata: Translated by AI; human review required.\n\"quran_alquran\" = \"O Alcorão\";\n\n// MARK: - Translation\n\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.translation\" = \"Tradução\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.transliteration\" = \"Transliteração\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.selectedTranslations\" = \"Selecionado\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.translator\" = \"Tradutor: \";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.see-referenced-verse\" = \"Ver aya %d.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.read-more\" = \"Ler mais\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-retrieval\" = \"Ops! Algo deu errado. Não conseguimos recuperar a tradução.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-not-available\" = \"Não há tradução disponível para esta Aya.\";\n\n// MARK: - Search\n\n// Metadata: Translated by ChatGPT; human review required.\n\"search.recents.title\" = \"Pesquisas recentes\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.popular.title\" = \"Tente pesquisar com\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.placeholder.text\" = \"Surata, versículo, tradução, tafsir e números\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.result.count\" = \"%@ (%d)\";\n\n// MARK: - Settings\n\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.write_review\" = \"Escrever uma avaliação na loja de aplicativos...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.contact_us\" = \"Entre em contato conosco\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.donate\" = \"Doar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.share_app\" = \"Compartilhar o aplicativo...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.app_version\" = \"Versão do aplicativo\";\n\n// MARK: - Quran Menu\n\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabic\" = \"Árabe\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translation\" = \"Tradução/Tafsir\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.select_translation\" = \"Selecionar traduções/tafsir\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer\" = \"Ponteiro de tradução de palavras\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer.select_translation\" = \"Mostrando ponteiro\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.fontSizeLetter\" = \"A\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translationFontSize\" = \"Tamanho da tradução\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabicFontSize\" = \"Tamanho do Alcorão\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.twoPages\" = \"2 páginas lado a lado (em paisagem)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.verticalScrolling\" = \"Rolagem vertical\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.theme_settings\" = \"Temas e configurações\";\n\n// MARK: - Theme\n\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.light\" = \"Claro\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.dark\" = \"Escuro\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto\" = \"Automático\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto.message\" = \"O aplicativo do Alcorão aderirá às configurações de aparência do seu iPhone\";\n\n// MARK: - Tabs\n\n// Metadata: Translated by ChatGPT; human review required.\n\"tab.notes\" = \"Notas\";\n\n// MARK: - Update\n\n// Metadata: Translated by ChatGPT; human review required.\n\"update.filesystem.title\" = \"Atualizando bancos de dados...\";\n\"downloading_title\" = \"Baixando…\";\n\n// MARK: - Reciters\n\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.title\" = \"Selecione o recitador para ouvir\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.recent\" = \"Recente\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.downloaded\" = \"Baixado\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.all\" = \"Todos\";\n\n// MARK: - Audio\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.action.modify\" = \"Modificar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.message\" = \"Reproduzindo áudio de %@ a %@\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.downloading.message\" = \"Baixando áudio de %@ a %@\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing-verses.label\" = \"Reprodução de versículos\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.adjust-end-verse-to-the-end.label\" = \"Ajustar o último versículo ao final\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-start-verse\" = \"Selecionar o versículo inicial\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-end-verse\" = \"Selecionar o versículo final\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount\" = \"Baixar/Reproduzir até\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount.description\" = \"Ao reproduzir áudio, ele tocará até o final do\";\n\n// MARK: - Bookmarks\n\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.title\" = \"Adicionando marcadores...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.text\" = \"Ao ler o Alcorão, toque no botão de marcador para marcar a página atual.\";\n\n// MARK: - Notes\n\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.title\" = \"Adicionando destaques de Ayah...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.text\" = \"Toque e segure em um Ayah. Você pode estender a seleção para incluir múltiplos Ayat, depois toque no botão de marcador.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.verses-count\" = \"(+%d ayats)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.title\" = \"Excluir destaque\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.body\" = \"A nota associada também será excluída.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.title\" = \"Sincronização do iCloud\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.body\" = \"O aplicativo usa o iCloud para sincronizar marcadores e notas em seus dispositivos. Você pode desativá-lo nas configurações do iCloud do seu dispositivo.\";\n\n// MARK: - Ayah Menu\n\n\"ayah.menu.copy\" = \"Copiar\";\n\"ayah.menu.share\" = \"Compartilhar...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-juz\" = \"até o final do Juz'\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-surah\" = \"até o final da Surah\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-page\" = \"até o final da página\";\n// Metadata: Translated by AI; human review required.\n\"ayah.menu.play-end-quran\" = \"até o final do Alcorão\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.repeat\" = \"Repetir\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verse\" = \"versículo selecionado\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verses\" = \"versículos selecionados\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight\" = \"Destacar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight-select-color\" = \"selecionar cor\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.add-note\" = \"Adicionar nota\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.edit-note\" = \"Editar nota\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-note\" = \"Excluir nota\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-highlight\" = \"Excluir destaque\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.short\" = \"Selecionar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.long\" = \"Definir como Mushaf atual\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.title\" = \"Escolher Mushaf\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selection-description\" = \"Toque em um Mushaf para mais informações.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.hafs\" = \"Mushaf Hafs\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.pages.604\" = \"604 páginas\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.lines.15\" = \"página de 15 linhas\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.supported\" = \"Tradução palavra por palavra\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.not-supported\" = \"Sem tradução palavra por palavra\";\n\n// Hafs 1405\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.title\" = \"Hafs, Medina clássica, 1405 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.description\" = \"O Mushaf Hafs clássico emitido em Medina em 1405 Hijri. O aplicativo ofereceu esta versão por muito tempo.\\nDo Complexo de Impressão do Corão Rei Fahd.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.issue\" = \"Emitido em 1405 Hijri\";\n\n// Hafs 1421\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.title\" = \"Hafs, Medina, 1421 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.description\" = \"O Mushaf Hafs emitido em Medina em 1421 Hijri. Do Complexo de Impressão do Corão Rei Fahd.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.issue\" = \"Emitido em 1421 Hijri\";\n\n// Hafs 1440\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.title\" = \"Hafs, Medina, 1440 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.description\" = \"O Mushaf Hafs emitido em Medina em 1440 Hijri. Do Complexo de Impressão do Corão Rei Fahd.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.issue\" = \"Emitido em 1440 Hijri\";\n\n// Hafs Tajweed\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.title\" = \"Hafs, Tajweed\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.description\" = \"O Mushaf Hafs Tajweed. Al-Quran Al-Kareem - Edição Dar al-Marefa.\";\n\n// MARK: - Diagnostics\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.title\" = \"Diagnósticos\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.details\" = \"Essas configurações são utilizadas pelo desenvolvedor do aplicativo especificamente para fins de depuração e diagnóstico.\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.share_app_logs\" = \"Compartilhar logs do aplicativo\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs\" = \"Habilitar registro de depuração\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs.details\" = \"A configuração entrará em vigor no próximo reinício do aplicativo.\";\n\n\n// MARK: - What's new\n\n// Metadata: Translated by ChatGPT; human review required.\n\"new.title\" = \"O que há de novo\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.action\" = \"Continuar\";\n\n// Mushafs\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs\" = \"Novos Mushafs:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs.details\" = \"* Tajweed Hafs Mushaf: Al-Quran Al-Kareem - Edição Dar al-Marefa.\\n* Mushaf Medina 1421 hijri.\\n* Mushaf Medina 1440 hijri.\\n* Além disso, continue aproveitando a versão clássica de 1405 hijri.\";\n\n// Reciters\n// Metadata: Translated by ChatGPT; human review required.\n\"new.reciters\" = \"Novos Recitadores:\";\n\n// Miscellaneous\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous\" = \"Diversos:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous.details\" = \"* Atualização visual do aplicativo.\\n* Recurso de pesquisa aprimorado (novo algoritmo em breve).\\n* Suporte para localização em vietnamita.\\n* Acesso a opções de áudio avançadas disponíveis quando não há recitação em execução.\\n* Aplicativo agora é de código aberto: https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades\" = \"Áudio:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades.details\" = \"* Controle de velocidade de recitação ajustável: 0,5x, 0,75x, 1x, 1,25x, 1,5x - graças ao @adnan29979.\\n* A reprodução lembra sua velocidade preferida - graças ao @adnan29979.\";\n\n// Personalization\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization\" = \"Temas de leitura:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization.details\" = \"* Suporte para vários temas. Abra uma página do Alcorão -> Menu superior direito -> Temas e Configurações.\\n* Use 'Original' se quiser voltar ao estilo anterior.\";\n\n// Library & Navigation\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation\" = \"Biblioteca e navegação:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation.details\" = \"* Classifique suratas e juz na tela inicial e exiba os números das suras para chegar mais rápido ao que precisa - graças ao @yismailuofa.\";\n"
  },
  {
    "path": "Core/Localization/Resources/pt.lproj/Readers.strings",
    "content": "\"qari_abdulaziz_zahrani_gapless\" = \"Abdulaziz Az-Zahrani\";\n\"qari_abdulbaset\" = \"Abd Al-Baset (intervalo)\";\n\"qari_abdulbaset_gapless\" = \"Abd Al-Baset\";\n\"qari_abdulbaset_mujawwad\" = \"Abd Al-Baset Mujawwad (intervalo)\";\n\"qari_abdulbaset_mujawwad_gapless\" = \"Abd Al-Basit Mujawwad\";\n\"qari_abdulhadi_kanakeri_gapless\" = \"AbdulHadi Kanakeri\";\n\"qari_abdullah_matroud_gapless\" = \"Abdullah Matroud\";\n\"qari_abdulmuhsin_qasim_gapless\" = \"Abdul Mohsen Al-Qasim\";\n\"qari_abdulrahman_alshahat_gapless\" = \"Abdulrahman Al-Shahat\";\n\"qari_abdurrashid_sufi_gapless\" = \"Abdur-Rashid Sufi\";\n\"qari_afasy\" = \"Meshary Al-Afasy (intervalo)\";\n\"qari_afasy_cali_gapless\" = \"Mishari Al-Afasy (Califórnia)\";\n\"qari_afasy_gapless\" = \"Mishary Al-Afasy\";\n\"qari_ahmad_nauina_gapless\" = \"Ahmad Nauina\";\n\"qari_ahmed_al_nufais_gapless\" = \"Ahmed Al-Nufais\";\n\"qari_ajamy_gapless\" = \"Ahmed ibn Ali al-Ajamy\";\n\"qari_akram_al_alaqmi\" = \"Akram Al-Alaqmi\";\n\"qari_ali_hajjaj_alsouasi_gapless\" = \"Ali Hajjaj Alsouasi\";\n\"qari_ali_jaber_gapless\" = \"Ali Jaber\";\n\"qari_alijon_qari_gapless\" = \"Alijon Qari\";\n\"qari_aloosi_gapless\" = \"Abdul Rahman Aloosi\";\n\"qari_alzain_ahmad_gapless\" = \"Alzain Muhammad Ahmad\";\n\"qari_ayman_suwaid_gapless\" = \"Ayman Suwaid\";\n\"qari_ayman_suwaid_gapped\" = \"Ayman Suwaid (intervalo)\";\n\"qari_ayyoub\" = \"Muhammad Ayyoub (intervalo)\";\n\"qari_ayyoub_gapless\" = \"Muhammad Ayyoub\";\n\"qari_aziz_alili_gapless\" = \"Aziz Alili\";\n\"qari_badr_al_turki_gapless\" = \"Badr Al-Turki\";\n\"qari_bandar_baleela_gapless\" = \"Bandar Baleela\";\n\"qari_basfar\" = \"Abdullah Basfar (intervalo)\";\n\"qari_basfar_gapless\" = \"Abdullah Basfar\";\n\"qari_dussary\" = \"Yasser Ad-Dossary (intervalo)\";\n\"qari_fares_abbad_gapless\" = \"Fares Abbad\";\n\"qari_farman_shawani_gapless\" = \"Farman Shawani\";\n\"qari_hady_toure_gapless\" = \"Hady Toure\";\n\"qari_hani_rifai\" = \"Hani Ar-Rifai (intervalo)\";\n\"qari_hani_rifai_gapless\" = \"Hani Ar-Rifai\";\n\"qari_hudhayfi\" = \"Ali Al-Hudhaify (intervalo)\";\n\"qari_hudhayfi_gapless\" = \"Ali Al-Hudhaify\";\n\"qari_husary_gapless\" = \"Hosary\";\n\"qari_husary_iza3a_gapless\" = \"Husary Broadcast\";\n\"qari_husary_muallim_gapless\" = \"Husary (Muallim)\";\n\"qari_husary_mujawwad\" = \"Hosary Mujawwad (intervalo)\";\n\"qari_husary_mujawwad_gapless\" = \"Hosary (Mujawwad)\";\n\"qari_ibrahim_alakhdar_gapless\" = \"Ibrahim Al-Akhdar\";\n\"qari_idrees_abkar_gapless\" = \"Idrees Abkar\";\n\"qari_jibreel\" = \"Muhammad Jebreel (intervalo)\";\n\"qari_jibreel_gapless\" = \"Muhammad Jibreel\";\n\"qari_juhany_gapless\" = \"Abdullah Al-Juhany\";\n\"qari_khaled_muhanna_gapless\" = \"Khaled Al-Muhanna\";\n\"qari_khalid_jalil_gapless\" = \"Khalid Al-Jalil\";\n\"qari_khalid_qahtani_gapless\" = \"Khalid Al Qahtani\";\n\"qari_khalifa_taniji_gapless\" = \"Khalifa Tangi\";\n\"qari_luhaidan_gapless\" = \"Muhammad Al-Luhaidan\";\n\"qari_mahmoud_ali_albana_gapless\" = \"Mahmoud Ali al Bana\";\n\"qari_minshawi_mujawwad\" = \"Minshawy Mujawwad (intervalo)\";\n\"qari_minshawi_mujawwad_gapless\" = \"Minshawy Mujawwad\";\n\"qari_minshawi_murattal_gapless\" = \"Menshawi Morattal\";\n\"qari_mishari_walk_gapless\" = \"Mishari & Ibrahim Walk (Trad. Inglês)\";\n\"qari_mohammad_altablawi_gapless\" = \"Mohammad al Tablawy\";\n\"qari_mokhtasar_asmari_gapless\" = \"Abdullah Al-Asmari (Comentário Árabe)\";\n\"qari_mostafa_ismaeel_gapless\" = \"Mostafa Ismaeel\";\n\"qari_muaiqly\" = \"Maher Al Muaiqly (intervalo)\";\n\"qari_muaiqly_gapless\" = \"Maher Al Muaiqly\";\n\"qari_muaiqly_haramain_gapless\" = \"Maher Al Muaiqly (Haramain)\";\n\"qari_muhammad_rashad_shereef_gapless\" = \"Muhammad Rashad Al-Shereef\";\n\"qari_nabil_rifa3i_gapless\" = \"Nabil Ar-Rifai\";\n\"qari_noreen_siddiq_gapless\" = \"Noreen Siddiq\";\n\"qari_peshawa_qadir_al_qurdi_gapless\" = \"Peshewa Qadir al-Kurdi\";\n\"qari_qatami_gapless\" = \"Nasser Al Qatami\";\n\"qari_raad_al_kurdi_gapless\" = \"Raad Al-Kurdi\";\n\"qari_saad_al_ghamdi\" = \"Saad Al-Ghamedi (intervalo)\";\n\"qari_saad_al_ghamidi_gapless\" = \"Saad Al-Ghamdi\";\n\"qari_sahl_yaseen_gapless\" = \"Sahl Yasin\";\n\"qari_salah_budair_gapless\" = \"Salah Budair\";\n\"qari_salah_bukhatir_gapless\" = \"Salah Bukhatir\";\n\"qari_shatri\" = \"Abu Bakr Ash-Shatri (intervalo)\";\n\"qari_shatri_gapless\" = \"Abu Bakr Ash-Shatri\";\n\"qari_shuraym\" = \"Saood Ash-Shoraym (intervalo)\";\n\"qari_shuraym_gapless\" = \"Saood Ash-Shuraym\";\n\"qari_suadis\" = \"Abdurrahmaan As-Sudais (intervalo)\";\n\"qari_sudais_gapless\" = \"Abdurrahman As-Sodais\";\n\"qari_tablawy\" = \"Mohammad al Tablaway (intervalo)\";\n\"qari_tawfeeq_as_sawaigh_gapless\" = \"Tawfeeq as-Sawaigh\";\n\"qari_wadee3_alyamani_gapless\" = \"Wadee\\' Al-Yamani\";\n\"qari_walk\" = \"Ibrahim Walk (Trad. Inglês)\";\n\"qari_walk_gapless\" = \"Ibrahim Walk (Trad. Inglês)\";\n\"qari_yasser_dussary_gapless\" = \"Yasser Ad-Dossary\";\n\"qari_yasser_salama_hadr_gapless\" = \"Yasser Salama (hadr)\";\n"
  },
  {
    "path": "Core/Localization/Resources/ru.lproj/Android.strings",
    "content": "\"about_contributors\" = \"Разработчики\";\n\"about_contributors_summary\" = \"Список людей, которые внесли свой вклад в развитие\\\nQuran for Android\\\n\";\n\"about_data_sources\" = \"Источники данных\";\n\"about_description\" = \"Quran for Android - это бесплатное приложение Корана.\\\nПожалуйста, не забывайте разработчиков и вкладчиков в ваших молитвах.\\\n\";\n\"about_furqan_summary\" = \"Текст на Османи и тафсиры на арабском\";\n\"about_images\" = \"Изображений\";\n\"about_madani_images\" = \"Изображения Корана основаны на шрифтах от King Fahd Quran\\\nPrinting Complex\\\n\";\n\"about_naskh_images\" = \"Изображения Коран для приложения Naskh были взяты\\\n(с разрешения) от SHL Info Systems\\\n\";\n\"about_noorhidayat_summary\" = \"Шрифт Noorehira и перевод муфтия Мухаммада Таки Усмани\";\n\"about_open_source\" = \"Проекты с открытыми исходниками\";\n\"about_others\" = \"Другие\";\n\"about_qaloon_images\" = \"Изображения Qaloon используются с разрешением Nous Memes\\\nEditions Et Diffusion (Тунис)\\\n\";\n\"about_quran_enc_summary\" = \"Переводы для многих языков\";\n\"about_quran_ksu\" = \"Проект Электронный Мусхаф\";\n\"about_quran_ksu_summary\" = \"Проект Электронный Мусхаф Университета Короля Сауда\\\nслужил источником арабского тафсира и переводов на нескольких языков\\\n\";\n\"about_quranicaudio_summary\" = \"Безинтервальное рецитация Корана\";\n\"about_tanzil_summary\" = \"Переводы для несколько языков\";\n\"app_name\" = \"Коран\";\n\"audio_manager\" = \"Аудио менеджер\";\n\"audio_manager_delete_selection\" = \"Удалить выбранные\";\n\"audio_manager_download_all\" = \"Скачать все\";\n\"audio_manager_download_selection\" = \"Скачать выбранные\";\n\"audio_manager_remove_audio_msg\" = \"Вы уверены, что хотите удалить %1$@?\";\n\"audio_manager_remove_audio_title\" = \"Удалить суру?\";\n\"audio_manager_remove_multiple_audio_msg\" = \"Вы уверены, что хотите удалить?\";\n\"audio_manager_surah_delete\" = \"Удалить суру\";\n\"audio_manager_surah_download\" = \"Скачать суру\";\n\"audio_updated_text\" = \"Несколько аудио файлов были обновлены. Ваша копия этих файлов\\\nбыла удалена, новые версии будут загружены при следующем воспроизведении.\\\n\";\n\"audio_updated_title\" = \"Обновление аудио файлов\";\n\"available_translations\" = \"Доступные для загрузки\";\n\"ayah_copied_popup\" = \"Аят скопирован\";\n\"bookmark_ayah\" = \"Создать закладку этого аята\";\n\"bookmarks_list_empty\" = \"Закладки отсутствуют\";\n\"cancel\" = \"Отмена\";\n\"canceling\" = \"Отмена…\";\n\"copy_ayah\" = \"Скопировать аят\";\n\"delete_tag\" = \"Удалить тег\";\n\"delete_translation\" = \"Удалить перевод\";\n\"dialog_ok\" = \"OK\";\n\"download_amount_in_megabytes\" = \"%@ Mб\";\n\"download_cancel\" = \"Отмена\";\n\"download_error_disk\" = \"Для загрузки недостаточно места на диске\";\n\"download_error_general\" = \"Загрузка оборвалась\";\n\"download_error_invalid_download\" = \"Загруженный файл был поврежден\";\n\"download_error_invalid_download_retry\" = \"Поврежденный файл, попытка загрузить заново\";\n\"download_error_network\" = \"Не удалось загрузить из-за ошибки соединения\";\n\"download_error_network_retry\" = \"Ошибка соединения, попытка возобновить…\";\n\"download_error_perms\" = \"Не удалось загрузить из-за ошибки разрешений\";\n\"download_extra_data\" = \"Для поддержки перевода и обмена аятами необходимо скачать один или два маленьких файла. Загрузить сейчас?\";\n\"download_processing\" = \"Загрузка…\";\n\"download_progress\" = \"Загружено %1$@ / %2$@\";\n\"download_retry\" = \"Повторить\";\n\"download_successful\" = \"Загрузка завершена\";\n\"download_sura_ayah_progress\" = \"Загружается сура %1$d аят %2$d\";\n\"download_sura_progress\" = \"Загружено %1$@ / %2$@ суры %3$d\";\n\"downloaded_translations\" = \"Загруженные переводы\";\n\"downloadImportantPrompt\" = \"Для Вашего устройства имеется небольшое, но важное\\\nобновление изображений текста Корана. Хотите ли Вы загрузить это обновление сейчас?\\\n\";\n\"downloading_message\" = \"Пожалуйста, дождитесь загрузки файлов (имеется возможность\\\nвозобновить).\\\n\";\n\"downloadPrompt\" = \"Для правильной работы приложения необходимо скачать некоторые\\\nфайлы. Если не сделать это сейчас, загрузка каждой страницы будет занимать значительно\\\nбольшее время. Вы хотите загрузить требуемые файлы сейчас?\\\n\";\n\"downloadPrompt_no\" = \"Нет\";\n\"downloadPrompt_ok\" = \"Да\";\n\"downloadPrompt_title\" = \"Загрузить необходимые файлы?\";\n\"downloadTabletPrompt\" = \"Недавно мы добавили улучшенные изображения текста Корана для\\\nпланшетов. Хотите ли Вы загрузить эти изображения сейчас?\\\n\";\n\"edit_tag\" = \"Редактировать тег\";\n\"email_us\" = \"Если Вы не нашли нужного ответа, то можете написать на email quranandroid@gmail.com . Пожалуйста, имейте ввиду, что\\\nмы получаем множество писем, поэтому оперативно отвечать на все просто невозможно.\";\n\"error_getting_translation_list\" = \"Нет возможности скачать лист переводов. Пожалуйста, попробуйте позже.\";\n\"export_data_error\" = \"Ошибка экспорта данных\";\n\"exported_data\" = \"Данные экспортированы в %1$@\";\n\"extracting_title\" = \"Извлечение…\";\n\"found_in_sura\" = \"Найдено в суре (%1$d) %2$@: %3$d (Страница %4$d)\";\n\"from\" = \"От\";\n\"get_arabic_search_db\" = \"Скачать данные для арабского поиска\";\n\"get_translations\" = \"Скачать перевод\";\n\"gotoPage\" = \"Перейти на страницу\";\n\"help\" = \"\\\n<b>Как мне воспроизвести аудио?</b>\\\n<br/>Откройте страницу Корана. Один раз дотроньтесь до экрана. Внизу Вы заметите кнопку воспроизведения\\\nи текст с именем чтеца. Для выбора другого чтеца нажмите на имени текущего чтеца. Нажмите на\\\nкнопку воспроизведения для скачивания и вопроизведения текущей страницы или суры.\\\n<br/>\\\n<br/><b>Как мне посмотреть перевод?</b>\\\n<br/>Откройте страницу Корана. Один раз дотроньтесь до экрана. Наверху Вы заметите иконку глобуса\\\n(или, если ее нет, Вы увидете иконку с тремя квадратными точками) - нажмите на нее и выберите\\\nперевод для просмотра.\\\n<br/>\\\nЕсли у Вас нет ранее загруженных переводов, Вас переместят на экран, где Вы сможете скачать перевод.\\\nВыберите и загрузите нужный Вам перевод, затем вернитесь обратно и вновь нажмите на иконку глобуса для просмотра\\\nперевода.\\\n<br/>\\\n<br/><b>Как мне сделать закладку страницы?</b>\\\n<br/>Откройте страницу Корана. Один раз дотроньтесь до экрана. Наверху справа Вы увидите\\\nиконку закладки. Для создания закладки нажмите на данную иконку (она закрасится белым цветом).\\\nДля удаления закладки снова нажмите на иконку закладки.\\\n<br/>\\\n<br/><b>Как мне увеличить текст?</b>\\\n<br/>Для арабского текста - держите Ваш телефон в альбомном режиме (горизонтально). Это сделает текст крупнее.\\\nДля переводов - перейдите в настройки и выберите размер шрифта перевода.\\\n<br/>\\\n<br/><b> Как я могу поделиться аятом?</b>\\\n<br/>Во время нахождения на любой арабской странице Корана, нажмите и удерживайте на аяте до того,\\\nкак появится контекстное меню, где Вы сможете сделать закладку данного аята, поделиться им, посмотреть перевод\\\nили скопировать аят в буфер обмена.\\\n<br/>\\\n<br/><b>Malayalam/Tamil/Bengali/Urdu шрифты не работают!</b>\\\n<br/>К сожалению, Android версии до 4.0 не поддерживают эти шрифты, и мы ничего не можем сделать,\\\nчтобы как-то помочь Вам в этом вопросе.\\\n\";\n\"help_title\" = \"Часто задаваемые вопросы (FAQ)\";\n\"highlighting_database\" = \"Необходимые файлы\";\n\"import_data\" = \"Импорт данных\";\n\"import_data_and_override\" = \"Если вы будете импортировать этот файл, все ваши закладки будут заменены\\\nс %1$d закладки и %2$d тегов. Импортировать?\";\n\"import_data_error\" = \"Неверный файл резервной копии (или не удалось открыть файл с резервной копией).\";\n\"import_data_permissions_error\" = \"Не удается прочитать файл резервной копии из-за ошибки разрешения.\";\n\"import_successful\" = \"Данные успешно импортированы\";\n\"juz2_description\" = \"джуз %1$@\";\n\"kitkat_external_message\" = \"Из-за ограничений Android, если Вы сейчас разместите исходные данные\\\nприложения Quran for Android на Вашей внешней SD карте, а затем очистите или деинсталлируете приложение,\\\nвсе страницы и аудио приложения Quran for Android будут удалены. Все эти данные нужно будет скачать снова. Вы уверены,\\\nчто хотите использовать внешнюю SD карту?\";\n\"loading\" = \"Загрузка…\";\n\"madani\" = \"Медина\";\n\"makki\" = \"Мекка\";\n\"menu_about\" = \"О нас\";\n\"menu_back_to_page\" = \"Показать Коран\";\n\"menu_bookmarks\" = \"Закладки\";\n\"menu_bookmarks_ayah\" = \"Закладки аятов\";\n\"menu_bookmarks_page\" = \"Закладки страниц\";\n\"menu_get_translations\" = \"Скачать перевод\";\n\"menu_help\" = \"Помощь\";\n\"menu_jump\" = \"Перейти\";\n\"menu_jump_last_page\" = \"Последняя страница\";\n\"menu_other_apps\" = \"Другие приложения\";\n\"menu_search\" = \"Поиск\";\n\"menu_settings\" = \"Настройки\";\n\"menu_show_date\" = \"Показать даты\";\n\"menu_sort\" = \"Сортировать\";\n\"menu_sort_date\" = \"По дате добавления\";\n\"menu_sort_group_by_tags\" = \"Группировать по тегам\";\n\"menu_sort_location\" = \"По расположению в Коране\";\n\"menu_translation\" = \"Показать перевод\";\n\"more_translations\" = \"Ещё переводов\";\n\"move_down\" = \"Вниз\";\n\"move_up\" = \"Вверх\";\n\"need_translation\" = \"У Вас еще нет ни одного скачанного перевода/тафсира.\";\n\"new_tag\" = \"Новый тег\";\n\"next\" = \"Следующий\";\n\"no_arabic_search_available\" = \"Вы не скачали пакет данных для арабского поиска.\\\nПожалуйста, сначала скачайте его и воспользуйтесь поиском снова.\\\n\";\n\"no_results\" = \"Результатов для \\\"%@\\\" не найдено\";\n\"not_tagged\" = \"Без тега\";\n\"notification_channel_audio\" = \"Рецитация Корана\";\n\"notification_channel_download\" = \"Загрузки Корана\";\n\"notification_download_canceled\" = \"Загрузка отменена\";\n\"page_description\" = \"стр. %1$@, джуз %2$@\";\n\"pause\" = \"Пауза\";\n\"play\" = \"Воспроизвести\";\n\"play_apply\" = \"Применить\";\n\"play_apply_and_play\" = \"Применить и воспроизвести\";\n\"play_each_verse\" = \"Вос-ти каждый аят:\";\n\"play_from_here\" = \"Воспроизвести отсюда\";\n\"play_restrict_range\" = \"Воспроизвести только вышестоящие аяты\";\n\"play_verses_range\" = \"Вос-ти набор аятов:\";\n\"playback_prompt_title\" = \"Начать воспроизведение с:\";\n\"playback_speed\" = \"Скорость воспроизведения:\";\n\"please_grant_permissions\" = \"Пожалуйста, предоставляйте разрешения в настройках приложения\";\n\"please_wait\" = \"Подождите пожалуйста…\";\n\"prefs_app_location_summary\" = \"Выберите место хранения файлов\";\n\"prefs_app_location_title\" = \"Расположение приложения\";\n\"prefs_app_size\" = \"Размер приложения\";\n\"prefs_audio_manager_summary\" = \"Управлять и скачать аудио рецитация Корана\";\n\"prefs_ayah_before_translation_summary\" = \"Показывать аят на арабском раньше перевода\";\n\"prefs_ayah_before_translation_title\" = \"Аят до перевода\";\n\"prefs_calculating_app_size\" = \"Расчет размера приложения\";\n\"prefs_category_advanced\" = \"Расширенные настройки\";\n\"prefs_category_advanced_summary\" = \"Импорт/экспорт закладок, выбрать место хранения файлов и т.д.\";\n\"prefs_category_display_settings\" = \"Настройки экрана\";\n\"prefs_category_download\" = \"Настройки загрузки\";\n\"prefs_category_dual_screen\" = \"Настройки двойной страницы\";\n\"prefs_category_reading\" = \"Настройки чтения\";\n\"prefs_category_translation\" = \"Настройки перевода\";\n\"prefs_copying_app_files\" = \"Копирование файлов приложения\";\n\"prefs_display_marker_summary\" = \"Показывать всплывающие сообщения по достижении джуза, хизба и т.д.\";\n\"prefs_display_marker_title\" = \"Всплывающие сообщения\";\n\"prefs_download_amount_summary\" = \"Предпочтительный объем загрузки для прерывистого аудио\";\n\"prefs_download_amount_title\" = \"Объем скачивания\";\n\"prefs_dual_page_mode_disabled\" = \"В альбомном режиме будет отображена только одна страницы\";\n\"prefs_dual_page_mode_enabled\" = \"В альбомном режиме две страницы будут отображаться рядом друг с другом\";\n\"prefs_dual_page_mode_title\" = \"Режим планшета\";\n\"prefs_err_moving_app_files\" = \"Ошибка перемещения файлов приложения\";\n\"prefs_export_summary\" = \"Экспорт копию закладок и тегов\";\n\"prefs_export_title\" = \"Экспорт\";\n\"prefs_highlight_bookmarks_summary\" = \"Выделять при чтении аяты из закладок\";\n\"prefs_highlight_bookmarks_title\" = \"Выделять закладки\";\n\"prefs_import_summary\" = \"Импорт закладок и тегов\";\n\"prefs_import_title\" = \"Импорт\";\n\"prefs_megabytes_int\" = \"%1$d Mб\";\n\"prefs_new_background_title\" = \"Новый фон\";\n\"prefs_night_mode_background_brightness_summary\" = \"Яркость страницы при активном ночном режиме\";\n\"prefs_night_mode_background_brightness_title\" = \"Яркость фона\";\n\"prefs_night_mode_summary\" = \"Будет использован темный фон и светлый шрифт\";\n\"prefs_night_mode_text_brightness_summary\" = \"Яркость текста при включенном ночном режиме\";\n\"prefs_night_mode_text_brightness_title\" = \"Яркость текста\";\n\"prefs_night_mode_title\" = \"Ночной режим\";\n\"prefs_no_enough_space_to_move_files\" = \"Недостаточно свободного места для перемещения файлов приложения\";\n\"prefs_overlay_page_info_summary\" = \"При чтении использовать наложение поверх экрана номера страницы, название суры и номера джуза\";\n\"prefs_overlay_page_info_title\" = \"Показать инфо страницы\";\n\"prefs_page_type_summary\" = \"Выберите тип страниц\";\n\"prefs_page_type_title\" = \"Тип страниц (экспериментальный)\";\n\"prefs_preview\" = \"Предварительный просмотр\";\n\"prefs_sdcard_external\" = \"Внешняя память %1$d\";\n\"prefs_sdcard_internal\" = \"Внутренняя память\";\n\"prefs_send_logs_summary\" = \"Отправить журналы отладки разработчику\";\n\"prefs_send_logs_title\" = \"Отправить журналы\";\n\"prefs_split_page_and_translation_summary\" = \"В двухстраничном режиме отображаются страница Корана и перевод\";\n\"prefs_split_page_and_translation_title\" = \"Коран и перевод в двойном режиме\";\n\"prefs_streaming_summary\" = \"При возможности потоковое аудио\";\n\"prefs_streaming_title\" = \"Потоковое\";\n\"prefs_sura_translated_name_summary\" = \"Показать перевод названия суры\";\n\"prefs_sura_translated_name_title\" = \"Перевод названия суры\";\n\"prefs_translation_text_title\" = \"Размер текста перевода\";\n\"prefs_translations\" = \"Переводы\";\n\"prefs_translations_summary\" = \"Загрузка и управление переводами\";\n\"prefs_use_arabic_summary_on\" = \"Приложение будет локализовано под арабский язык\";\n\"prefs_use_arabic_title\" = \"Режим арабского (الوضع العربي)\";\n\"prefs_use_dyslexic_font_summary\" = \"Display translations in dyslexia friendly font\";\n\"prefs_use_dyslexic_font_title\" = \"Dyslexia friendly font\";\n\"prefs_volume_key_navigation_summary\" = \"Листать страницы с помощью кнопок громкости звука\";\n\"prefs_volume_key_navigation_title\" = \"Переход клавишами громкости\";\n\"previous\" = \"Предыдущий\";\n\"process_progress\" = \"Загрузка файла %1$d / %2$d\";\n\"qarilist_dismiss\" = \"Отклонить\";\n\"qarilist_gapless\" = \"Непрерывный\";\n\"qarilist_gapped\" = \"неконтинуальный\";\n\"qarilist_qaris_with_downloads\" = \"Чтецы с загрузками\";\n\"qarilist_ready_to_play\" = \"Готовность к прослушиванию\";\n\"qarilist_select_qari\" = \"Выберите Кари\";\n\"qarilist_selected\" = \"Избранное\";\n\"quran_ayah\" = \"Аят %1$d\";\n\"quran_ayah_details\" = \"%1$@ - аят %2$@, джуз %3$@\";\n\"quran_hizb\" = \"Хизб\";\n\"quran_juz2\" = \"Джуз\";\n\"quran_nos\" = \"½\";\n\"quran_page\" = \"Страница\";\n\"quran_rob3\" = \"¼\";\n\"quran_sura\" = \"Сура\";\n\"quran_sura_title\" = \"Сура %1$@\";\n\"quran_talt_arb3\" = \"¾\";\n\"quranSearchType\" = \"Стихи Корана\";\n\"recent_pages\" = \"Недавние страницы\";\n\"recite_from_here\" = \"Читать отсюда\";\n\"remove_button\" = \"Удалить\";\n\"remove_dlg_msg\" = \"Вы уверены, что хотите удалить %1$@?\";\n\"remove_dlg_title\" = \"Удалить перевод?\";\n\"repeatValues[0]\" = \"1 раз\";\n\"repeatValues[1]\" = \"2 раза\";\n\"repeatValues[2]\" = \"3 раза\";\n\"repeatValues[3]\" = \"непрерывно\";\n\"scoped_storage_message\" = \"Из-за изменений в системе Android, направленных на повышение конфиденциальности\\\nпользователей, копирование файлов за пределами папок приложений может предотвратить приложению Корана получить доступ\\\nк своим данным в будущих версиях Android. Вы уверены, что хотите использовать этот путь?\";\n\"sdcard_error\" = \"SD карта не найдена. Пожалуйста, вставьте карту и попробуйте снова.\";\n\"search_data\" = \"Поиск данных\";\n\"search_entire_mushaf\" = \"Обыскать весь мусхаф\";\n\"search_full_results\" = \"Полные результаты\";\n\"search_hint\" = \"Поиск по Корану\";\n\"search_key\" = \"Нажмите кнопку поиска, чтобы найти стих\";\n\"see_tafseer_of_verse\" = \"Тафсир этого аята включено в тафсире аят %d (нажмите, чтобы развернуть).\";\n\"share_ayah\" = \"Поделиться аятом\";\n\"share_ayah_text\" = \"Поделиться текстом аята\";\n\"starting_page_label\" = \"Начало страницы\";\n\"stop\" = \"Приостановить\";\n\"storage_permission_please_restart\" = \"Пожалуйста, перезапустите приложение, чтобы\\\nизменения вступили в силу.\\\n\";\n\"storage_permission_rationale\" = \"Коран хочет вашего разрешения, чтобы сохранить свои\\\nданные на внешнем хранилище. Коран будет работать без этого разрешения, но если вы будете\\\nстереть данные или удалить приложение, то все загруженные страницы, аудио и другие данные\\\nбудут удалены. Дать Корану разрешение?\\\n\";\n\"sura_ayah_notification_str\" = \"Сура %1$@, аят %2$d\";\n\"sura_ayah_sharing_str\" = \"Сура %1$@: %2$d\";\n\"tag_ayah\" = \"Создать тег для этого аята\";\n\"tag_blank_tag_error\" = \"Имена тегов не могут быть пустыми!\";\n\"tag_bookmark\" = \"Отметить закладку\";\n\"tag_dlg_title\" = \"Тег\";\n\"tag_duplicate_tag_error\" = \"Имя тега уже существует!\";\n\"tag_name\" = \"Название\";\n\"timing_database\" = \"Необходимые файлы\";\n\"to\" = \"До\";\n\"translation_ayah\" = \"Перевод/тафсир аята\";\n\"translation_dialog_later\" = \"Позже\";\n\"translation_dialog_yes\" = \"Да\";\n\"translation_updates_available\" = \"Для Ваших переводов доступны обновления. Перейти на экран переводов?\";\n\"undo\" = \"Отмена\";\n\"update_available\" = \"Доступно обновление\";\n\"warning\" = \"Внимание\";\n"
  },
  {
    "path": "Core/Localization/Resources/ru.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>audio_manager_delete_surah_error</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_delete_surah_error@</string>\n            <key>audio_manager_delete_surah_error</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Произошла ошибка при удалении %1$d сура</string>\n                <key>few</key>\n                <string>Произошла ошибка при удалении %d суры</string>\n                <key>many</key>\n                <string>Произошла ошибка при удалении %d сур</string>\n                <key>other</key>\n                <string>Произошла ошибка при удалении %1$d сур</string>\n            </dict>\n        </dict>\n        <key>audio_manager_delete_surah_success</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_delete_surah_success@</string>\n            <key>audio_manager_delete_surah_success</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Удалено %1$d сура</string>\n                <key>few</key>\n                <string>Удалено %1$d суры</string>\n                <key>many</key>\n                <string>Удалено %1$d сур</string>\n                <key>other</key>\n                <string>Удалено %1$d сур</string>\n            </dict>\n        </dict>\n        <key>audio_manager_files_downloaded</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_files_downloaded@</string>\n            <key>audio_manager_files_downloaded</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Загружено %1$d сура</string>\n                <key>few</key>\n                <string>Загружено %1$d суры</string>\n                <key>many</key>\n                <string>Загружено %1$d сур</string>\n                <key>other</key>\n                <string>Загружено %1$d сур</string>\n            </dict>\n        </dict>\n        <key>bookmark_tag_deleted</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@bookmark_tag_deleted@</string>\n            <key>bookmark_tag_deleted</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Удалено %d элемент</string>\n                <key>few</key>\n                <string>Удалено %d элемента</string>\n                <key>many</key>\n                <string>Удалено %d элементов</string>\n                <key>other</key>\n                <string>Удалено %d элементов</string>\n            </dict>\n        </dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>%2$d результат для \\&quot;%1$d\\&quot;:</string>\n                <key>few</key>\n                <string>%2$d результата для \\&quot;%1$d\\&quot;:</string>\n                <key>many</key>\n                <string>%2$d результатов для \\&quot;%1$d\\&quot;:</string>\n                <key>other</key>\n                <string>%2$d результатов для \\&quot;%1$d\\&quot;:</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>%d аят</string>\n                <key>few</key>\n                <string>%d аятa</string>\n                <key>many</key>\n                <string>%d аятов</string>\n                <key>other</key>\n                <string>%d аятов</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/ru.lproj/Localizable.strings",
    "content": "\n\n// MARK: - General\n\n// Metadata: Translated by ChatGPT; human review required.\n\"button.done\" = \"Готово\";\n// Metadata: Translated by ChatGPT; human review required.\n\"button.delete\" = \"Удалить\";\n\n// MARK: - Errors\n\n// Metadata: Translated by ChatGPT; human review required.\n\"error.dialog.title\" = \"Ошибка\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.connection_lost\" = \"Соединение с интернетом потеряно. Переместитесь в место, где доступно более стабильное соединение, или подождите, пока соединение стабилизируется.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.international_roaming_off\" = \"Международный роуминг запрещен. Измените настройки международного роуминга или включите Wi-Fi.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.not_connected_to_internet\" = \"Не подключен к интернету. Включите Wi-Fi или разрешите подключение мобильных данных.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.general\" = \"Ой! Что-то пошло не так. Пожалуйста, попробуйте снова.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.no_disk_space\" = \"Недостаточно места на диске для сохранения загрузок.\";\n\n// MARK: - Quran\n\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah\" = \"Ая\";\n// Metadata: Translated by ChatGPT; human review required.\n\"surah\" = \"Сура\";\n// Metadata: Translated by AI; human review required.\n\"quran_alquran\" = \"Коран\";\n\n// MARK: - Translation\n\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.translation\" = \"Перевод\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.transliteration\" = \"Транслитерация\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.selectedTranslations\" = \"Выбрано\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.translator\" = \"Переводчик: \";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.see-referenced-verse\" = \"Смотрите ая %d.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.read-more\" = \"Читать далее\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-retrieval\" = \"Ой! Что-то пошло не так. Нам не удалось получить перевод.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-not-available\" = \"Перевод этого ая отсутствует.\";\n\n// MARK: - Search\n\n// Metadata: Translated by ChatGPT; human review required.\n\"search.recents.title\" = \"Последние поиски\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.popular.title\" = \"Попробуйте поискать с\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.placeholder.text\" = \"Сура, аят, перевод, тафсир и номера\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.result.count\" = \"%@ (%d)\";\n\n// MARK: - Settings\n\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.write_review\" = \"Написать отзыв в магазине приложений...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.contact_us\" = \"Свяжитесь с нами\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.donate\" = \"Пожертвовать\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.share_app\" = \"Поделиться приложением...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.app_version\" = \"Версия приложения\";\n\n// MARK: - Quran Menu\n\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabic\" = \"Арабский\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translation\" = \"Перевод/Тафсир\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.select_translation\" = \"Выбрать переводы/тафсир\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer\" = \"Указатель перевода слов\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer.select_translation\" = \"Показ указателя\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.fontSizeLetter\" = \"A\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translationFontSize\" = \"Размер перевода\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabicFontSize\" = \"Размер Корана\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.twoPages\" = \"2 страницы рядом (в альбомном формате)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.verticalScrolling\" = \"Вертикальная прокрутка\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.theme_settings\" = \"Темы и настройки\";\n\n// MARK: - Theme\n\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.light\" = \"Светлая\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.dark\" = \"Темная\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto\" = \"Авто\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto.message\" = \"Приложение Коран будет соответствовать настройкам внешнего вида вашего iPhone\";\n\n// MARK: - Tabs\n\n// Metadata: Translated by ChatGPT; human review required.\n\"tab.notes\" = \"Заметки\";\n\n// MARK: - Update\n\n// Metadata: Translated by ChatGPT; human review required.\n\"update.filesystem.title\" = \"Обновление баз данных...\";\n\"downloading_title\" = \"Загрузка …\";\n\n// MARK: - Reciters\n\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.title\" = \"Выберите чтеца для прослушивания\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.recent\" = \"Недавние\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.downloaded\" = \"Загруженные\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.all\" = \"Все\";\n\n// MARK: - Audio\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.action.modify\" = \"Изменить\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.message\" = \"Воспроизведение аудио с %@ до %@\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.downloading.message\" = \"Загрузка аудио с %@ до %@\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing-verses.label\" = \"Воспроизведение стихов\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.adjust-end-verse-to-the-end.label\" = \"Настроить последний стих до конца\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-start-verse\" = \"Выбрать начальный стих\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-end-verse\" = \"Выбрать конечный стих\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount\" = \"Скачать/Воспроизвести до\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount.description\" = \"При воспроизведении аудио оно будет играть до конца\";\n\n// MARK: - Bookmarks\n\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.title\" = \"Добавление закладок...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.text\" = \"Когда вы читаете Коран, нажмите на кнопку закладки, чтобы отметить текущую страницу.\";\n\n// MARK: - Notes\n\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.title\" = \"Добавление выделений Аята...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.text\" = \"Нажмите и удерживайте Аят. Вы можете расширить выбор, чтобы включить несколько Аятов, затем нажмите на кнопку закладки.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.verses-count\" = \"(+%d аятов)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.title\" = \"Удалить выделение\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.body\" = \"Связанная заметка также будет удалена.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.title\" = \"Синхронизация iCloud\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.body\" = \"Приложение использует iCloud для синхронизации закладок и заметок на ваших устройствах. Вы можете отключить это в настройках iCloud вашего устройства.\";\n\n// MARK: - Ayah Menu\n\n\"ayah.menu.copy\" = \"Скопировать\";\n\"ayah.menu.share\" = \"Поделиться…\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-juz\" = \"до конца Джуз'\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-surah\" = \"до конца Суры\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-page\" = \"до конца страницы\";\n// Metadata: Translated by AI; human review required.\n\"ayah.menu.play-end-quran\" = \"до конца Корана\";\n\"ayah.menu.repeat\" = \"Повторение\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verse\" = \"выбранный стих\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verses\" = \"выбранные стихи\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight\" = \"Выделить\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight-select-color\" = \"выбрать цвет\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.add-note\" = \"Добавить заметку\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.edit-note\" = \"Редактировать заметку\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-note\" = \"Удалить заметку\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-highlight\" = \"Удалить выделение\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.short\" = \"Выбрать\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.long\" = \"Установить как текущий Мушаф\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.title\" = \"Выбрать Мушаф\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selection-description\" = \"Нажмите на Мушаф для получения дополнительной информации.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.hafs\" = \"Мушаф Хафс\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.pages.604\" = \"604 страницы\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.lines.15\" = \"страница в 15 линий\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.supported\" = \"Перевод слово за словом\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.not-supported\" = \"Без перевода слово за словом\";\n\n// Hafs 1405\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.title\" = \"Хафс, классическая Медина, 1405 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.description\" = \"Классический Мушаф Хафс, выпущенный в Медине в 1405 Хиджри. Приложение долгое время предлагало эту версию.\\nИз Королевского комплекса печати Корана Фахда.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.issue\" = \"Выпущен в 1405 Хиджри\";\n\n// Hafs 1421\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.title\" = \"Хафс, Медина, 1421 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.description\" = \"Мушаф Хафс, выпущенный в Медине в 1421 Хиджри. Из Королевского комплекса печати Корана Фахда.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.issue\" = \"Выпущен в 1421 Хиджри\";\n\n// Hafs 1440\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.title\" = \"Хафс, Медина, 1440 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.description\" = \"Мушаф Хафс, выпущенный в Медине в 1440 Хиджри. Из Королевского комплекса печати Корана Фахда.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.issue\" = \"Выпущен в 1440 Хиджри\";\n\n// Hafs Tajweed\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.title\" = \"Хафс, Таджвид\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.description\" = \"Мушаф Хафс Таджвид. Аль-Куран Аль-Карим - Издание Дар аль-Марефа.\";\n\n// MARK: - Diagnostics\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.title\" = \"Диагностика\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.details\" = \"Эти настройки используются разработчиком приложения специально для отладки и диагностических целей.\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.share_app_logs\" = \"Поделиться журналами приложения\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs\" = \"Включить журналирование отладки\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs.details\" = \"Настройка вступит в силу при следующем перезапуске приложения.\";\n\n\n// MARK: - What's new\n\n// Metadata: Translated by ChatGPT; human review required.\n\"new.title\" = \"Что нового\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.action\" = \"Продолжить\";\n\n// Mushafs\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs\" = \"Новые Мушафы:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs.details\" = \"Да облегчит Аллах угнетение наших братьев и сестер в Газе.\\n\\n* Таджвид Хафс Мушаф: Аль-Куран Аль-Карим - Издание Дар аль-Марефа.\\n* Мединский Мушаф 1421 хиджри.\\n* Мединский Мушаф 1440 хиджри.\\n* Кроме того, продолжайте наслаждаться классической версией 1405 хиджри.\";\n\n// Reciters\n// Metadata: Translated by ChatGPT; human review required.\n\"new.reciters\" = \"Новые чтецы:\";\n\n// Miscellaneous\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous\" = \"Разное:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous.details\" = \"* Обновленный внешний вид приложения.\\n* Улучшенная функция поиска (скоро новый алгоритм).\\n* Поддержка локализации на вьетнамский язык.\\n* Доступ к расширенным аудио настройкам, когда чтение не воспроизводится.\\n* Приложение теперь с открытым исходным кодом: https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades\" = \"Аудио:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades.details\" = \"* Регулируемая скорость чтения: 0,5x, 0,75x, 1x, 1,25x, 1,5x - спасибо @adnan29979.\\n* Воспроизведение запоминает предпочитаемую вами скорость - спасибо @adnan29979.\";\n\n// Personalization\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization\" = \"Темы чтения:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization.details\" = \"* Поддержка нескольких тем. Откройте страницу Корана -> верхнее правое меню -> Темы и настройки.\\n* Используйте 'Original', если хотите вернуться к предыдущему стилю.\";\n\n// Library & Navigation\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation\" = \"Библиотека и навигация:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation.details\" = \"* Сортируйте суры и джузы на главном экране и показывайте номера сур, чтобы быстрее перейти к нужному - спасибо @yismailuofa.\";\n"
  },
  {
    "path": "Core/Localization/Resources/ru.lproj/Readers.strings",
    "content": "\"qari_abdulaziz_zahrani_gapless\" = \"Абдульазиз аз-Захрани\";\n\"qari_abdulbaset\" = \"Абдульбасет Абдусамад (интервал)\";\n\"qari_abdulbaset_gapless\" = \"Абдульбасет Абдусамад\";\n\"qari_abdulbaset_mujawwad\" = \"Абдульбасет Абдусамад (муджаввад)\";\n\"qari_abdulbaset_mujawwad_gapless\" = \"Абдульбасет Абдусамад (муджаввад)\";\n\"qari_abdulhadi_kanakeri_gapless\" = \"АбдулХади Канакери\";\n\"qari_abdullah_matroud_gapless\" = \"Абдулла Матруд\";\n\"qari_abdulmuhsin_qasim_gapless\" = \"Абдул Мохсен Қасым\";\n\"qari_abdulrahman_alshahat_gapless\" = \"Абдульрахман аш-Шахат\";\n\"qari_abdurrashid_sufi_gapless\" = \"Абдуррашид Суфи\";\n\"qari_afasy\" = \"Мишари Рашид аль-Афаси (интервал)\";\n\"qari_afasy_cali_gapless\" = \"Мишари аль-Афаси (Калифорния)\";\n\"qari_afasy_gapless\" = \"Мишари Рашид аль-Афаси\";\n\"qari_ahmad_nauina_gapless\" = \"Ахмад Науина\";\n\"qari_ahmed_al_nufais_gapless\" = \"Ахмед Ал-Нуфайс\";\n\"qari_ajamy_gapless\" = \"Ахмед ибн Али аль-Аджами\";\n\"qari_akram_al_alaqmi\" = \"Акрам аль-Алякми\";\n\"qari_ali_hajjaj_alsouasi_gapless\" = \"Али Хажаж ас-Суваиси\";\n\"qari_ali_jaber_gapless\" = \"Али Джабер\";\n\"qari_alijon_qari_gapless\" = \"Алижон Кари\";\n\"qari_aloosi_gapless\" = \"Абдул Рахман Аль-Ауси\";\n\"qari_alzain_ahmad_gapless\" = \"Альзайн Мохаммед Ахмед\";\n\"qari_ayman_suwaid_gapless\" = \"Айман Сувейд\";\n\"qari_ayman_suwaid_gapped\" = \"Айман Сувейд (интервал)\";\n\"qari_ayyoub\" = \"Мухаммад Аюб (интервал)\";\n\"qari_ayyoub_gapless\" = \"Мухаммад Аюб\";\n\"qari_aziz_alili_gapless\" = \"Азиз Алили\";\n\"qari_badr_al_turki_gapless\" = \"Бадр Ал-Турки\";\n\"qari_bandar_baleela_gapless\" = \"Бендер Балиля\";\n\"qari_basfar\" = \"Абдуллах Басфар (интервал)\";\n\"qari_basfar_gapless\" = \"Абдуллах Басфар\";\n\"qari_dussary\" = \"Ясир ад-Дусри (интервал)\";\n\"qari_fares_abbad_gapless\" = \"Фарес Аббад\";\n\"qari_farman_shawani_gapless\" = \"Фарман Шавани\";\n\"qari_hady_toure_gapless\" = \"Hady Toure\";\n\"qari_hani_rifai\" = \"Хани ар-Рифаи (интервал)\";\n\"qari_hani_rifai_gapless\" = \"Хани ар-Рифаи\";\n\"qari_hudhayfi\" = \"Али аль-Хузайфи (интервал)\";\n\"qari_hudhayfi_gapless\" = \"Али аль-Хузайфи\";\n\"qari_husary_gapless\" = \"Махмуд Халиль аль-Хусари\";\n\"qari_husary_iza3a_gapless\" = \"Махмуд Халиль аль-Хусари (радио)\";\n\"qari_husary_muallim_gapless\" = \"Хусари (учитель)\";\n\"qari_husary_mujawwad\" = \"Махмуд Халиль аль-Хусари (муджаввад)\";\n\"qari_husary_mujawwad_gapless\" = \"Махмуд Халиль аль-Хусари (муджаввад)\";\n\"qari_ibrahim_alakhdar_gapless\" = \"Ибрагим Аль-Ахдар\";\n\"qari_idrees_abkar_gapless\" = \"Идрис Абкар\";\n\"qari_jibreel\" = \"Мухаммад Джибриль (интервал)\";\n\"qari_jibreel_gapless\" = \"Мухаммад Джибриль\";\n\"qari_juhany_gapless\" = \"Абдулла аль-Джахани\";\n\"qari_khaled_muhanna_gapless\" = \"Халед Аль-Муханна\";\n\"qari_khalid_jalil_gapless\" = \"Khalid Al-Jalil\";\n\"qari_khalid_qahtani_gapless\" = \"Халид Аль Кахтани\";\n\"qari_khalifa_taniji_gapless\" = \"Халифа Тенги\";\n\"qari_luhaidan_gapless\" = \"Мухаммад Ал-Лухайдан\";\n\"qari_mahmoud_ali_albana_gapless\" = \"Махмуд Али аль-Банна\";\n\"qari_minshawi_mujawwad\" = \"Мухаммад Сиддик аль-Миншави (муджаввад)\";\n\"qari_minshawi_mujawwad_gapless\" = \"Мухаммад Сиддик аль-Миншави\";\n\"qari_minshawi_murattal_gapless\" = \"Мухаммад Сиддик аль-Миншави\";\n\"qari_mishari_walk_gapless\" = \"Мишари & Ибрагим Уолк (английский перевод)\";\n\"qari_mohammad_altablawi_gapless\" = \"Мухаммад ат-Таблави\";\n\"qari_mokhtasar_asmari_gapless\" = \"Абдулла Аль-Асмари (Арабский комментарий)\";\n\"qari_mostafa_ismaeel_gapless\" = \"Мустафа Исмаил\";\n\"qari_muaiqly\" = \"Махир аль-Муаккили (интервал)\";\n\"qari_muaiqly_gapless\" = \"Махир аль-Муаккили\";\n\"qari_muaiqly_haramain_gapless\" = \"Махир аль-Муаккили (Харамаин)\";\n\"qari_muhammad_rashad_shereef_gapless\" = \"Мухаммад Рашад Аль-Шериф\";\n\"qari_nabil_rifa3i_gapless\" = \"Nabil Ar-Rifai\";\n\"qari_noreen_siddiq_gapless\" = \"Noreen Siddiq\";\n\"qari_peshawa_qadir_al_qurdi_gapless\" = \"Пешева Кадир аль-Курди\";\n\"qari_qatami_gapless\" = \"Насер аль-Катами\";\n\"qari_raad_al_kurdi_gapless\" = \"Раад Ал-Курди\";\n\"qari_saad_al_ghamdi\" = \"Са’д Гамиди (интервал)\";\n\"qari_saad_al_ghamidi_gapless\" = \"Са’д Гамиди\";\n\"qari_sahl_yaseen_gapless\" = \"Сахль Ясин\";\n\"qari_salah_budair_gapless\" = \"Салах Будайр\";\n\"qari_salah_bukhatir_gapless\" = \"Салех Бухатир\";\n\"qari_shatri\" = \"Абу Бакр Шатри (интервал)\";\n\"qari_shatri_gapless\" = \"Абу Бакр Шатри\";\n\"qari_shuraym\" = \"Сауд аш-Шурайм (интервал)\";\n\"qari_shuraym_gapless\" = \"Сауд аш-Шурайм\";\n\"qari_suadis\" = \"Абдуррахман ас-Судайс (интервал)\";\n\"qari_sudais_gapless\" = \"Абдуррахман ас-Судайс\";\n\"qari_tablawy\" = \"Мухаммад ат-Таблави (интервал)\";\n\"qari_tawfeeq_as_sawaigh_gapless\" = \"Tawfeeq as-Sawaigh\";\n\"qari_wadee3_alyamani_gapless\" = \"Вадих Аль-Ямани\";\n\"qari_walk\" = \"Ибрагим Уолк (английский перевод)\";\n\"qari_walk_gapless\" = \"Ибрагим Уолк (английский перевод)\";\n\"qari_yasser_dussary_gapless\" = \"Ясир ад-Дусри\";\n\"qari_yasser_salama_hadr_gapless\" = \"Ясир Салама (хадр)\";\n"
  },
  {
    "path": "Core/Localization/Resources/ru.lproj/Suras.strings",
    "content": "\"sura_names_translation[0]\" = \"Открывающая Книгу\";\n\"sura_names_translation[1]\" = \"Корова\";\n\"sura_names_translation[2]\" = \"Семейство Имрана\";\n\"sura_names_translation[3]\" = \"Женщины\";\n\"sura_names_translation[4]\" = \"Трапеза\";\n\"sura_names_translation[5]\" = \"Скот\";\n\"sura_names_translation[6]\" = \"Преграды\";\n\"sura_names_translation[7]\" = \"Добыча\";\n\"sura_names_translation[8]\" = \"Покаяние\";\n\"sura_names_translation[9]\" = \"\\\"\\\"\";\n\"sura_names_translation[10]\" = \"\\\"\\\"\";\n\"sura_names_translation[11]\" = \"\\\"\\\"\";\n\"sura_names_translation[12]\" = \"Гром\";\n\"sura_names_translation[13]\" = \"\\\"\\\"\";\n\"sura_names_translation[14]\" = \"\\\"\\\"\";\n\"sura_names_translation[15]\" = \"Пчёлы\";\n\"sura_names_translation[16]\" = \"Ночной перенос\";\n\"sura_names_translation[17]\" = \"Пещера\";\n\"sura_names_translation[18]\" = \"\\\"\\\"\";\n\"sura_names_translation[19]\" = \"\\\"\\\"\";\n\"sura_names_translation[20]\" = \"Пророки\";\n\"sura_names_translation[21]\" = \"Паломничество\";\n\"sura_names_translation[22]\" = \"Верующие\";\n\"sura_names_translation[23]\" = \"Свет\";\n\"sura_names_translation[24]\" = \"Различение\";\n\"sura_names_translation[25]\" = \"Поэты\";\n\"sura_names_translation[26]\" = \"Муравьи\";\n\"sura_names_translation[27]\" = \"Повествование\";\n\"sura_names_translation[28]\" = \"Паук\";\n\"sura_names_translation[29]\" = \"Румы\";\n\"sura_names_translation[30]\" = \"\\\"\\\"\";\n\"sura_names_translation[31]\" = \"Поклон\";\n\"sura_names_translation[32]\" = \"Сонмы\";\n\"sura_names_translation[33]\" = \"\\\"\\\"\";\n\"sura_names_translation[34]\" = \"Творец\";\n\"sura_names_translation[35]\" = \"\\\"\\\"\";\n\"sura_names_translation[36]\" = \"Выстроившиеся в ряды\";\n\"sura_names_translation[37]\" = \"\\\"\\\"\";\n\"sura_names_translation[38]\" = \"Толпы\";\n\"sura_names_translation[39]\" = \"Прощающий\";\n\"sura_names_translation[40]\" = \"Разъяснены\";\n\"sura_names_translation[41]\" = \"Совет\";\n\"sura_names_translation[42]\" = \"Украшения\";\n\"sura_names_translation[43]\" = \"Дым\";\n\"sura_names_translation[44]\" = \"Коленопреклонённые\";\n\"sura_names_translation[45]\" = \"\\\"\\\"\";\n\"sura_names_translation[46]\" = \"\\\"\\\"\";\n\"sura_names_translation[47]\" = \"Победа\";\n\"sura_names_translation[48]\" = \"Покои\";\n\"sura_names_translation[49]\" = \"\\\"\\\"\";\n\"sura_names_translation[50]\" = \"Рассеивающие\";\n\"sura_names_translation[51]\" = \"Гора\";\n\"sura_names_translation[52]\" = \"Звезда\";\n\"sura_names_translation[53]\" = \"Луна\";\n\"sura_names_translation[54]\" = \"Милостивый\";\n\"sura_names_translation[55]\" = \"Воскресение\";\n\"sura_names_translation[56]\" = \"Железо\";\n\"sura_names_translation[57]\" = \"Препирательство\";\n\"sura_names_translation[58]\" = \"Собрание\";\n\"sura_names_translation[59]\" = \"Испытуемая\";\n\"sura_names_translation[60]\" = \"Ряды\";\n\"sura_names_translation[61]\" = \"День пятничной молитвы\";\n\"sura_names_translation[62]\" = \"Лицемеры\";\n\"sura_names_translation[63]\" = \"Раскрытие самообмана\";\n\"sura_names_translation[64]\" = \"Развод\";\n\"sura_names_translation[65]\" = \"Запрещение\";\n\"sura_names_translation[66]\" = \"Власть\";\n\"sura_names_translation[67]\" = \"Тростниковое перо\";\n\"sura_names_translation[68]\" = \"Судный день\";\n\"sura_names_translation[69]\" = \"Ступени\";\n\"sura_names_translation[70]\" = \"\\\"\\\"\";\n\"sura_names_translation[71]\" = \"Джинны\";\n\"sura_names_translation[72]\" = \"Завернувшийся\";\n\"sura_names_translation[73]\" = \"Закутавшийся\";\n\"sura_names_translation[74]\" = \"Воскресение\";\n\"sura_names_translation[75]\" = \"Человек\";\n\"sura_names_translation[76]\" = \"Посылаемые\";\n\"sura_names_translation[77]\" = \"Весть\";\n\"sura_names_translation[78]\" = \"Вырывающие\";\n\"sura_names_translation[79]\" = \"Нахмурился\";\n\"sura_names_translation[80]\" = \"Погружение во мрак\";\n\"sura_names_translation[81]\" = \"Раскалывание\";\n\"sura_names_translation[82]\" = \"Обвешивающие\";\n\"sura_names_translation[83]\" = \"Раскалывание\";\n\"sura_names_translation[84]\" = \"Созвездия зодиака\";\n\"sura_names_translation[85]\" = \"Звезда, восходящая ночью\";\n\"sura_names_translation[86]\" = \"Высочайший\";\n\"sura_names_translation[87]\" = \"Покрывающее\";\n\"sura_names_translation[88]\" = \"Заря\";\n\"sura_names_translation[89]\" = \"Город\";\n\"sura_names_translation[90]\" = \"Солнце\";\n\"sura_names_translation[91]\" = \"Ночь\";\n\"sura_names_translation[92]\" = \"Утро\";\n\"sura_names_translation[93]\" = \"Раскрытие\";\n\"sura_names_translation[94]\" = \"Смоковница\";\n\"sura_names_translation[95]\" = \"Сгусток\";\n\"sura_names_translation[96]\" = \"Предопределение\";\n\"sura_names_translation[97]\" = \"Ясное знамение\";\n\"sura_names_translation[98]\" = \"Землетрясение\";\n\"sura_names_translation[99]\" = \"Скачущие\";\n\"sura_names_translation[100]\" = \"Сокрушающая беда\";\n\"sura_names_translation[101]\" = \"Приумножение\";\n\"sura_names_translation[102]\" = \"Время\";\n\"sura_names_translation[103]\" = \"Хулитель\";\n\"sura_names_translation[104]\" = \"Слон\";\n\"sura_names_translation[105]\" = \"Курейшиты\";\n\"sura_names_translation[106]\" = \"Милостыня\";\n\"sura_names_translation[107]\" = \"Обильный\";\n\"sura_names_translation[108]\" = \"Неверные\";\n\"sura_names_translation[109]\" = \"Помощь\";\n\"sura_names_translation[110]\" = \"Пальмовые волокна\";\n\"sura_names_translation[111]\" = \"Искренность\";\n\"sura_names_translation[112]\" = \"Рассвет\";\n\"sura_names_translation[113]\" = \"Люди\";\n\"sura_names[0]\" = \"Аль-Фатиха\";\n\"sura_names[1]\" = \"Аль-Бакара\";\n\"sura_names[2]\" = \"Аль \\'Имран\";\n\"sura_names[3]\" = \"Ан-Ниса\\'\";\n\"sura_names[4]\" = \"Аль-Ма\\'ида\";\n\"sura_names[5]\" = \"Аль-Ан\\'ам\";\n\"sura_names[6]\" = \"Аль-А\\'раф\";\n\"sura_names[7]\" = \"Аль-Анфаль\";\n\"sura_names[8]\" = \"Ат-Тауба\";\n\"sura_names[9]\" = \"Йунус\";\n\"sura_names[10]\" = \"Худ\";\n\"sura_names[11]\" = \"Йусуф\";\n\"sura_names[12]\" = \"Ар-Ра\\'д\";\n\"sura_names[13]\" = \"Ибрахим\";\n\"sura_names[14]\" = \"Аль-Хиджр\";\n\"sura_names[15]\" = \"Ан-Нахль\";\n\"sura_names[16]\" = \"Аль-Исра\\'\";\n\"sura_names[17]\" = \"Аль-Кахф\";\n\"sura_names[18]\" = \"Марьям\";\n\"sura_names[19]\" = \"Та Ха\";\n\"sura_names[20]\" = \"Аль-Анбийа\\'\";\n\"sura_names[21]\" = \"Аль-Хадж\";\n\"sura_names[22]\" = \"Аль-Му\\'минун\";\n\"sura_names[23]\" = \"Ан-Нур\";\n\"sura_names[24]\" = \"Аль-Фуркан\";\n\"sura_names[25]\" = \"Аш-Шу\\'ара\\'\";\n\"sura_names[26]\" = \"Ан-Намль\";\n\"sura_names[27]\" = \"Аль-Касас\";\n\"sura_names[28]\" = \"Аль-\\'Анкабут\";\n\"sura_names[29]\" = \"Ар-Рум\";\n\"sura_names[30]\" = \"Лукман\";\n\"sura_names[31]\" = \"Ас-Саджда\";\n\"sura_names[32]\" = \"Аль-Ахзаб\";\n\"sura_names[33]\" = \"Саба\\'\";\n\"sura_names[34]\" = \"Фатыр\";\n\"sura_names[35]\" = \"Йа Син\";\n\"sura_names[36]\" = \"Ас-Саффат\";\n\"sura_names[37]\" = \"Сад\";\n\"sura_names[38]\" = \"Аз-Зумар\";\n\"sura_names[39]\" = \"Гафир\";\n\"sura_names[40]\" = \"Фуссылят\";\n\"sura_names[41]\" = \"Аш-Шура\";\n\"sura_names[42]\" = \"Аз-Зухруф\";\n\"sura_names[43]\" = \"Ад-Духан\";\n\"sura_names[44]\" = \"Аль-Джасийа\";\n\"sura_names[45]\" = \"Аль-Ахкаф\";\n\"sura_names[46]\" = \"Мухаммад\";\n\"sura_names[47]\" = \"Аль-Фатх\";\n\"sura_names[48]\" = \"Аль-Худжурат\";\n\"sura_names[49]\" = \"Каф\";\n\"sura_names[50]\" = \"Аз-Зарийат\";\n\"sura_names[51]\" = \"Ат-Тур\";\n\"sura_names[52]\" = \"Ан-Наджм\";\n\"sura_names[53]\" = \"Аль-Камар\";\n\"sura_names[54]\" = \"Ар-Рахман\";\n\"sura_names[55]\" = \"Аль-Ваки\\'а\";\n\"sura_names[56]\" = \"Аль-Хадид\";\n\"sura_names[57]\" = \"Аль-Муджадала\";\n\"sura_names[58]\" = \"Аль-Хашр\";\n\"sura_names[59]\" = \"Аль-Мумтахана\";\n\"sura_names[60]\" = \"Ас-Сафф\";\n\"sura_names[61]\" = \"Аль-Джуму\\'а\";\n\"sura_names[62]\" = \"Аль-Мунафикун\";\n\"sura_names[63]\" = \"Ат-Тагабун\";\n\"sura_names[64]\" = \"Ат-Талак\";\n\"sura_names[65]\" = \"Ат-Тахрим\";\n\"sura_names[66]\" = \"Аль-Мульк\";\n\"sura_names[67]\" = \"Аль-Калам\";\n\"sura_names[68]\" = \"Аль-Хакка\";\n\"sura_names[69]\" = \"Аль-Ма\\'аридж\";\n\"sura_names[70]\" = \"Нух\";\n\"sura_names[71]\" = \"Аль-Джинн\";\n\"sura_names[72]\" = \"Аль-Муззаммиль\";\n\"sura_names[73]\" = \"Аль-Мудассир\";\n\"sura_names[74]\" = \"Аль-Кийама\";\n\"sura_names[75]\" = \"Аль-Инсан\";\n\"sura_names[76]\" = \"Аль-Мурсалят\";\n\"sura_names[77]\" = \"Ан-Наба\\'\";\n\"sura_names[78]\" = \"Ан-Нази\\'ат\";\n\"sura_names[79]\" = \"\\'Абаса\";\n\"sura_names[80]\" = \"Ат-Таквир\";\n\"sura_names[81]\" = \"Аль-Инфитар\";\n\"sura_names[82]\" = \"Аль-Мутаффифин\";\n\"sura_names[83]\" = \"Аль-Иншикак\";\n\"sura_names[84]\" = \"Аль-Бурудж\";\n\"sura_names[85]\" = \"Ат-Тарик\";\n\"sura_names[86]\" = \"Аль-А\\'ла\";\n\"sura_names[87]\" = \"Аль-Гашийа\";\n\"sura_names[88]\" = \"Аль-Фаджр\";\n\"sura_names[89]\" = \"Аль-Балад\";\n\"sura_names[90]\" = \"Аш-Шамс\";\n\"sura_names[91]\" = \"Аль-Лайл\";\n\"sura_names[92]\" = \"Ад-Духа\";\n\"sura_names[93]\" = \"Аш-Шарх\";\n\"sura_names[94]\" = \"Ат-Тин\";\n\"sura_names[95]\" = \"Аль-Алак\";\n\"sura_names[96]\" = \"Аль-Кадр\";\n\"sura_names[97]\" = \"Аль-Баййина\";\n\"sura_names[98]\" = \"Аз-Залзала\";\n\"sura_names[99]\" = \"Аль-Адийат\";\n\"sura_names[100]\" = \"Аль-Кари\\'а\";\n\"sura_names[101]\" = \"Ат-Такасур\";\n\"sura_names[102]\" = \"Аль-\\'Аср\";\n\"sura_names[103]\" = \"Аль-Хумаза\";\n\"sura_names[104]\" = \"Аль-Филь\";\n\"sura_names[105]\" = \"Курайш\";\n\"sura_names[106]\" = \"Аль-Ма\\'ун\";\n\"sura_names[107]\" = \"Аль-Каусар\";\n\"sura_names[108]\" = \"Аль-Кафирун\";\n\"sura_names[109]\" = \"Ан-Наср\";\n\"sura_names[110]\" = \"Аль-Масад\";\n\"sura_names[111]\" = \"Аль-Ихлас\";\n\"sura_names[112]\" = \"Аль-Фалак\";\n\"sura_names[113]\" = \"Ан-Нас\";\n"
  },
  {
    "path": "Core/Localization/Resources/tr.lproj/Android.strings",
    "content": "\"about_contributors\" = \"Katkıda bulunanlar\";\n\"about_contributors_summary\" = \"\\\"Quran for Android'un gelişimine katkıda bulunanlar listesi\\\"\";\n\"about_data_sources\" = \"Veri kaynakları\";\n\"about_description\" = \"\\\"Quran for Android ücretsiz bir Kur'an uygulamasıdır. Lütfen dualarınızda katkıda bulunanları unutmayın.\\\"\";\n\"about_furqan_summary\" = \"Osmanı metin ve Arapça tefsir\";\n\"about_images\" = \"Resim dosyaları\";\n\"about_madani_images\" = \"\\\"Kur'an resim dosyaları, Kral Fahd Kuran Matbaası Kompleksinin yazı fontları temelinde üretilmiştir\\\"\";\n\"about_naskh_images\" = \"\\\"Nesih Kur'an resim dosyaları SHL Info Systems'ten alınmıştır (izinle)\\\"\";\n\"about_noorhidayat_summary\" = \"Noorehira font ve Mufti Taqi meâli\";\n\"about_open_source\" = \"Açık kaynak projeler\";\n\"about_others\" = \"Diğerler\";\n\"about_qaloon_images\" = \"\\\"Qaloon resim dosyaları Nous Memes Editions Et Diffusion (Tunus)'un izniyle kullanılmıştır\\\"\";\n\"about_quran_enc\" = \"Kur\\'an-ı Kerim Ansiklopedisi\";\n\"about_quran_enc_summary\" = \"Birçok dil için çeviriler\";\n\"about_quran_ksu\" = \"Electronic Moshaf Projesi\";\n\"about_quran_ksu_summary\" = \"Uygulamanın Arapça tefsir ve çeşitli diller için meâlleri kaynağı Kral Saud Üniversitesi Electronic Moshaf projesidir. Bu proje Dr. Ayman Suwayd okunmasınında kaynağıdır.\";\n\"about_quranicaudio_summary\" = \"\\\"Sürekli mp3 Kur'an okunması\\\"\";\n\"about_tanzil_summary\" = \"Birçok dil meâlleri kaynağı\";\n\"app_name\" = \"\\\"Kur'an\\\"\";\n\"audio_manager\" = \"Ses yöneticisi\";\n\"audio_manager_delete_selection\" = \"Seçimi sil\";\n\"audio_manager_download_all\" = \"Hepsini indir\";\n\"audio_manager_download_selection\" = \"Seçimi indir\";\n\"audio_manager_remove_audio_msg\" = \"%1$@\\'yi kaldırmak istediğinizden emin misiniz?\";\n\"audio_manager_remove_audio_title\" = \"Sure kaldırılsın mı?\";\n\"audio_manager_remove_multiple_audio_msg\" = \"Silmek istediğinize emin misiniz?\";\n\"audio_manager_surah_delete\" = \"Sureyi sil\";\n\"audio_manager_surah_download\" = \"Sureyi indir\";\n\"audio_updated_text\" = \"Birkaç ses dosyaları güncellendi. Güncellenen sürümün bir\\\nsonraki oynatılmasında indirilebilmesi için bu dosyaların cihazınızdaki kopyası kaldırıldı.\\\n\";\n\"audio_updated_title\" = \"Ses dosyaları güncellendi\";\n\"available_translations\" = \"İndirmek için hazır\";\n\"ayah_copied_popup\" = \"Âyet kopyalandı\";\n\"bookmark_ayah\" = \"Bu âyeti işaretle\";\n\"bookmarks_list_empty\" = \"Sayfa işareti yok\";\n\"cancel\" = \"İptal\";\n\"canceling\" = \"İptal ediliyor\";\n\"copy_ayah\" = \"Âyet kopyala\";\n\"delete_tag\" = \"Etiketi kaldır\";\n\"delete_translation\" = \"Çeviriyi Kaldır\";\n\"dialog_ok\" = \"Tamam\";\n\"download_amount_in_megabytes\" = \"%@ MB\";\n\"download_cancel\" = \"İptal\";\n\"download_error_disk\" = \"Yeterli boş alan yok\";\n\"download_error_general\" = \"İndirme başarısız\";\n\"download_error_invalid_download\" = \"İndirilen dosya bozuk\";\n\"download_error_invalid_download_retry\" = \"Bozuk dosya, tekrar deneniyor\";\n\"download_error_network\" = \"Ağ problemi yüzünden indirilemedi\";\n\"download_error_network_retry\" = \"İnternet bağlantısı hatası, kurtarılmaya çalışılıyor\";\n\"download_error_perms\" = \"İzin verilmediği için indirilemedi\";\n\"download_extra_data\" = \"Paylaşma ve meâl için bir veya iki küçük dosya indirilmesi gerekiyor. İzin veriyor musunuz?\";\n\"download_processing\" = \"İndirme devam ediyor…\";\n\"download_progress\" = \"%1$@ / %2$@ indirildi\";\n\"download_retry\" = \"Tekrar dene\";\n\"download_successful\" = \"Başarıyla indirildi\";\n\"download_sura_ayah_progress\" = \"%1$d suresi %2$d. âyet indiriliyor\";\n\"download_sura_progress\" = \"%3$d suresinin %1$@ / %2$@ indirildi\";\n\"downloaded_translations\" = \"Yüklendi\";\n\"downloadImportantPrompt\" = \"\\\"Kur'an resim dosyaları için küçük ama önemli bir güncelleme var. Bu güncellemeyi indirmek istiyor musunuz?\\\"\";\n\"downloading_message\" = \"Lütfen dosyaların indirilmesi için bekleyin\";\n\"downloadPrompt\" = \"Daha iyi performans için bazı dosyalar SD karta kopyalanmalı.\\\nEğer şimdi bu işlemi gerçekleştirmezseniz sayfaların ayrı-ayrı indirilmesi daha uzun sürebilir.\\\nŞimdi gerekli dosyaları indirmek istiyor musunuz?\\\n\";\n\"downloadPrompt_no\" = \"Hayır\";\n\"downloadPrompt_ok\" = \"Evet\";\n\"downloadPrompt_title\" = \"Gerekli dosyalari indirelim mi?\";\n\"downloadTabletPrompt\" = \"Daha gelişmiş resimler eklendi, indirmek istiyor musunuz?\";\n\"edit_tag\" = \"Etiket güncelle\";\n\"email_us\" = \"Sorunuz yukarıda yanıtlanmamış ise destek için quranandroid@gmail.com e-posta adresine mektup yollayabilirsiniz.\\\nLütfen unutmayın ki bize çok sayıda e-posta geliyor, bu yüzden aldığımız tüm e-postaları yanıtlamayabiliriz.\";\n\"error_getting_translation_list\" = \"Meâller sayfası açılmıyor, lütfen daha sonra tekrar deneyiniz\";\n\"export_data_error\" = \"Veriler dışa aktarılırken hata oluştu\";\n\"exported_data\" = \"\\\"Veriler %1$@'e aktarıldı\\\"\";\n\"extracting_title\" = \"İşlem yapılıyor…\";\n\"found_in_sura\" = \"(%1$d) %2$@ suresi, %3$d.âyet (Sayfa %4$d)\";\n\"from\" = \"Başlangıç\";\n\"get_arabic_search_db\" = \"Arapça arama veritabanını indirin\";\n\"get_translations\" = \"Meâlleri getir\";\n\"gotoPage\" = \"Sayfaya git\";\n\"help\" = \"\\\"\\\n<b>Ses nasıl çalışılır?</b>\\\n<br/>Herhangi bir Kur'an sayfasını açın ve ekrana bir kez dokunun. Aşağıda oynat düğmesi ve hâfız adını göreceksiniz.\\\nHâfız adına dokunarak istediğiniz hâfızı seçebilirsiniz. Oynat düğmesine basarak okumakta olduğunuz sayfa veya sureyi dinleyebilirsiniz.\\\n<br/>\\\n<br/><b>Meâlleri nasıl görebilirim?</b>\\\n<br/>Herhangi bir Kur'an sayfasını açın ve ekrana bir kez dokunun. Yukarda bir dünya simgesi göreceksiniz.\\\nSimgeye basarak meâlleri görebilirsiniz.\\\n<br/>\\\nEğer indirdiğiniz hiç bir meâl yoksa, meâl indirme sayfası açılacak. İstediğiniz meâlleri seçerek indirin.\\\nKur'an sayfasına dönünce dünya simgesine tekrar basarak meâlleri okuyabilirsiniz.\\\n<br/>\\\n<br/><b>Sayfaları nasıl işaretleyebilirim?</b>\\\n<br/>Herhangi bir Kur'an sayfasını açın ve ekrana bir kez dokunun. Yukarda bir sayfa işaretleme simgesini göreceksiniz.\\\nSimgeye basarak sayfayı işaretleyin (simge beyaz renk oluverir). Simgeye bir kez daha basarak işareti silebilirsiniz.\\\n<br/>\\\n<br/><b>Metinleri nasıl büyük yapabilirim?</b>\\\n<br/>Arapça sayfalar için ekranı yan yatırın. Meâller metin büyüklüğünü Ayarlar kısmından değiştirebilirsiniz.\\\n<br/>\\\n<br/><b>Âyeti nasıl paylaşabilirim?</b>\\\n<br/>Herhangi bir Kur'an âyetine basarak tutunca yeni bir menü açılır.\\\nMenüden âyeti işaretleyebilir, paylaşabilir, meâlini okuyabilir veya âyeti kopyalayabilirsiniz.\\\"\\\n\";\n\"help_title\" = \"Sıkça sorulan sorular\";\n\"highlighting_database\" = \"Gerekli dosyalar\";\n\"import_data\" = \"Verileri içe aktar\";\n\"import_data_and_override\" = \"Bu dosyayı içe aktarırsanız, tüm işaretlerinizi %1$d işaret ve %2$d etiketle değiştirilir. Devam etmek istiyor musunuz?\";\n\"import_data_error\" = \"Geçersiz yedekleme dosyası (veya yedekleme dosyası okunamıyor)\";\n\"import_data_permissions_error\" = \"İzinler hatası nedeniyle yedekleme dosyası okunamıyor\";\n\"import_successful\" = \"İçe aktarma başarıyla tamamlandı\";\n\"juz2_description\" = \"Cüz %1$@\";\n\"kitkat_external_message\" = \"\\\"Android sistem sınırlamaları nedeniyle, Kur'an verilerini harici SD kartınıza yerleştirmeyi ve\\\ndaha sonra uygulamayı silmeyi veya verilerini temizlemeyi seçerseniz, tüm Kur'an sayfaları ve sesleri silinir ve tekrar indirmeniz gerekir.\\\nHarici SD kartı kullanmak istediğinizden emin misiniz?\\\"\";\n\"loading\" = \"Yükleniyor…\";\n\"madani\" = \"Medenî\";\n\"makki\" = \"Mekkî\";\n\"menu_about\" = \"Hakkında\";\n\"menu_back_to_page\" = \"\\\"Kur'an'ı göster\\\"\";\n\"menu_bookmarks\" = \"Sayfa işaretleri\";\n\"menu_bookmarks_ayah\" = \"Âyet işaretleri\";\n\"menu_bookmarks_page\" = \"Sayfa işaretleri\";\n\"menu_get_translations\" = \"Meâlleri indir\";\n\"menu_help\" = \"Yardım\";\n\"menu_jump\" = \"Atla\";\n\"menu_jump_last_page\" = \"Son sayfa\";\n\"menu_other_apps\" = \"Diğer uygulamalar\";\n\"menu_search\" = \"Ara\";\n\"menu_settings\" = \"Ayarlar\";\n\"menu_show_date\" = \"Tarihleri göster\";\n\"menu_sort\" = \"Sırala\";\n\"menu_sort_date\" = \"Eklendiği tarih\";\n\"menu_sort_group_by_tags\" = \"Etikete göre grupla\";\n\"menu_sort_location\" = \"\\\"Kur'an'daki yeri\\\"\";\n\"menu_translation\" = \"Mealini göster\";\n\"more_translations\" = \"Daha fazla meâller\";\n\"move_down\" = \"Aşağı Taşı\";\n\"move_up\" = \"Yukarı Taşı\";\n\"need_translation\" = \"Hiçbir meâl indirilmedi\";\n\"new_tag\" = \"Yeni etiket\";\n\"next\" = \"Sonraki\";\n\"no_arabic_search_available\" = \"Arapça arama paketi indirilmedi. Lütfen indirip daha sonra tekrar deneyin\";\n\"no_results\" = \"Bir sonuç bulunamadı \\\"%@\\\"\";\n\"not_tagged\" = \"Etiketlenmedi\";\n\"notification_channel_audio\" = \"\\\"Kur'an okunması\\\"\";\n\"notification_channel_download\" = \"\\\"Kur'an indirme\\\"\";\n\"notification_download_canceled\" = \"İndirme iptal edildi\";\n\"page_description\" = \"sayfa  %1$@, cüz %2$@\";\n\"pause\" = \"Duraklat\";\n\"play\" = \"Dinle\";\n\"play_apply\" = \"Uygula\";\n\"play_apply_and_play\" = \"Uygula ve dinle\";\n\"play_each_verse\" = \"Her âyeti\";\n\"play_from_here\" = \"Buradan dinlemeye başla\";\n\"play_restrict_range\" = \"Sadece yukarıdaki âyetleri dinle\";\n\"play_verses_range\" = \"âyetler grubu:\";\n\"playback_prompt_title\" = \"Şuradan başlat:\";\n\"playback_speed\" = \"Oynatma Hızı:\";\n\"please_grant_permissions\" = \"Lütfen uygulama ayarlarında izin verin\";\n\"please_wait\" = \"Lütfen bekleyin...\";\n\"prefs_app_location_summary\" = \"Lütfen hangi SD karta kopyalanacağını seçin\";\n\"prefs_app_location_title\" = \"Uygulama konumu\";\n\"prefs_app_size\" = \"Uygulama büyüklüğü:\";\n\"prefs_audio_manager_summary\" = \"\\\"Kur'an seslerini yönetme ve indirme\\\"\";\n\"prefs_ayah_before_translation_summary\" = \"Âyet metnini tercümeden sonra göster\";\n\"prefs_ayah_before_translation_title\" = \"Meâlden önce âyet\";\n\"prefs_calculating_app_size\" = \"Uygulama büyüklüğü hesaplanıyor\";\n\"prefs_category_advanced\" = \"Gelişmiş seçenekler\";\n\"prefs_category_advanced_summary\" = \"İşaretleri içe/dışa aktar, uygulama konumunu ayarla, vb.\";\n\"prefs_category_display_settings\" = \"Görüntüleme ayarları\";\n\"prefs_category_download\" = \"İndirme seçenekleri\";\n\"prefs_category_dual_screen\" = \"Çift Sayfa Tercihleri\";\n\"prefs_category_reading\" = \"Okuma seçenekleri\";\n\"prefs_category_translation\" = \"Meâl seçenekleri\";\n\"prefs_copying_app_files\" = \"Uygulama dosyaları kopyalanıyor\";\n\"prefs_display_marker_summary\" = \"Ekranda cüz ve hizip bilgileri görüntüle\";\n\"prefs_display_marker_title\" = \"\\\"Kur'an kısımlarını gösteren uyarı göster\\\"\";\n\"prefs_download_amount_summary\" = \"Ayrık olan ses dosyaları için indrime miktarı\";\n\"prefs_download_amount_title\" = \"İndirme miktarı\";\n\"prefs_dual_page_mode_disabled\" = \"Yatay modda tek sayfa görüntülenir\";\n\"prefs_dual_page_mode_enabled\" = \"Yatay modda iki sayfa birlikte görüntülenir\";\n\"prefs_dual_page_mode_title\" = \"Tablet modu\";\n\"prefs_err_moving_app_files\" = \"Uygulama dosyalarını taşınamadı\";\n\"prefs_export_summary\" = \"İşaret ve etiketleri dışa aktar\";\n\"prefs_export_title\" = \"Dışa aktar\";\n\"prefs_highlight_bookmarks_summary\" = \"İşaretlenen âyetleri vurgulayarak göster\";\n\"prefs_highlight_bookmarks_title\" = \"İşaretleri vurgulama\";\n\"prefs_import_summary\" = \"İşaret ve etiketleri içe aktar\";\n\"prefs_import_title\" = \"İçe aktar\";\n\"prefs_megabytes_int\" = \"%1$d MB\";\n\"prefs_new_background_title\" = \"Yeni arkaplan\";\n\"prefs_night_mode_background_brightness_summary\" = \"Gece modu etkinken sayfanın parlaklığı\";\n\"prefs_night_mode_background_brightness_title\" = \"Arka plan parlaklığı\";\n\"prefs_night_mode_summary\" = \"Karanlık arkaplan ve parlak fontlar kullanılacak\";\n\"prefs_night_mode_text_brightness_summary\" = \"Gece modu açıkken metin parlaklığı\";\n\"prefs_night_mode_text_brightness_title\" = \"Metin parlaklığı\";\n\"prefs_night_mode_title\" = \"Gece modu\";\n\"prefs_no_enough_space_to_move_files\" = \"Uygulamayı taşımak için yeterli boş alan bulunamadı\";\n\"prefs_overlay_page_info_summary\" = \"Cüz numarası, sure ismi ve sayfa numarası üstünde göster\";\n\"prefs_overlay_page_info_title\" = \"Sayfa bilgisini göster\";\n\"prefs_page_type_summary\" = \"Okuma sayfası türünü seçin\";\n\"prefs_page_type_title\" = \"Sayfa türü (deneysel)\";\n\"prefs_preview\" = \"Önizleme\";\n\"prefs_sdcard_external\" = \"Harici SD kartı %1$d\";\n\"prefs_sdcard_internal\" = \"Dahili hafıza\";\n\"prefs_send_logs_summary\" = \"Hata ayıklama günlüklerini geliştiriciye gönder\";\n\"prefs_send_logs_title\" = \"Günlükleri gönder\";\n\"prefs_split_page_and_translation_summary\" = \"Çevirilerle çift sayfa modunda, Kuran sayfası ve çevirisi gösterilir\";\n\"prefs_split_page_and_translation_title\" = \"Kur\\'an\\'dan bir sayfayı ve çeviriden başka bir sayfa görüntüleme\";\n\"prefs_streaming_summary\" = \"Online olarak ses akışı sağla\";\n\"prefs_streaming_title\" = \"Akıcı\";\n\"prefs_sura_translated_name_summary\" = \"Sure adının çevirisini göster\";\n\"prefs_sura_translated_name_title\" = \"Tercüme edilen isim\";\n\"prefs_translation_text_title\" = \"Meâllerin metin büyüklüğü\";\n\"prefs_translations\" = \"Meâller\";\n\"prefs_translations_summary\" = \"Meâli indir ve ayarla\";\n\"prefs_use_arabic_summary_on\" = \"Uygulama Arapça olarak çalışacak\";\n\"prefs_use_arabic_title\" = \"Arapça modu (الوضع العربي)\";\n\"prefs_use_dyslexic_font_summary\" = \"Display translations in dyslexia friendly font\";\n\"prefs_use_dyslexic_font_title\" = \"Dyslexia friendly font\";\n\"prefs_volume_key_navigation_summary\" = \"Sayfalar arasında ses düğmelerini kullanarak dolaş\";\n\"prefs_volume_key_navigation_title\" = \"Ses düğmesi ile dolaşma\";\n\"previous\" = \"Önceki\";\n\"process_progress\" = \"%1$d / %2$d dosya işleniyor\";\n\"qarilist_dismiss\" = \"Dağılın\";\n\"qarilist_gapless\" = \"Sürekli\";\n\"qarilist_gapped\" = \"Sürekli Olmayan\";\n\"qarilist_qaris_with_downloads\" = \"İndirilebilir Okuyucular\";\n\"qarilist_ready_to_play\" = \"Dinlemeye hazır\";\n\"qarilist_select_qari\" = \"Bir Kari Seçin\";\n\"qarilist_selected\" = \"Seçilmiş\";\n\"quran_ayah\" = \"%1$d.âyet\";\n\"quran_ayah_details\" = \"%1$@ %2$@.âyet, %3$@.cüz\";\n\"quran_hizb\" = \"Hizb\";\n\"quran_juz2\" = \"Cüz\";\n\"quran_nos\" = \"½\";\n\"quran_page\" = \"Sayfa\";\n\"quran_rob3\" = \"¼\";\n\"quran_sura\" = \"Sureler\";\n\"quran_sura_title\" = \"%1$@ suresi\";\n\"quran_talt_arb3\" = \"¾\";\n\"quranSearchType\" = \"\\\"Kur'an-i Kerîm âyetlerinde arama\\\"\";\n\"recent_pages\" = \"Son sayfalar\";\n\"recite_from_here\" = \"Buradan oku\";\n\"remove_button\" = \"Kaldır\";\n\"remove_dlg_msg\" = \"\\\"%1$@\\\" meâlini kaldırmak istediğinize emin misiniz?\";\n\"remove_dlg_title\" = \"Meâl kaldırılsın mı?\";\n\"repeatValues[0]\" = \"1 kere\";\n\"repeatValues[1]\" = \"2 kere\";\n\"repeatValues[2]\" = \"3 kere\";\n\"repeatValues[3]\" = \"sürekli\";\n\"scoped_storage_message\" = \"Kullanıcı gizliliğini artırmak için Android değişiklikleri nedeniyle, uygulama dizinlerinin dışındaki dosyaları kopyalamak, Android için Kuran\\'ın android\\'in gelecekteki sürümlerinde verilerine erişmesini durdurabilir. Bu yolu kullanmak istediğinizden emin misiniz?\";\n\"sdcard_error\" = \"SD kart bulunamadı. Lütfen monte edip tekrar deneyin.\";\n\"search_data\" = \"Veri arama\";\n\"search_entire_mushaf\" = \"Tüm mushaf\\'ı arayın\";\n\"search_full_results\" = \"Tam Sonuçlar\";\n\"search_hint\" = \"\\\"Kur'an'da arama\\\"\";\n\"search_key\" = \"\\\"Kur'an'da arama yapmak için arama tuşuna bas\\\"\";\n\"see_tafseer_of_verse\" = \"Bu âyetin tefsiri %d.âyetin tefsiri ile birlikte gelir (gözetmek için tıklayın).\";\n\"share_ayah\" = \"Âyet kısayolu paylaş\";\n\"share_ayah_text\" = \"Âyet meâlini paylaş\";\n\"starting_page_label\" = \"Sayfa başlangıcı\";\n\"stop\" = \"Durdur\";\n\"storage_permission_please_restart\" = \"Bu değişikliğin geçerli olması için lütfen uygulamayı yeniden başlatın\";\n\"storage_permission_rationale\" = \"\\\"Kur'an verilerini harici depolama alanında saklamak için izninizi istiyor.\\\nKur'an bu izin olmadan çalışabılır, ancak verileri temizlerseniz veya uygulamayı kaldırırsanız indirilen tüm sayfalar,\\\nses ve diğer veriler kaldırılır. Kur'an'a izin verir misiniz?\\\"\";\n\"sura_ayah_notification_str\" = \"Sure %1$@, âyet %2$d\";\n\"sura_ayah_sharing_str\" = \"Sure %1$@: %2$d\";\n\"tag_ayah\" = \"Bu âyeti işaretle\";\n\"tag_blank_tag_error\" = \"Etiket adı boş bırakılamaz!\";\n\"tag_bookmark\" = \"Sayfa işareti etiketi\";\n\"tag_dlg_title\" = \"Etiket\";\n\"tag_duplicate_tag_error\" = \"Etiket adı zaten var!\";\n\"tag_name\" = \"İsim\";\n\"timing_database\" = \"Gerekli dosyalar\";\n\"to\" = \"Son\";\n\"translation_ayah\" = \"Âyet meâli\";\n\"translation_dialog_later\" = \"Sonra\";\n\"translation_dialog_yes\" = \"Evet\";\n\"translation_updates_available\" = \"Meâller için güncelleme mevcut. Meâl indirme sayfasını şimdi gözetmek istermisiniz?\";\n\"undo\" = \"Geri alma\";\n\"update_available\" = \"Güncelleme var\";\n\"warning\" = \"Uyarı\";\n"
  },
  {
    "path": "Core/Localization/Resources/tr.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>audio_manager_delete_surah_error</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_delete_surah_error@</string>\n            <key>audio_manager_delete_surah_error</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Sure silinirken bir hata oluştu</string>\n                <key>other</key>\n                <string>%1$d sure silinirken bir hata oluştu</string>\n            </dict>\n        </dict>\n        <key>audio_manager_delete_surah_success</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_delete_surah_success@</string>\n            <key>audio_manager_delete_surah_success</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Sure silindi</string>\n                <key>other</key>\n                <string>%1$d sure silindi</string>\n            </dict>\n        </dict>\n        <key>audio_manager_files_downloaded</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_files_downloaded@</string>\n            <key>audio_manager_files_downloaded</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>1 sure indirildi</string>\n                <key>other</key>\n                <string>%1$d sure indirildi</string>\n            </dict>\n        </dict>\n        <key>bookmark_tag_deleted</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@bookmark_tag_deleted@</string>\n            <key>bookmark_tag_deleted</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Bir etiket silindi</string>\n                <key>other</key>\n                <string>%d etiket silindi</string>\n            </dict>\n        </dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>\\&quot;%1$d\\&quot; için bir arama sonucu:</string>\n                <key>other</key>\n                <string>\\&quot;%1$d\\&quot; için %2$d arama sonuçları:</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>1 âyet</string>\n                <key>other</key>\n                <string>%d âyet</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/tr.lproj/Localizable.strings",
    "content": "/*\n  Author: Salih Aydin <slhydn@icloud.com>\n */\n\n\n// MARK: - General\n\n\"button.done\" = \"Tamam\";\n\"button.delete\" = \"Sil\";\n\n// MARK: - Errors\n\n// Metadata: Translated by ChatGPT; human review required.\n\"error.dialog.title\" = \"Hata\";\n\"error.message.connection_lost\" = \"İnternet bağlantısı bulunamadı. İnternet bağlantısının daha stabil olduğu bir yere geçin veya düzelene kadar bekleyin.\";\n\"error.message.international_roaming_off\" = \"Uluslararası dolaşıma izin verilmedi. Uluslararası dolaşım ayarlarını değiştirin veya bir kablosuz ağa bağlanın.\";\n\"error.message.not_connected_to_internet\" = \"İnternet bağlantısı bulunamadı. Kablosuz bağlantıyı veya hücresel ağ bağlantısını etkinleştirin.\";\n\"error.message.general\" = \"Hay aksi! Bir sorun oluştu. Lütfen tekrar deneyin.\";\n\"error.message.no_disk_space\" = \"İndirilenleri kaydetmek için disk alanı yetersiz.\";\n\n// MARK: - Quran\n\n\"ayah\" = \"Ayet\";\n\"surah\" = \"Sure\";\n// Metadata: Translated by AI; human review required.\n\"quran_alquran\" = \"Kur'an\";\n\n// MARK: - Translation\n\n\"translation.text-type.translation\" = \"Meal\";\n\"translation.text-type.transliteration\" = \"Okunuşu\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.selectedTranslations\" = \"Seçildi\";\n\"translation.translator\" = \"Çevirmen: \";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.see-referenced-verse\" = \"%d ayeti görün.\";\n\"translation.text.read-more\" = \"Daha fazlası\";\n\"error.translation.text-retrieval\" = \"Hay aksi! Bir sorun çıktı. Meali bulamadık.\";\n\"error.translation.text-not-available\" = \"Bu Ayetin meali bulunmamaktadır.\";\n\n// MARK: - Search\n\n\"search.recents.title\" = \"Son aramalar\";\n\"search.popular.title\" = \"Bununla aramayı deneyin\";\n\"search.placeholder.text\" = \"Sure, ayet, meal, tefsir, and numaralar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.result.count\" = \"%@ (%d)\";\n\n// MARK: - Settings\n\n\"setting.write_review\" = \"Uygulamamızı AppStore'de değerlendirin...\";\n\"setting.contact_us\" = \"Bizimle iletişime geçin!\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.donate\" = \"Bağış Yap\";\n\"setting.share_app\" = \"Uygulamayı paylaşın...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.app_version\" = \"Uygulama sürümü\";\n\n// MARK: - Quran Menu\n\n\"menu.arabic\" = \"Arapça\";\n\"menu.translation\" = \"Meal\";\n\"menu.select_translation\" = \"Meal/Tefsir seç\";\n\"menu.pointer\" = \"Meal imleci\";\n\"menu.pointer.select_translation\" = \"İmleç Göstersin\";\n\"menu.fontSizeLetter\" = \"A\";\n\"menu.translationFontSize\" = \"Çeviri Boyutu\";\n\"menu.arabicFontSize\" = \"Kuran Boyutu\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.twoPages\" = \"Yan yana 2 sayfa (yatayda)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.verticalScrolling\" = \"Dikey kaydırma\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.theme_settings\" = \"Temalar ve ayarlar\";\n\n// MARK: - Theme\n\n\"theme.light\" = \"Açık\";\n\"theme.dark\" = \"Koyu\";\n\"theme.auto\" = \"Otomatik\";\n\"theme.auto.message\" = \"Kur'an uygulamasının teması iPhone ayarlarına göre belirlenecek\";\n\n// MARK: - Tabs\n\n\"tab.notes\" = \"Notlar\";\n\n// MARK: - Update\n\n\"update.filesystem.title\" = \"Veritabanı güncelleniyor...\";\n\"downloading_title\" = \"Yükleniyor…\";\n\n// MARK: - Reciters\n\n\"reciters.title\" = \"Dinlemek istediğiniz hafızı seçiniz\";\n\"reciters.recent\" = \"Son\";\n\"reciters.downloaded\" = \"İndirilenler\";\n\"reciters.all\" = \"Herkes\";\n\n// MARK: - Audio\n\n\"audio.playing.action.modify\" = \"Düzenle\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.message\" = \"%@ ile %@ arası ses oynatılıyor\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.downloading.message\" = \"%@ ile %@ arasındaki ses indiriliyor\";\n\n\"audio.playing-verses.label\" = \"Okunan ayetler\";\n\"audio.adjust-end-verse-to-the-end.label\" = \"Bitişi sonuna ayarla\";\n\n\"audio.select-start-verse\" = \"Başlangıç Ayetini Seçin\";\n\"audio.select-end-verse\" = \"Son Ayeti Seçin\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount\" = \"İndir/Oynatma limiti\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount.description\" = \"Ses oynatılırken, sonuna kadar oynatılacak\";\n\n// MARK: - Bookmarks\n\n\"bookmarks.no-data.title\" = \"Ayraçlar ekleniyor...\";\n\"bookmarks.no-data.text\" = \"Kur'an okurken, bulunduğunuz sayfayı işaretlemek için Ayraç butonuna basın.\";\n\n// MARK: - Notes\n\n\"notes.no-data.title\" = \"Vurgulanan ayetler kaydediliyor...\";\n\"notes.no-data.text\" = \"Ayete dokunup basılı tutun. Birden fazla ayet seçmek için parmağınızı sürükleyebilirsiniz, sonrasında tekrar Ayraç butonuna basın.\";\n\"notes.verses-count\" = \"(+%d ayet)\";\n\"notes.delete.alert.title\" = \"Vurguyu silin\";\n\"notes.delete.alert.body\" = \"İlgili not silinecek.\";\n\"notes.icloud.alert.title\" = \"iCloud Senkronizasyonu\";\n\"notes.icloud.alert.body\" = \"Uygulama ayraçları ve notlarınızı farklı cihazlarınız arasında kullanabilmeniz için iCloud senkronizasyonunu kullanmaktadır. Bu özelliği cihazınızın iCloud ayarlarından kapatabilirsiniz.\";\n\n// MARK: - Ayah Menu\n\n\"ayah.menu.copy\" = \"Kopyala\";\n\"ayah.menu.share\" = \"Paylaş...\";\n\"ayah.menu.play-end-juz\" = \"Cüzün sonuna kadar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-surah\" = \"Sure'nin sonuna kadar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-page\" = \"Sayfanın sonuna kadar\";\n// Metadata: Translated by AI; human review required.\n\"ayah.menu.play-end-quran\" = \"Kur'an'ın sonuna kadar\";\n\"ayah.menu.repeat\" = \"Tekrarlamak\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verse\" = \"seçilen ayet\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verses\" = \"seçilen ayetler\";\n\"ayah.menu.highlight\" = \"Vurgula\";\n\"ayah.menu.highlight-select-color\" = \"renk seç\";\n\"ayah.menu.add-note\" = \"Not Ekle\";\n\"ayah.menu.edit-note\" = \"Notu Düzenle\";\n\"ayah.menu.delete-note\" = \"Notu Sil\";\n\"ayah.menu.delete-highlight\" = \"Vurgulanan Yeri Sil\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.short\" = \"Seç\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.long\" = \"Mevcut Mushaf olarak ayarla\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.title\" = \"Mushaf Seç\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selection-description\" = \"Daha fazla bilgi için bir Mushaf'a dokunun.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.hafs\" = \"Hafs Mushaf\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.pages.604\" = \"604 sayfa\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.lines.15\" = \"15 satırlık sayfa\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.supported\" = \"Kelime kelime çeviri\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.not-supported\" = \"Kelime kelime çeviri yok\";\n\n// Hafs 1405\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.title\" = \"Hafs, klasik Medine, 1405 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.description\" = \"1405 Hicri yılında Medine'de yayımlanan klasik Hafs Mushaf. Uygulama uzun süre bu versiyonu sundu.\\nKral Fahd Kuran Basım Kompleksinden.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.issue\" = \"1405 Hicri yılında yayımlandı\";\n\n// Hafs 1421\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.title\" = \"Hafs, Medine, 1421 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.description\" = \"1421 Hicri yılında Medine'de yayımlanan Hafs Mushaf. Kral Fahd Kuran Basım Kompleksinden.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.issue\" = \"1421 Hicri yılında yayımlandı\";\n\n// Hafs 1440\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.title\" = \"Hafs, Medine, 1440 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.description\" = \"1440 Hicri yılında Medine'de yayımlanan Hafs Mushaf. Kral Fahd Kuran Basım Kompleksinden.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.issue\" = \"1440 Hicri yılında yayımlandı\";\n\n// Hafs Tajweed\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.title\" = \"Hafs, Tecvid\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.description\" = \"Tecvid Hafs Mushaf. Al-Quran Al-Kareem - Dar al-Marefa Baskısı.\";\n\n// MARK: - Diagnostics\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.title\" = \"Teşhisler\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.details\" = \"Bu ayarlar, uygulama geliştiricisi tarafından özellikle hata ayıklama ve tanı amaçları için kullanılır.\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.share_app_logs\" = \"Uygulama günlüklerini paylaş\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs\" = \"Hata ayıklama kaydını etkinleştir\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs.details\" = \"Ayar, uygulamanın bir sonraki yeniden başlatılmasında etkili olacak.\";\n\n\n// MARK: - What's new\n\n\"new.title\" = \"Yenilikler\";\n\"new.action\" = \"Devam Et\";\n\n// Mushafs\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs\" = \"Yeni Mushaflar:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs.details\" = \"Allah, Gazze'deki kardeşlerimizin ve bacılarımızın üzerindeki zulmü kaldırsın.\\n\\n* Tecvid Hafs Mushaf: Al-Quran Al-Kareem - Dar al-Marefa Baskısı.\\n* Medine Mushafı 1421 hicri.\\n* Medine Mushafı 1440 hicri.\\n* Ayrıca, klasik 1405 hicri versiyonunun keyfini çıkarmaya devam edin.\";\n\n// Reciters\n// Metadata: Translated by ChatGPT; human review required.\n\"new.reciters\" = \"Yeni Hafızlar:\";\n\n// Miscellaneous\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous\" = \"Çeşitli:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous.details\" = \"* Güncellenmiş uygulama görünümü.\\n* Geliştirilmiş arama özelliği (yakında yeni algoritma).\\n* Vietnamca yerelleştirme desteği.\\n* Kıraat oynatılmadığında gelişmiş ses seçeneklerine erişim mevcut.\\n* Uygulama artık açık kaynaklı: https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades\" = \"Ses:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades.details\" = \"* Ayarlanabilir kıraat hız kontrolü: 0.5x, 0.75x, 1x, 1.25x, 1.5x - @adnan29979 sayesinde.\\n* Oynatma tercih ettiğiniz hızı hatırlar - @adnan29979 sayesinde.\";\n\n// Personalization\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization\" = \"Okuma Temaları:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization.details\" = \"* Birden fazla tema desteği. Bir Kur'an sayfası açın -> Sağ üst menü -> Temalar ve Ayarlar.\\n* Önceki stile dönmek isterseniz 'Original'i kullanın.\";\n\n// Library & Navigation\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation\" = \"Kütüphane ve Gezinme:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation.details\" = \"* Ana Sayfa'da sureleri ve cüzleri sıralayın ve sure numaralarını gösterin, böylece ihtiyacınız olana daha hızlı ulaşabilirsiniz - @yismailuofa sayesinde.\";\n"
  },
  {
    "path": "Core/Localization/Resources/tr.lproj/Suras.strings",
    "content": "\"sura_names[0]\" = \"Fâtiha\";\n\"sura_names[1]\" = \"Bakara\";\n\"sura_names[2]\" = \"Âl-i İmrân\";\n\"sura_names[3]\" = \"Nisâ\";\n\"sura_names[4]\" = \"Mâide\";\n\"sura_names[5]\" = \"En\\'âm\";\n\"sura_names[6]\" = \"A\\'râf\";\n\"sura_names[7]\" = \"Enfâl\";\n\"sura_names[8]\" = \"Tevbe\";\n\"sura_names[9]\" = \"Yûnus\";\n\"sura_names[10]\" = \"Hûd\";\n\"sura_names[11]\" = \"Yûsuf\";\n\"sura_names[12]\" = \"Ra\\'d\";\n\"sura_names[13]\" = \"İbrâhîm\";\n\"sura_names[14]\" = \"Hicr\";\n\"sura_names[15]\" = \"Nahl\";\n\"sura_names[16]\" = \"İsrâ\";\n\"sura_names[17]\" = \"Kehf\";\n\"sura_names[18]\" = \"Meryem\";\n\"sura_names[19]\" = \"Tâhâ\";\n\"sura_names[20]\" = \"Enbiyâ\";\n\"sura_names[21]\" = \"Hac\";\n\"sura_names[22]\" = \"Mu\\'minûn\";\n\"sura_names[23]\" = \"Nûr\";\n\"sura_names[24]\" = \"Furkân\";\n\"sura_names[25]\" = \"Şuarâ\";\n\"sura_names[26]\" = \"Neml\";\n\"sura_names[27]\" = \"Kasas\";\n\"sura_names[28]\" = \"Ankebût\";\n\"sura_names[29]\" = \"Rum\";\n\"sura_names[30]\" = \"Lokmân\";\n\"sura_names[31]\" = \"Secde\";\n\"sura_names[32]\" = \"Ahzâb\";\n\"sura_names[33]\" = \"Sebe\";\n\"sura_names[34]\" = \"Fâtir\";\n\"sura_names[35]\" = \"Yâsîn\";\n\"sura_names[36]\" = \"Sâffât\";\n\"sura_names[37]\" = \"Sâd\";\n\"sura_names[38]\" = \"Zumer\";\n\"sura_names[39]\" = \"Mü\\'min\";\n\"sura_names[40]\" = \"Fussilet\";\n\"sura_names[41]\" = \"Şûrâ\";\n\"sura_names[42]\" = \"Zuhrûf\";\n\"sura_names[43]\" = \"Duhân\";\n\"sura_names[44]\" = \"Câsiye\";\n\"sura_names[45]\" = \"Ahkâf\";\n\"sura_names[46]\" = \"Muhammed\";\n\"sura_names[47]\" = \"Fetih\";\n\"sura_names[48]\" = \"Hucurât\";\n\"sura_names[49]\" = \"Kaf\";\n\"sura_names[50]\" = \"Zâriyât\";\n\"sura_names[51]\" = \"Tûr\";\n\"sura_names[52]\" = \"Necm\";\n\"sura_names[53]\" = \"Kamer\";\n\"sura_names[54]\" = \"Rahmân\";\n\"sura_names[55]\" = \"Vâkia\";\n\"sura_names[56]\" = \"Hadîd\";\n\"sura_names[57]\" = \"Mucâdele\";\n\"sura_names[58]\" = \"Haşr\";\n\"sura_names[59]\" = \"Mümtehine\";\n\"sura_names[60]\" = \"Saff\";\n\"sura_names[61]\" = \"Cuma\";\n\"sura_names[62]\" = \"Münâfikûn\";\n\"sura_names[63]\" = \"Teğâbün\";\n\"sura_names[64]\" = \"Talâk\";\n\"sura_names[65]\" = \"Tahrîm\";\n\"sura_names[66]\" = \"Mülk\";\n\"sura_names[67]\" = \"Kalem\";\n\"sura_names[68]\" = \"Hâkka\";\n\"sura_names[69]\" = \"Meâric\";\n\"sura_names[70]\" = \"Nuh\";\n\"sura_names[71]\" = \"Cinn\";\n\"sura_names[72]\" = \"Müzzemmil\";\n\"sura_names[73]\" = \"Müddessir\";\n\"sura_names[74]\" = \"Kıyâme\";\n\"sura_names[75]\" = \"İnsân (Dehr)\";\n\"sura_names[76]\" = \"Mürselât\";\n\"sura_names[77]\" = \"Nebe\";\n\"sura_names[78]\" = \"Nâziât\";\n\"sura_names[79]\" = \"Abese\";\n\"sura_names[80]\" = \"Tekvîr\";\n\"sura_names[81]\" = \"İnfitâr\";\n\"sura_names[82]\" = \"Mutaffifîn\";\n\"sura_names[83]\" = \"İnşikak\";\n\"sura_names[84]\" = \"Bürûc\";\n\"sura_names[85]\" = \"Târik\";\n\"sura_names[86]\" = \"A\\'lâ\";\n\"sura_names[87]\" = \"Gâşiye\";\n\"sura_names[88]\" = \"Fecr\";\n\"sura_names[89]\" = \"Beled\";\n\"sura_names[90]\" = \"Şems\";\n\"sura_names[91]\" = \"Leyl\";\n\"sura_names[92]\" = \"Duhâ\";\n\"sura_names[93]\" = \"İnşirâh\";\n\"sura_names[94]\" = \"Tîn\";\n\"sura_names[95]\" = \"Alak\";\n\"sura_names[96]\" = \"Kadr (Kadir)\";\n\"sura_names[97]\" = \"Beyyine\";\n\"sura_names[98]\" = \"Zilzâl\";\n\"sura_names[99]\" = \"Âdiyât\";\n\"sura_names[100]\" = \"Kâria\";\n\"sura_names[101]\" = \"Tekâsür\";\n\"sura_names[102]\" = \"Asr\";\n\"sura_names[103]\" = \"Hümeze\";\n\"sura_names[104]\" = \"Fil\";\n\"sura_names[105]\" = \"Kureyş\";\n\"sura_names[106]\" = \"Mâûn\";\n\"sura_names[107]\" = \"Kevser\";\n\"sura_names[108]\" = \"Kâfirûn\";\n\"sura_names[109]\" = \"Nasr\";\n\"sura_names[110]\" = \"Tebbet (Mesed)\";\n\"sura_names[111]\" = \"İhlâs\";\n\"sura_names[112]\" = \"Felak\";\n\"sura_names[113]\" = \"Nâs\";\n"
  },
  {
    "path": "Core/Localization/Resources/ug.lproj/Android.strings",
    "content": "\"about_contributors\" = \"تۆھپىكارلار\";\n\"about_contributors_summary\" = \"قۇرئان ئاندىرويىدنىڭ تەرەققىياتىغا تۆھپە قوشقان كىشىلەر تىزىمى\";\n\"about_data_sources\" = \"سانلىق مەلۇمات مەنبەسى\";\n\"about_description\" = \"ئاندىرويىد قۇرئان ھەقسىز قۇرئان ئەپى. نامازلىرىڭىزدا تۆھپىكارلارغا دۇئا قىلىشنى ئۇنۇتماڭ.\";\n\"about_furqan_summary\" = \"ئۇسمانى تېكىست ۋە ئەرەبچە تەپسىر\";\n\"about_images\" = \"سۈرەتلەر\";\n\"about_madani_images\" = \"قۇرئان سۈرەتلىرى پادىشاھ فاھىد قۇرئان باسما زاۋۇتىنىڭ خەت نۇسخىسىنى ئاساس قىلغان\";\n\"about_naskh_images\" = \"Naskh ئەپىنىڭ قۇرئان سۈرەتلىرى (ئىجازەت بىلەن) SHL ئۇچۇر سىستېمىسىدىن ئېلىنغان\";\n\"about_noorhidayat_summary\" = \"نۇرېخىرا خەت نۇسخىسى ۋە تەپسىرچى تاقى تەرجىمىسى\";\n\"about_open_source\" = \"ئوچۇق مەنبەلىك قۇرۇلۇش\";\n\"about_others\" = \"باشقىلار\";\n\"about_qaloon_images\" = \"قالۇن سۈرەتلىرى Nous Memes Editions Et Diffusion (تۇنىس) نىڭ رۇخسىتى بىلەن ئىشلىتىلدى.\";\n\"about_quran_enc\" = \"قۇرئان كەرىم ئىنىسكىلوپىدىيىسى\";\n\"about_quran_enc_summary\" = \"نۇرغۇن تىللارنىڭ تەرجىمىسى\";\n\"about_quran_ksu\" = \"ئېلېكترونلۇق موشاف قۇرۇلۇشى\";\n\"about_quran_ksu_summary\" = \"پادىشاھ سەئۇد ئۇنىۋېرسىتېتى ئېلېكترونلۇق موشاف قۇرۇلۇشى كۆپلىگەن تىلدىكى ئەرەبچە تەپسىر ۋە تەرجىمىلەرنىڭ مەنبەسى. ئۇ يەنە دوكتور ئايمان سۇۋەيدنىڭ قىرائىتىنىڭمۇ مەنبەسى.\";\n\"about_quranicaudio_summary\" = \"يوچۇقسىز mp3 قۇرئان تىلاۋەتلىرى\";\n\"about_tanzil_summary\" = \"ئازراق تىللارنىڭ تەرجىمىسى\";\n\"app_name\" = \"قۇرئان\";\n\"audio_manager\" = \"ئاۋاز تەڭشەكلىرى\";\n\"audio_manager_delete_selection\" = \"تاللانغانلارنى ئۆچۈرۈڭ\";\n\"audio_manager_download_all\" = \"ھەممىنى چۈشۈرۈڭ\";\n\"audio_manager_download_selection\" = \"چۈشۈرۈش تاللاش\";\n\"audio_manager_remove_audio_msg\" = \"سىز %1$@ نى ئۆچۈرمەكچىمۇ؟\";\n\"audio_manager_remove_audio_title\" = \"سۈرىنى ئۆچۈرەمسىز؟\";\n\"audio_manager_remove_multiple_audio_msg\" = \"سىز نى ئۆچۈرمەكچىمۇ؟\";\n\"audio_manager_surah_delete\" = \"ئاۋاز ھۆججىتىنى ئۆچۈرۈڭ\";\n\"audio_manager_surah_download\" = \"چۈشۈرۈش سۈرە\";\n\"audio_updated_text\" = \"بىر قانچە قۇرئان ئاۋاز ھۆججىتى يېڭىلاندى. قۇرئان بۇ ھۆججەتلەرنىڭ كۆپەيتىلگەن نۇسخىسىنى چىقىرىۋەتتى، بۇنداق بولغاندا ئەڭ يېڭى نەشرىنى كېلەر قېتىم قايتا قويسىڭىز چۈشۈرگىلى بولىدۇ.\";\n\"audio_updated_title\" = \"قۇرئان ئاۋاز ھۆججىتى يېڭىلاش\";\n\"available_translations\" = \"چۈشۈرگىلى بولىدۇ\";\n\"ayah_copied_popup\" = \"ئايەت كۆچۈرۈلدى\";\n\"bookmark_ayah\" = \"بۇ ئايەتنى خەتكۈچلە\";\n\"bookmarks_list_empty\" = \"خەتكۈچ يوق\";\n\"cancel\" = \"ۋاز كەچ\";\n\"canceling\" = \"ۋاز كېچىۋاتىدۇ…\";\n\"copy_ayah\" = \"ئايەت كۆچۈر\";\n\"delete_tag\" = \"بەلگە ئۆچۈر\";\n\"delete_translation\" = \"تەرجىمىنى چىقىرىۋەت\";\n\"dialog_ok\" = \"جەزملە\";\n\"download_amount_in_megabytes\" = \"%@ م ب\";\n\"download_cancel\" = \"ۋاز كەچ\";\n\"download_error_disk\" = \"چۈشۈرۈشكە يېتەرلىك دىسكا بوشلۇقى يوق\";\n\"download_error_general\" = \"چۈشۈرەلمىدى\";\n\"download_error_invalid_download\" = \"چۈشۈرگەن ھۆججەت بۇزۇلدى\";\n\"download_error_invalid_download_retry\" = \"ھۆججەت بۇزۇلغان، قايتا چۈشۈرۈشنى سىناۋاتىدۇ\";\n\"download_error_network\" = \"تور خاتالىقى تۈپەيلىدىن چۈشۈرەلمەيدۇ\";\n\"download_error_network_retry\" = \"تور خاتالىقى، داۋاملاشتۇرۇشنى سىناۋاتىدۇ…\";\n\"download_error_perms\" = \"ھوقۇق خاتالىقى تۈپەيلىدىن چۈشۈرەلمەيدۇ\";\n\"download_extra_data\" = \"ھەمبەھىر ۋە تەرجىمە ئىقتىدارىنى قوللاش ئۈچۈن بىر ياكى ئىككى كىچىك ھۆججەت چۈشۈرۈشىمىز كېرەك. ھازىر چۈشۈرەمدۇ؟\";\n\"download_processing\" = \"چۈشۈرۈشنى بىر تەرەپ قىلىۋاتىدۇ…\";\n\"download_progress\" = \"%1$@ / %2$@ چۈشۈرۈلدى\";\n\"download_retry\" = \"قايتا سىنا\";\n\"download_successful\" = \"چۈشۈرۈش مۇۋەپپەقىيەتلىك\";\n\"download_sura_ayah_progress\" = \"چۈشۈرۈش سۈرە %1$d ئايەت %2$d\";\n\"download_sura_progress\" = \"چۈشۈرۈش سۈرە %3$d - %1$@ / %2$@\";\n\"downloaded_translations\" = \"چۈشۈرۈلدى\";\n\"downloadImportantPrompt\" = \"ئۈسكۈنىڭىز ئۈچۈن ئۆزى كىچىك ئەمما مۇھىم بولغان قۇرئان سۈرەتلىرىنىڭ يېڭىلانمىسى بار. بۇ ياماقنى ھازىرلا چۈشۈرەمسىز؟\";\n\"downloading_message\" = \"ھۆججەتلەرنى چۈشۈرۈشنى كۈتۈڭ. (داۋاملاشتۇرۇشنى قوللايدۇ)\";\n\"downloadPrompt\" = \"قۇرئان ئاندىرويىدنىڭ نورمال ئىشلىشى ئۈچۈن بەزى ھۆججەتلەرنى چۈشۈرۈشىمىز كېرەك. ئەگەر ھازىر بۇنى قىلمىسىڭىز، بۇ دېتال ئىشەنچلىك ئىشلىمەسلىكى مۇمكىن، ئوقۇش ئۈچۈن ئىنتېرنېت ئۇلىنىشى تەلەپ قىلىنىدۇ. لازىملىق ھۆججەتلەرنى ھازىر چۈشۈرەمسىز؟\";\n\"downloadPrompt_no\" = \"ياق\";\n\"downloadPrompt_ok\" = \"ھەئە\";\n\"downloadPrompt_title\" = \"لازىملىق ھۆججەتلەرنى چۈشۈرەمدۇ؟\";\n\"downloadTabletPrompt\" = \"بىز يېقىندا تاختا كومپيۇتېر ئۈچۈن ياخشىلانغان سۈرەتلەرنى قوشتۇق. ئۇ سۈرەتلەرنى ھازىر چۈشۈرەمسىز؟\";\n\"edit_tag\" = \"بەلگە تەھرىر\";\n\"email_us\" = \"ئەگەر سوئالىڭىزنىڭ تۆۋەندە جاۋابى بولمىسا، سىز quranandroid@gmail.com ئېلخەت ئادرېسقا قوللاش ھەققىدە خەت يازسىڭىز بولىدۇ. بىز نۇرغۇن ئېلخەت تاپشۇرۇۋالىمىز، شۇڭلاشقا ھەممە ئېلخەتكە جاۋاب قايتۇرالىشىمىز ناتايىن.\";\n\"error_getting_translation_list\" = \"تەرجىمە تىزىمىنى چۈشۈرەلمىدى. كېيىن قايتا سىناڭ.\";\n\"export_data_error\" = \"سانلىق مەلۇمات چىقارغاندا خاتالىق كۆرۈلدى\";\n\"exported_data\" = \"سانلىق مەلۇماتنى %1$@ غا چىقاردى\";\n\"extracting_title\" = \"بىر تەرەپ قىلىۋاتىدۇ…\";\n\"found_in_sura\" = \"سۈرە (%1$d) %2$@ تېپىلدى: %3$d (%4$d-بەت)\";\n\"from\" = \"ئايەتتىن\";\n\"get_arabic_search_db\" = \"ئەرەبچە ئىزدەش ساندانىغا ئېرىش\";\n\"get_translations\" = \"تەرجىمىگە ئېرىش\";\n\"gotoPage\" = \"بەتكە يۆتكەل\";\n\"help\" = \"\\\"<b>قىرائەت ئاۋازىنى قانداق قويىدۇ؟</b> <br/> خالىغان قۇرئان بېتىنى ئېچىپ، بارماق ئېكرانغا بوش تەگكەندە، ئېكران ئاستىدا قىرائەت توپچىسى ۋە قىرائەت قىلغۇچىنىڭ ئىسمى كۆرۈنىدۇ. قىرائەت قىلغۇچىنىڭ ئىسمىنى چېكىپ قىرائەت قىلغۇچىلارنى تاللىغىلى بولىدۇ، چېلىش توپچىسىنى چېكىلسە نۆۋەتتىكى بەت ياكى نۆۋەتتىكى سۈرەنىڭ قىرائەت ئاۋازىنى چۈشۈرگەندىن كېيىن ئاۋازنى قويۇشنى باشلايدۇ . <br/> <br/><b>تەرجىمىنى قانداق كۆرۈمەن؟</b> <br/>خالىغان قۇرئان بېتىنى ئېچىپ، بارماق ئېكرانغا بوش تەگكەندە، ئېكران چوققىسىدىكى يەر شارى سىنبەلگە (ياكى ئۈچ يۇمۇلاق چېكىتتىن شەكىللەنگەن سىنبەلگە) نى چەككەندىن كېيىن تەرجىمە بېتىنى كۆرگىلى بولىدۇ. <br/> ئەگەر سىز تېخى ھېچقانداق تەرجىمە نەشرىنى چۈشۈرمىگەن بولسىڭىز، بۇ چاغدا تەرجىمە تېكىستىنى چۈشۈرۈش ۋە باشقۇرۇش بېتىگە كىرىدۇ، لازىملىق تەرجىمىنى تاللاپ چۈشۈرگەندىن كېيىن قايتىدۇ، يەر شارى سىنبەلگە قايتا چېكىلسە تەرجىمە تېكىست بېتىگە كىرىدۇ. <br/> <br/><b>بەتكە خەتكۈچنى قانداق قوشىمەن؟</b> <br/>خالىغان قۇرئان بېتىنى ئېچىپ، بارماق ئېكرانغا بوش تەگكەندە، ئېكران چوققىسىدا بەش يۇلتۇز سىنبەلگىسى كۆرۈنىدۇ، ئۇنى چەككەندىن كېيىن نۆۋەتتىكى بەتنى خەتكۈچكە قوشقىلى بولىدۇ، شۇنىڭ بىلەن بىللە كاۋاك بەش يۇلتۇز ئۇيۇل بەش يۇلتۇزغا ئۆزگىرىدۇ. سىنبەلگە قايتا چېكىلسە خەتكۈچ بىكار قىلىنىدۇ. <br/> <br/><b>تېكىستنى قانداق چوڭايتىمەن؟</b> <br/>ئەرەبچە ئەسلى تېكىست بېتىدە، توغرىسىغا ئېكرانغا ئالماشقاندا خەت چوڭىيىدۇ. تەرجىمە تېكىست بېتىدە تەڭشەكلەردىن خەت چوڭلۇقىنى تاللىغىلى بولىدۇ. <br/> <br/><b>بىر ئايەتنى قانداق ھەمبەھىرلەيمەن؟</b> <br/>ئەرەبچە ئەسلى تېكىست بېتىدە، مەلۇم بىر ئايەت ئۇزۇن چېكىلسە تىل مۇھىت تىزىملىكى قاڭقىپ چىقىدۇ، ئۇنىڭدا خەتكۈچ، ھەمبەھىر، تەرجىمىنى كۆرۈش، چاپلاش تاختىسىغا كۆچۈرۈش قاتارلىق ئىقتىدارلار بار. <br/> <br/><b>مالايالام/تامىل/بىنگال/ئوردۇچە خەت نۇسخىسى ئىشلىمەيدۇ!</b> <br/>ناھايىتى ئەپسۇس، ئاندىرويىد 4.0 دىن ئىلگىرىكى نەشرىلىرىدە بۇ خەت نۇسخىلىرىنى قوللىماىدۇ، ھازىرچە ياخشىراق ھەل قىلىش چارىسى يوق.\\\"\";\n\"help_title\" = \"كۆپ سورىلىدىغان سوئاللار\";\n\"highlighting_database\" = \"زۆرۈر ھۆججەتلەر\";\n\"import_data\" = \"سانلىق مەلۇمات ئەكىر\";\n\"import_data_and_override\" = \"ئەگەر بۇ ھۆججەتنى ئەكىرسىڭىز، %1$d خەتكۈچ ۋە %2$d بەلگە بار ھەممە خەتكۈچلىرىڭىزنى ئالماشتۇرۇۋېتىدۇ. ئەكىرەمدۇ؟\";\n\"import_data_error\" = \"ئىناۋەتسىز زاپاس ھۆججەت (ياكى زاپاس ھۆججەتنى ئوقۇيالمىدى).\";\n\"import_data_permissions_error\" = \"ئىجازەت خاتالىقى سەۋەبىدىن زاپاس ھۆججەتنى ئوقۇيالمىدى.\";\n\"import_successful\" = \"مۇۋەپپەقىيەتلىك ئەكىرىلدى\";\n\"juz2_description\" = \"%1$@ -پارە\";\n\"kitkat_external_message\" = \"ئاندىرويىدنىڭ چەكلىمىسى تۈپەيلىدىن، ئەگەر سىز قۇرئان سانلىق مەلۇماتلىرىنى سىرتقى SD كارتىڭىزغا ساقلىماقچى بولسىڭىز، كېيىن قۇرئان ئاندىرويىدنىڭ سانلىق مەلۇماتلارنى ئۆچۈرۈۋەتسىڭىز ياكى ئۆچۈرسىڭىز، بارلىق قۇرئان ئاندىرويىد بەتلىرى ۋە ئاۋازلىرى ئۆچۈرۈلىدۇ، ئۇلارنى قايتا چۈشۈرۈشىڭىز كېرەك. سىرتقى SD كارتىنى ئىشلىتىشنى خالامسىز؟\";\n\"loading\" = \"يۈكلەۋاتىدۇ…\";\n\"madani\" = \"مەدىنە\";\n\"makki\" = \"مەككە\";\n\"manzil_description\" = \"مەنزىل  %1$@\";\n\"menu_about\" = \"بىز ھەققىدە\";\n\"menu_back_to_page\" = \"قۇرئاننى كۆرسەت\";\n\"menu_bookmarks\" = \"خەتكۈچلەر\";\n\"menu_bookmarks_ayah\" = \"ئايەت بەتكۈچلىرى\";\n\"menu_bookmarks_page\" = \"بەت خەتكۈچلىرى\";\n\"menu_get_translations\" = \"تەرجىمىگە ئېرىش\";\n\"menu_help\" = \"ياردەم\";\n\"menu_jump\" = \"يۆتكەل\";\n\"menu_jump_last_page\" = \"ئاخىرقى بەت\";\n\"menu_other_apps\" = \"باشقا ئەپلەر\";\n\"menu_search\" = \"ئىزدە\";\n\"menu_settings\" = \"تەڭشەكلەر\";\n\"menu_show_date\" = \"چېسلانى كۆرسەت\";\n\"menu_sort\" = \"تەرتىپلە\";\n\"menu_sort_date\" = \"قوشۇلغان چېسلا\";\n\"menu_sort_group_by_tags\" = \"بەلگە بويىچە گۇرۇپپىلا\";\n\"menu_sort_location\" = \"قۇرئاندىكى ئورنى\";\n\"menu_translation\" = \"تەرجىمە كۆرسەت\";\n\"more_translations\" = \"تېخىمۇ كۆپ تەرجىمىلەر\";\n\"move_down\" = \"ئاستىغا\";\n\"move_up\" = \"ئۈستىگە\";\n\"need_translation\" = \"سىز تېخى ھېچقانداق تەرجىمە/تەپسىر چۈشۈرمىگەن.\";\n\"new_tag\" = \"يېڭى بەلگە\";\n\"next\" = \"كېيىنكى\";\n\"no_arabic_search_available\" = \"سىز ئەرەبچە ئىزدەش بوغچىسىنى چۈشۈرمىگەن. ئۇنى چۈشۈرۈپ ئاندىن قايتا ئىزدەڭ.\";\n\"no_results\" = \"\\\"%@\\\" نىڭ نەتىجىلىرى تېپىلمىدى\";\n\"not_tagged\" = \"بەلگە قوشۇلمىدى\";\n\"notification_channel_audio\" = \"قۇرئان قىرائىتى\";\n\"notification_channel_download\" = \"قۇرئان چۈشۈرۈش\";\n\"notification_download_canceled\" = \"چۈشۈرۈشتىن ۋاز كەچتى\";\n\"page_description\" = \"%1$@-بەت، %2$@-پارە\";\n\"pause\" = \"ۋاقتىنچە توختاش\";\n\"play\" = \"قويۇش\";\n\"play_apply\" = \"ئىلتىماس قىلىڭ\";\n\"play_apply_and_play\" = \"ئىلتىماس قىلىڭ ۋە قويۇش\";\n\"play_each_verse\" = \"ھەر بىر ئايەتنى ئاڭلاڭ:\";\n\"play_from_here\" = \"بۇ جايدىن باشلاپ چال\";\n\"play_restrict_range\" = \"پەقەت يۇقىرىدىكى ئايەتلەرنىلا ئاڭلاڭ\";\n\"play_verses_range\" = \"بىر يۈرۈش ئايەتلەرنى ئاڭلاڭ:\";\n\"playback_prompt_title\" = \"ئويناشنى باشلاڭ:\";\n\"playback_speed\" = \"Ujinu uri vifujio:\";\n\"please_grant_permissions\" = \"ئەپ تەڭشىكىدە ئىجازەت بېرىڭ\";\n\"please_wait\" = \"سەل كۈتۈڭ…\";\n\"post_notification_permission\" = \"قۇرئان ئاندىرويىدنىڭ ئۇقتۇرۇش يوللىشىغا يول قويامسىز؟ بۇ پەقەت يېڭىلاشنى چۈشۈرۈش ياكى ئاۋاز ھۆججىتى ئاپتوماتىك يېڭىلانغاندا ئاگاھلاندۇرۇش ئۈچۈن ئىشلىتىلىدۇ.\";\n\"prefs_app_location_summary\" = \"قۇرئان ھۆججەتلىرىنى قەيەرگە ساقلاش تاللىنىدۇ\";\n\"prefs_app_location_title\" = \"قۇرئان سانلىق مەلۇمات مۇندەرىجىسى\";\n\"prefs_app_size\" = \"نۆۋەتتىكى سانلىق مەلۇمات چوڭلۇقى\";\n\"prefs_audio_manager_summary\" = \"فۇرئان ئاۋازىنى چۈشۈرىدۇ ۋە باشقۇرىدۇ\";\n\"prefs_ayah_before_translation_summary\" = \"تەرجىمىدىن ئىلگىرى ئەرەبچە ئەسلى تېكىستنى كۆرسىتىدۇ\";\n\"prefs_ayah_before_translation_title\" = \"تەرجىمىدىن ئىلگىرى ئايەت\";\n\"prefs_calculating_app_size\" = \"ئەپ چوڭلۇقىنى ھېسابلاۋاتىدۇ\";\n\"prefs_category_advanced\" = \"ئالىي تاللانما\";\n\"prefs_category_advanced_summary\" = \"خەتكۈچ ئەكىر/چىقار، قۇرئان سانلىق مەلۇماتلىرى مۇندەرىجىسىنى بەلگىلەش قاتارلىق.\";\n\"prefs_category_display_settings\" = \"كۆرۈنۈش تەڭشەكلىرى\";\n\"prefs_category_download\" = \"چۈشۈرۈش تاللانمىلىرى\";\n\"prefs_category_dual_screen\" = \"قوش بەت مايىللىقى\";\n\"prefs_category_reading\" = \"ئوقۇش مايىللىقى\";\n\"prefs_category_translation\" = \"تەرجىمە مايىللىقى\";\n\"prefs_copying_app_files\" = \"ئەپ ھۆججەتلىرىنى كۆچۈرۈۋاتىدۇ\";\n\"prefs_display_marker_summary\" = \"يېتىپ كەلگەن پارە، ھىزب قاتارلىقلارنى قاڭقىش كۆزنىكىدە كۆرسىتىدۇ.\";\n\"prefs_display_marker_title\" = \"بەلگە قاڭقىش كۆزنىكىنى كۆرسەت\";\n\"prefs_download_amount_summary\" = \"ئالدى بىلەن غەيرى يوچۇقسىز ئاۋازنى چۈشۈرىدۇ\";\n\"prefs_download_amount_title\" = \"چۈشۈرۈش مىقدارى\";\n\"prefs_dual_page_mode_disabled\" = \"توغرىسىغا ھالەتتە، بىرلا بەتنى كۆرسىتىدۇ.\";\n\"prefs_dual_page_mode_enabled\" = \"توغرىسىغا ھالەتتە، ئىككى بەت يانمۇيان كۆرۈنىدۇ.\";\n\"prefs_dual_page_mode_title\" = \"قوش بەت ھالىتى\";\n\"prefs_err_moving_app_files\" = \"ئەپ ھۆججەتلىرىنى يۆتكىيەلمىدى\";\n\"prefs_export_csv_summary\" = \"خەتكۈچ ۋە بەلگىلەرنىڭ كۆپەيتىلمىسىنى CSV غا چىقىرىدۇ\";\n\"prefs_export_csv_title\" = \"CSV غا چىقار\";\n\"prefs_export_summary\" = \"خەتكۈچ ۋە بەلگىلەرنىڭ كۆپەيتىلمىسىنى چىقىرىدۇ\";\n\"prefs_export_title\" = \"چىقار\";\n\"prefs_highlight_bookmarks_summary\" = \"ئايەتلەرنى گەۋدىلەندۈرىدۇ\";\n\"prefs_highlight_bookmarks_title\" = \"خەتكۈچنى گەۋدىلەندۈرىدۇ\";\n\"prefs_import_summary\" = \"خەتكۈچ ۋە بەلگىلەرنى ئەكىرىدۇ\";\n\"prefs_import_title\" = \"ئەكىر\";\n\"prefs_megabytes_int\" = \"%1$d MB\";\n\"prefs_new_background_title\" = \"يېڭى تەگلىك\";\n\"prefs_night_mode_background_brightness_summary\" = \"كېچە ھالىتى قوزغىتىلغان ۋاقىتتىكى بەتنىڭ يورۇقلۇقى\";\n\"prefs_night_mode_background_brightness_title\" = \"تەگلىك يورۇقلۇقى\";\n\"prefs_night_mode_summary\" = \"قارا تەگلىك يورۇق خەت نۇسخىسى ئىشلىتىدۇ\";\n\"prefs_night_mode_text_brightness_summary\" = \"كېچە ھالىتى قوزغىتىلغان ۋاقىتتىكى تېكىستنىڭ يورۇقلۇقى\";\n\"prefs_night_mode_text_brightness_title\" = \"تېكىست يورۇقلۇقى\";\n\"prefs_night_mode_title\" = \"كېچە ھالىتى\";\n\"prefs_no_enough_space_to_move_files\" = \"ئەپ ھۆججەتلىرىنى يۆتكەشكە يېتەرلىك بوشلۇق يوق\";\n\"prefs_overlay_page_info_summary\" = \"قىرائەت قىلىۋاتقاندا بەت سانى، سۈرە ئىسمى ۋە پارە سانىنى كۆرسىتىدۇ\";\n\"prefs_overlay_page_info_title\" = \"بەت ئۇچۇرىنى كۆرسەت\";\n\"prefs_page_type_summary\" = \"ئوقۇش بېتىنىڭ تىپى تاللىنىدۇ\";\n\"prefs_page_type_title\" = \"بەت تىپى (سىناق)\";\n\"prefs_preview\" = \"ئالدىن كۆزەت\";\n\"prefs_sdcard_external\" = \"سىرتقى ساقلىغۇچ %1$d\";\n\"prefs_sdcard_internal\" = \"ئىچىدىكى ساقلىغۇچ\";\n\"prefs_send_logs_summary\" = \"سازلاش خاتىرىسىنى ئىجادكارغا يوللايدۇ\";\n\"prefs_send_logs_title\" = \"خاتىرە يوللا\";\n\"prefs_split_page_and_translation_summary\" = \"تەرجىمە بار قوش بەت ھالىتىدە ، قۇرئان بېتى ۋە تەرجىمە كۆرۈنىدۇ\";\n\"prefs_split_page_and_translation_title\" = \"قوش بەت ھالىتىدىكى قۇرئان ۋە تەرجىمە\";\n\"prefs_streaming_summary\" = \"چۈشۈرگەننىڭ ئورنىغا ئېقىم ئاۋازىنى ئىشلىتىدۇ\";\n\"prefs_streaming_title\" = \"ئېقىم\";\n\"prefs_sura_translated_name_summary\" = \"سۈرە ئىسمىنىڭ تەرجىمىسىنى كۆرسەت\";\n\"prefs_sura_translated_name_title\" = \"سۈرىنىڭ تەرجىمە قىلىنغان ئىسمى\";\n\"prefs_translation_text_title\" = \"تەرجىمە تېكىست چوڭلۇقى\";\n\"prefs_translations\" = \"تەرجىمىلەر\";\n\"prefs_translations_summary\" = \"تەرجىمىلەرنى چۈشۈرۈش ۋە باشقۇرۇش\";\n\"prefs_use_arabic_summary_on\" = \"ئەپ ئارا يۈزىگە ئەرەبچە ئىشلىتىدۇ\";\n\"prefs_use_arabic_title\" = \"ئەرەبچە ھالەت (الوضع العربي)\";\n\"prefs_use_dyslexic_font_summary\" = \"تەرجىمەنى دوستانە خەت نۇسخىسىدا كۆرسىتىدۇ\";\n\"prefs_use_dyslexic_font_title\" = \"Dyslexia دوستانە خەت نۇسخىسى\";\n\"prefs_volume_key_navigation_summary\" = \"ئاۋاز كۇنۇپكىسىدا بەت ئۆرۈشكە يول باشلايدۇ\";\n\"prefs_volume_key_navigation_title\" = \"ئاۋاز كۇنۇپكا يولباشچى\";\n\"previous\" = \"ئالدىنقى\";\n\"process_progress\" = \"بىر تەرەپ قىلىۋاتقىنى %1$d / %2$d\";\n\"qarilist_dismiss\" = \"خىزمەتتىن ھەيدەش\";\n\"qarilist_gapless\" = \"ئۈزلۈكسىز\";\n\"qarilist_gapped\" = \"ئىزچىل ئەمەس\";\n\"qarilist_qaris_with_downloads\" = \"چۈشۈرۈش بىلەن كارى\";\n\"qarilist_ready_to_play\" = \"ئاڭلاشقا تەييار\";\n\"qarilist_select_qari\" = \"ئوقۇرمەننى تاللاڭ\";\n\"qarilist_selected\" = \"تاللانغان\";\n\"quran_ayah\" = \"%1$d-ئايەت\";\n\"quran_ayah_details\" = \"%1$@-ئايەت %2$@، %3$@-پارە\";\n\"quran_hizb\" = \"ھىزب\";\n\"quran_juz2\" = \"پارە\";\n\"quran_nos\" = \"½\";\n\"quran_page\" = \"بەت\";\n\"quran_rob3\" = \"¼\";\n\"quran_sura\" = \"سۈرە\";\n\"quran_sura_title\" = \"سۈرە %1$@\";\n\"quran_talt_arb3\" = \"¾\";\n\"quranSearchType\" = \"قۇرئان سۈرەلىرى\";\n\"recent_pages\" = \"يېقىنقى بەتلەر\";\n\"recite_from_here\" = \"بۇ يەردىن ئوقۇڭ\";\n\"remove_button\" = \"چىقىرىۋەت\";\n\"remove_dlg_msg\" = \"سىز %1$@ نى راسلا چىقىرىۋېتەمسىز؟\";\n\"remove_dlg_title\" = \"تەرجىمىنى چىقىرىۋېتەمدۇ؟\";\n\"scoped_storage_message\" = \"ئاندىرويىد ئىشلەتكۈچى شەخسىيەت ھوقۇقىنى يۇقىرىلىتىپ ئۆزگەرتكەنلىكتىن، ھۆججەتلەرنى ئەپ مۇندەرىجىسىنىڭ سىرتىغا كۆچۈرگەندە قۇرئان ئەپنىڭ سانلىق مەلۇماتنى زىيارەت قىلىشى كەلگۈسىدىكى ئاندىرويىد نەشرىدە توختىتىلىشى مۇمكىن. بۇ يولنى راستىنلا ئىشلىتەمسىز؟\";\n\"sdcard_error\" = \"SD كارتىنى تاپالمىدى. ئۇنى قىستۇرۇپ ئاندىن قايتا سىناڭ.\";\n\"search_data\" = \"سانلىق مەلۇمات ئىزدە\";\n\"search_entire_mushaf\" = \"پۈتكۈل سەھىپەدىن ئىزدە\";\n\"search_full_results\" = \"تولۇق نەتىجە\";\n\"search_hint\" = \"قۇرئاندىن ئىزدە\";\n\"search_key\" = \"ئىزدە كۇنۇپكىسى بېسىلسا سۈرە ئىزدەيدۇ\";\n\"see_tafseer_of_verse\" = \"بۇ ئايەتنىڭ تەپسىرى %d (چېكىلسە يايىدۇ) ئايەتنىڭ تەپسىرىسىدە بار.\";\n\"share_ayah\" = \"ئايەت ئۇلانمىسىنى ھەمبەھىرلە\";\n\"share_ayah_text\" = \"ئايەت تېكىستتىنى ھەمبەھىرلە\";\n\"starting_page_label\" = \"بەت ئۈستى\";\n\"stop\" = \"توختا\";\n\"storage_permission_please_restart\" = \"كۈچكە ئىگە بولۇشى ئۈچۈن ئەپنى قايتا قوزغىتىڭ.\";\n\"storage_permission_rationale\" = \"قۇرئان سانلىق مەلۇماتلىرىنى سىرتقى ساقلىغۇچقا ساقلاش ئۈچۈن ئىجازىتىڭىزگە موھتاج. قۇرئان بۇ ئىجازەتنى ئالماي ئىشلەيدۇ، ئەمما ئەگەر سانلىق مەلۇماتلارنى ئۆچۈرۈپ ياكى ئەپنى ئۆچۈرۈۋەتسىڭىز، چۈشۈرگەن بارلىق بەت، ئۈن ۋە سانلىق مەلۇماتلارنىڭ ھەممىسى ئۆچۈرۈلىدۇ، شۇڭا ئىجازەت بېرەمسىز؟\";\n\"sura_ayah_notification_str\" = \"سۈرە %1$@، %2$d-ئايەت\";\n\"sura_ayah_sharing_str\" = \"سۈرە %1$@: %2$d\";\n\"tag_ayah\" = \"بۇ ئايەتكە بەلگە قوش\";\n\"tag_blank_tag_error\" = \"بەلگە ئاتى بوش قالمايدۇ!\";\n\"tag_bookmark\" = \"خەتكۈچكە بەلگە قوش\";\n\"tag_dlg_title\" = \"بەلگە\";\n\"tag_duplicate_tag_error\" = \"بەلگە ئاتى مەۋجۇت!\";\n\"tag_name\" = \"ئاتى\";\n\"timing_database\" = \"زۆرۈر ھۆججەتلەر\";\n\"to\" = \"ئايەتكىچە\";\n\"translation_ayah\" = \"ئايەت تەرجىمە/تەپسىر\";\n\"translation_dialog_later\" = \"كېيىن\";\n\"translation_dialog_yes\" = \"ھەئە\";\n\"translation_updates_available\" = \"تەرجىمە ئۈچۈن بىر يېڭىلانما بار. تەرجىمە ئېكرانىنى ھازىرلا زىيارەت قىلامسىز؟\";\n\"undo\" = \"يېنىۋال\";\n\"update_available\" = \"يېڭىلانما بار\";\n\"warning\" = \"ئاگاھلاندۇرۇش\";\n"
  },
  {
    "path": "Core/Localization/Resources/ug.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>bookmark_tag_deleted</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@bookmark_tag_deleted@</string>\n            <key>bookmark_tag_deleted</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>بىر تۈر ئۆچۈرۈلدى</string>\n                <key>other</key>\n                <string>%d تۈر ئۆچۈرۈلدى</string>\n            </dict>\n        </dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>\\&quot;%d\\&quot; نىڭ بىر نەتىجىسى:</string>\n                <key>other</key>\n                <string>\\&quot;%1$d\\&quot; نىڭ %2$d نەتىجىسى:</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>%d سۈرە</string>\n                <key>other</key>\n                <string>%d سۈرە</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/ug.lproj/Localizable.strings",
    "content": "\n\n// MARK: - General\n\n// Metadata: Translated by ChatGPT; human review required.\n\"button.done\" = \"ئاخىرلاشتى\";\n// Metadata: Translated by ChatGPT; human review required.\n\"button.delete\" = \"ئۆچۈرۈش\";\n\n// MARK: - Errors\n\n// Metadata: Translated by ChatGPT; human review required.\n\"error.dialog.title\" = \"خاتالىق\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.connection_lost\" = \"تور ئۇلىنىشى ئۈزۈلدى. تۇراقلىق ئۇلىنىش بار جايغا يۆتكىلىڭ ياكى ئۇلىنىش تۇراقلىق بولغۇچە ساقلاڭ.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.international_roaming_off\" = \"خەلقئارا ساياھەتچىلىككە رۇخسەت قىلىنمايدۇ. خەلقئارا ساياھەتچىلىك تەڭشەشنى ئۆزگەرتىڭ ياكى Wi-Fi قوزغىتىڭ.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.not_connected_to_internet\" = \"تورغا ئۇلانمىغان. Wi-Fi ياكى يانفون سانلىق مەلۇمات ئۇلىنىشىنى قوزغىتىڭ.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.general\" = \"ھەي! بىرەر نەرسە خاتا بولدى. قايتا سىناپ بېقىڭ.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.no_disk_space\" = \"چۈشۈرۈشلەرنى ساقلاش ۈچۈن بوش دىسكا ئورنى يوق.\";\n\n// MARK: - Quran\n\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah\" = \"ئايەت\";\n// Metadata: Translated by ChatGPT; human review required.\n\"surah\" = \"سۈرە\";\n// Metadata: Translated by AI; human review required.\n\"quran_alquran\" = \"قۇرئان\";\n\n// MARK: - Translation\n\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.translation\" = \"تەرجىمە\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.transliteration\" = \"يېزىق ئۆزگەرتىش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.selectedTranslations\" = \"تاللانغان\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.translator\" = \"تەرجىمان: \";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.see-referenced-verse\" = \"%d ئايەتنى كۆرۈڭ.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.read-more\" = \"تېخىمۇ كۆپ ئوقۇڭ\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-retrieval\" = \"ھەي! بىرەر نەرسە خاتا بولدى. تەرجىمىنى قايتۇرالمىدۇق.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-not-available\" = \"بۇ ئايەت ئۈچۈن تەرجىمە يوق.\";\n\n// MARK: - Search\n\n// Metadata: Translated by ChatGPT; human review required.\n\"search.recents.title\" = \"يېقىندا ئىزدەش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.popular.title\" = \"ئىزدەشنى مۇنداق سىناپ بېقىڭ\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.placeholder.text\" = \"سۈرە، ئايەت، تەرجىمە، تەپسىر ۋە سانلار\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.result.count\" = \"(%2$d) %1$@\";\n\n// MARK: - Settings\n\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.write_review\" = \"ئەپ دۇكىنىدا باھا يېزىڭ...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.contact_us\" = \"بىز بىلەن ئالاقىلىشىڭ\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.donate\" = \"ئىئانە قىلىش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.share_app\" = \"ئەپنى ھەمبەھىرلەڭ...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.app_version\" = \"ئەپ نەشرى\";\n\n// MARK: - Quran Menu\n\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabic\" = \"ئەرەبچە\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translation\" = \"تەرجىمە/تەپسىر\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.select_translation\" = \"تەرجىمىلەرنى/تەپسىرنى تاللاڭ\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer\" = \"سۆز تەرجىمىسى كۆرسەتكۈچى\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer.select_translation\" = \"كۆرسەتكۈچنى كۆرسىتىش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.fontSizeLetter\" = \"A\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translationFontSize\" = \"تەرجىمە چوڭلۇقى\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabicFontSize\" = \"قۇرئان چوڭلۇقى\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.twoPages\" = \"ئىككى بەت يانما-يان (شەكىل تەرتىپىدە)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.verticalScrolling\" = \"تىك مېكىش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.theme_settings\" = \"ئۆرنەك ۋە تەڭشەك\";\n\n// MARK: - Theme\n\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.light\" = \"يورۇق\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.dark\" = \"قاراڭغۇ\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto\" = \"ئاپتوماتىك\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto.message\" = \"قۇرئان ئەپى iPhone-نىڭ كۆرۈنمە تەڭشەكلىرىگە ماسلىشىدۇ\";\n\n// MARK: - Tabs\n\n// Metadata: Translated by ChatGPT; human review required.\n\"tab.notes\" = \"ئىزاھاتلار\";\n\n// MARK: - Update\n\n// Metadata: Translated by ChatGPT; human review required.\n\"update.filesystem.title\" = \"سانلىق مەلۇمات بازىسىنى يېڭىلاۋاتىدۇ...\";\n\"downloading_title\" = \"چۈشۈرۈۋاتىدۇ…\";\n\n// MARK: - Reciters\n\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.title\" = \"ئاڭلاش ئۈچۈن قارىنى تاللاڭ\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.recent\" = \"يېقىندا\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.downloaded\" = \"چۈشۈرۈلگەن\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.all\" = \"ھەممىسى\";\n\n// MARK: - Audio\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.action.modify\" = \"تەھرىرلەڭ\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.message\" = \"%@ دىن %@ گىچە ئاۋاز قويۇلۇۋاتىدۇ\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.downloading.message\" = \"%@ دىن %@ گىچە ئاۋاز چۈشۈرۈلۈۋاتىدۇ\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing-verses.label\" = \"ئايەتلەرنى قويۇش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.adjust-end-verse-to-the-end.label\" = \"ئاخىرقى ئايەتنى ئاخىرىغا تەڭشەڭ\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-start-verse\" = \"باشلانغۇچ ئايەتنى تاللاڭ\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-end-verse\" = \"ئاخىرقى ئايەتنى تاللاڭ\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount\" = \"چۈشۈرۈش/قويۇشقا قەدەر\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount.description\" = \"ئاۋاز قويۇش ۋاقتىدا ئاخىرىغىچە قويۇلىدۇ\";\n\n// MARK: - Bookmarks\n\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.title\" = \"خەتكۈچ قوشۇلۋاتىدۇ...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.text\" = \"قۇرئاننى ئوقۇغاندا، نۆۋەتتىكى بەتنى بەلگىلەش ئۈچۈن خەتكۈچ توپچىسىنى بېسىڭ.\";\n\n// MARK: - Notes\n\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.title\" = \"ئايەتلەرنىڭ ئەڭ ياخشىلىرىنى قوشۇش...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.text\" = \"بىر ئايەتكە بېسىپ تۇتۇڭ. بىرنەچچە ئايەتنى ئۆز ئىچىگە ئالىدىغان قىلىپ تاللاشنى كېڭەيتەلەيسىز، ئاندىن خەتكۈچ توپچىسىنى بېسىڭ.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.verses-count\" = \"(+%d ئايەت)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.title\" = \"ئەڭ ياخشىسىنى ئۆچۈرۈش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.body\" = \"مۇناسىۋەتلىك ئىزاھاتمۇ ئۆچۈرۈلىدۇ.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.title\" = \"iCloud مۇۋاپىقىيەتلىشىش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.body\" = \"بۇ ئەپ iCloudنى ئىشلىتىپ، قۇرۇلمىلار ئارا بەلگە ۋە يازمىلارنى ماسلاشتۇرىدۇ. سىز ئۇنى قۇرۇلمىڭىزنىڭ iCloud تەڭشەكلىرىدىن ئۆچۈرەلەيسىز.\";\n\n// MARK: - Ayah Menu\n\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.copy\" = \"كۆچۈرۈش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.share\" = \"ھەمبەھرلەش...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-juz\" = \"Juz' ئاخىرىغىچە\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-surah\" = \"سۈرە ئاخىرىغىچە\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-page\" = \"بەت ئاخىرىغىچە\";\n// Metadata: Translated by AI; human review required.\n\"ayah.menu.play-end-quran\" = \"قۇرئان ئاخىرىغىچە\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.repeat\" = \"تەكرارلاش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verse\" = \"تاللانغان ئايەت\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verses\" = \"تاللانغان ئايەتلەر\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight\" = \"يورۇتۇش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight-select-color\" = \"رەڭ تاللاش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.add-note\" = \"قەيتىملىك قوشۇش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.edit-note\" = \"قەيتىملىكنى تەھرىرلەش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-note\" = \"قەيتىملىكنى ئۆچۈرۈش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-highlight\" = \"يورۇتۇشنى ئۆچۈرۈش\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.short\" = \"تاللاش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.long\" = \"نۆۋەتتىكى مۇشاف قىلىپ بەلگىلەش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.title\" = \"مۇشاف تاللاش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selection-description\" = \"تېخىمۇ كۆپ ئۇچۇرلار ئۈچۈن مۇشافنى تەكشۈرۈڭ.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.hafs\" = \"خافس مۇشاف\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.pages.604\" = \"604 بەت\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.lines.15\" = \"15 قۇرلۇق بەت\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.supported\" = \"سۆزمۇ-سۆز تەرجىمە\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.not-supported\" = \"سۆزمۇ-سۆز تەرجىمىسى يوق\";\n\n// Hafs 1405\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.title\" = \"حافس، ئەنئەنىۋى مەدىنە، 1405 ھ.ق.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.description\" = \"1405 ھ.ق. مەدىنىدە نەشر قىلىنغان ئەنئەنىۋى حافس مۇشافى. بۇ ئەپ ئۇزۇن ۋاقىت بۇ نەشرنى تەقدىم قىلغان.\\nپادىشاھ فەھد قۇرئان بېسىش كومپلېكسىدىن.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.issue\" = \"1405 ھ.ق. نەشر قىلىنغان\";\n\n// Hafs 1421\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.title\" = \"حافس، مەدىنە، 1421 ھ.ق.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.description\" = \"1421 ھ.ق. مەدىنىدە نەشر قىلىنغان حافس مۇشافى. پادىشاھ فەھد قۇرئان بېسىش كومپلېكسىدىن.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.issue\" = \"1421 ھ.ق. نەشر قىلىنغان\";\n\n// Hafs 1440\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.title\" = \"حافس، مەدىنە، 1440 ھ.ق.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.description\" = \"1440 ھ.ق. مەدىنىدە نەشر قىلىنغان حافس مۇشافى. پادىشاھ فەھد قۇرئان بېسىش كومپلېكسىدىن.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.issue\" = \"1440 ھ.ق. نەشر قىلىنغان\";\n\n// Hafs Tajweed\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.title\" = \"حافس، تەجۋىد\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.description\" = \"تەجۋىد حافس مۇشافى. ئەلقۇرئان ئەلكەرىم - دار ئەلمەرىپە نەشرى.\";\n\n// MARK: - Diagnostics\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.title\" = \"تەكشۈرۈش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.details\" = \"بۇ تەڭشەكلەر ئەپ ياسايدىغان تەرەپ تەرىپىدىن مەخسۇسىي تەكشۈرۈش ۋە دىياگنوز قىلىش مەقسىتىدە ئىشلىتىلىدۇ.\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.share_app_logs\" = \"ئەپ خاتىرىلىرىنى ھەمبەھىرلەش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs\" = \"تەكشۈرۈش خاتىرىسىنى يولغا قويۇش\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs.details\" = \"بۇ تەڭشەك كىيىنكى قېتىم ئەپ قايتا باشلاشتا ئىشقا ئاشىدۇ.\";\n\n\n// MARK: - What's new\n\n// Metadata: Translated by ChatGPT; human review required.\n\"new.title\" = \"يېڭىلىقلار\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.action\" = \"داۋاملاشتۇرۇش\";\n\n// Mushafs\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs\" = \"يېڭى مۇشاپلار:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs.details\" = \"اللاھ گەززەدىكى قېرىنداشلىرىمىزنىڭ زۇلمىنى يۇقىتىپ بەرسۇن.\\n\\n* تەجۋىد حافس مۇشافى: ئەلقۇرئان ئەلكەرىم - دار ئەلمەرىپە نەشرى.\\n* 1421 ھ.ق. مەدىنە مۇشافى.\\n* 1440 ھ.ق. مەدىنە مۇشافى.\\n* يەنە، كلاسسىك 1405 ھ.ق. نەشرىنى داۋاملىق ياخشى كۆرۈڭ.\";\n\n// Reciters\n// Metadata: Translated by ChatGPT; human review required.\n\"new.reciters\" = \"يېڭى قارىلار:\";\n\n// Miscellaneous\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous\" = \"ھەرخىل:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous.details\" = \"* يېڭىلانغان ئەپ كۆرۈنۈشى.\\n* ئىزدەش خۇسۇسىيىتى ياخشىلاندى (يېڭى ئالگورىتم تېزدىن بولىدۇ).\\n* ۋىيېتنام تىلىدىكى يەرلىكلەشتۈرۈش قوللىمىسى.\\n* تىلاۋەت قىلىنمىغاندا ئالىي دەرىجىلىك ئاۋاز تاللاشلىرىغا كىرىشكە بولىدۇ.\\n* ئەپ ھازىر ئوچۇق مەنبە: https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades\" = \"ئاۋاز:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades.details\" = \"* تىلىۋەت سۈرئىتىنى 0.5x، 0.75x، 1x، 1.25x، 1.5x قىلدۇرىدۇ - @adnan29979 غا رەھمەت.\\n* قويۇش سىز ياخشى كۆرىدىغان سۈرئەتنى ئەستە تۇتىدۇ - @adnan29979 غا رەھمەت.\";\n\n// Personalization\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization\" = \"ئوقۇش تېمىلىرى:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization.details\" = \"* كۆپ تېمىلارنى قوللايدۇ. قۇرئاننىڭ بىر بېتىنى ئېچىڭ -> ئوڭ يۇقىرى تەرەپتىكى تىزىملىك -> تېمиләр ۋە تەڭشەكلەر.\\n* 'Original' نى ئىشلىتىپ بۇرۇنقى ئۇسلۇپقا قايتالايسىز.\";\n\n// Library & Navigation\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation\" = \"كىتەپخانا ۋە يولباشچىلىق:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation.details\" = \"* باش بەتتە سۈرە ۋە جۇزلارنى تەرتىپلەپ، سۈرە نومۇرلىرىنى كۆرسىتىڭ، شۇنداق قىلىپ لازىملىق بەتكە تېز يېتىڭ - @yismailuofa غا رەھمەت.\";\n"
  },
  {
    "path": "Core/Localization/Resources/ug.lproj/Readers.strings",
    "content": "\"qari_abdulaziz_zahrani_gapless\" = \"ئابدۇلئەزىز ئاز-زاھرانى\";\n\"qari_abdulbaset\" = \"ئابدۇلباسىت ئابدۇلسەمەد (ئايرىملىق)\";\n\"qari_abdulbaset_gapless\" = \"ئابدۇلباسىت\";\n\"qari_abdulbaset_mujawwad\" = \"ئابدۇلباسىت ئادۇلسەمەد مۇجاۋۋاد (ئايرىملىق)\";\n\"qari_abdulbaset_mujawwad_gapless\" = \"ئابدۇلباسىت مۇجاۋۋاد\";\n\"qari_abdulhadi_kanakeri_gapless\" = \"ئابدۇلھادى كاناكېرى\";\n\"qari_abdullah_matroud_gapless\" = \"ئابدۇللا ماترود\";\n\"qari_abdulmuhsin_qasim_gapless\" = \"ئابدۇل مۇھسىن قاسىم\";\n\"qari_abdulrahman_alshahat_gapless\" = \"ئابدۇرراھمان ئال شاھات\";\n\"qari_abdurrashid_sufi_gapless\" = \"ئابدۇرراشىد سۇفى\";\n\"qari_afasy\" = \"مىشارى بىن راشىد ئافاسى (ئايرىملىق)\";\n\"qari_afasy_cali_gapless\" = \"مىشارى ئال ئافاسى (كالىفورنىيە)\";\n\"qari_afasy_gapless\" = \"مىشارى بىن راشىد ئافاسى\";\n\"qari_ahmad_nauina_gapless\" = \"ئەھمەد نائۇينا\";\n\"qari_ahmed_al_nufais_gapless\" = \"ئەھمەد ئەن-نۇفەيس\";\n\"qari_ajamy_gapless\" = \"ئەھمەد ئىبن ئەلى ئال ئەجەمى\";\n\"qari_akram_al_alaqmi\" = \"ئەكرەم ئال ئەلەقمى\";\n\"qari_ali_hajjaj_alsouasi_gapless\" = \"ئەلى ھاججاج ئالسۇئاسى\";\n\"qari_ali_jaber_gapless\" = \"ئەلى جابىر\";\n\"qari_alijon_qari_gapless\" = \"ئەلىجون قارى\";\n\"qari_aloosi_gapless\" = \"ئابدۇرراھمان ئال ئەئۇسى\";\n\"qari_alzain_ahmad_gapless\" = \"ئاز-زەيىن مۇھەممەد ئەھمەد\";\n\"qari_ayman_suwaid_gapless\" = \"ئايمان سۇۋەيد\";\n\"qari_ayman_suwaid_gapped\" = \"ئايمان سۇۋەيد (ئايرىملىق)\";\n\"qari_ayyoub\" = \"مۇھەممەد ئەييۇب (ئايرىملىق)\";\n\"qari_ayyoub_gapless\" = \"مۇھەممەد ئەييۇب\";\n\"qari_aziz_alili_gapless\" = \"ئەزىز ئەلىلى\";\n\"qari_badr_al_turki_gapless\" = \"بەدىر ئەت-تۈركى\";\n\"qari_bandar_baleela_gapless\" = \"بەندار بەلىلا\";\n\"qari_basfar\" = \"ئابدۇللاھ باسفار (ئايرىملىق)\";\n\"qari_basfar_gapless\" = \"ئابدۇللاھ باسفار\";\n\"qari_dussary\" = \"ياسر الدوسري (ئايرىملىق)\";\n\"qari_fares_abbad_gapless\" = \"فارىس ئەببەد\";\n\"qari_farman_shawani_gapless\" = \"فەرمان شاۋانى\";\n\"qari_hady_toure_gapless\" = \"مۇھەممەد ئەل-ھادى تۇرې\";\n\"qari_hani_rifai\" = \"ھانى رىفائى (ئايرىملىق)\";\n\"qari_hani_rifai_gapless\" = \"ھانى رىفائى\";\n\"qari_hudhayfi\" = \"ئالى ھۇدەيفى (ئايرىملىق)\";\n\"qari_hudhayfi_gapless\" = \"ئالى ھۇدەيفى\";\n\"qari_husary_gapless\" = \"ھۇسارى\";\n\"qari_husary_iza3a_gapless\" = \"ھۇسارى (رادىئو ئاۋازى)\";\n\"qari_husary_muallim_gapless\" = \"الحصري (ئوقۇتقۇچى، يوچۇقسىز)\";\n\"qari_husary_mujawwad\" = \"ھۇسارى مۇجاۋۋاد (ئايرىملىق)\";\n\"qari_husary_mujawwad_gapless\" = \"الحصري (مۇجاۋۋاد، يوچۇقسىز)\";\n\"qari_ibrahim_alakhdar_gapless\" = \"ئىبراھىم ئەل ئاخدار\";\n\"qari_idrees_abkar_gapless\" = \"ئىدرىس ئابكار\";\n\"qari_jibreel\" = \"مۇھەممەد جىبرىل (ئايرىملىق)\";\n\"qari_jibreel_gapless\" = \"مۇھەممەد جىبرىل\";\n\"qari_juhany_gapless\" = \"ئابدۇللاھ ئەلجەھنى\";\n\"qari_khaled_muhanna_gapless\" = \"خالىد المهنا\";\n\"qari_khalid_jalil_gapless\" = \"خالىد ئەل-جەلىل\";\n\"qari_khalid_qahtani_gapless\" = \"خالىد ئەلقاھتانى\";\n\"qari_khalifa_taniji_gapless\" = \"خەلىفە تېڭگى\";\n\"qari_luhaidan_gapless\" = \"مۇھەممەد ئەل-لۇھەيدان\";\n\"qari_mahmoud_ali_albana_gapless\" = \"مەھمۇد ئەلى ئال بانا\";\n\"qari_minshawi_mujawwad\" = \"مىنشاۋى مۇجاۋۋاد (ئايرىملىق)\";\n\"qari_minshawi_mujawwad_gapless\" = \"مىنشاۋى مۇجاۋۋاد\";\n\"qari_minshawi_murattal_gapless\" = \"مىنشاۋى مۇراتتال\";\n\"qari_mishari_walk_gapless\" = \"مىشارى, ئىبراھىم ۋالىك (ئىنگلىزچە)\";\n\"qari_mohammad_altablawi_gapless\" = \"مۇھەممەد ئال تابلاۋى\";\n\"qari_mokhtasar_asmari_gapless\" = \"ئابدۇللاھ ئەل ئەسمەرى (ئاۋاز قىسقارتىلمىسى)\";\n\"qari_mostafa_ismaeel_gapless\" = \"مۇستافا ئىسمائىل\";\n\"qari_muaiqly\" = \"ماھەر ئال مۇئائىقلى (ئايرىملىق)\";\n\"qari_muaiqly_gapless\" = \"ماھەر ئال مۇئائىقلى\";\n\"qari_muaiqly_haramain_gapless\" = \"ماھەر ئال مۇئائىقلى (الحرمين، يوچۇقسىز)\";\n\"qari_muhammad_rashad_shereef_gapless\" = \"مۇھەممەد رەشاد ئالشەرىف\";\n\"qari_nabil_rifa3i_gapless\" = \"نەبىل ئەر-رىفائى\";\n\"qari_noreen_siddiq_gapless\" = \"نۇرەيىن مۇھەممەد سىددىق\";\n\"qari_peshawa_qadir_al_qurdi_gapless\" = \"پێشەوا قادر ئەل-كۇردى\";\n\"qari_qatami_gapless\" = \"ناسىر ئال قاتامى\";\n\"qari_raad_al_kurdi_gapless\" = \"رائاد ئەل-كۇردى\";\n\"qari_saad_al_ghamdi\" = \"سەئەد غامدى (ئايرىملىق)\";\n\"qari_saad_al_ghamidi_gapless\" = \"سەئەد ئال غامدى\";\n\"qari_sahl_yaseen_gapless\" = \"سەھىل ياسىن\";\n\"qari_salah_budair_gapless\" = \"سالاھ بۇدەيىر\";\n\"qari_salah_bukhatir_gapless\" = \"سالاھ بۇخاتىر\";\n\"qari_shatri\" = \"ئەبۇ بەكىر ئەششاتىرى (ئايرىملىق)\";\n\"qari_shatri_gapless\" = \"ئەبۇ بەكىر ئەششاتىرى\";\n\"qari_shuraym\" = \"سەئود ئەششۇرايىم (ئايرىملىق)\";\n\"qari_shuraym_gapless\" = \"سەئود ئەششۇرايىم\";\n\"qari_suadis\" = \"ئابدۇرراھمان ئەلسۇدەيس (ئايرىملىق)\";\n\"qari_sudais_gapless\" = \"ئابدۇرراھمان ئەلسۇدەيس\";\n\"qari_tablawy\" = \"مۇھەممەد ئال تابلاۋى (ئايرىملىق)\";\n\"qari_tawfeeq_as_sawaigh_gapless\" = \"تەۋفىق ئەس-ساۋايىغ\";\n\"qari_wadee3_alyamani_gapless\" = \"ۋادىھ ئەل يامانى\";\n\"qari_walk\" = \"ئىبراھىم ۋالىك (ئىنگلىزچە تەرجىمە)\";\n\"qari_walk_gapless\" = \"ئىبراھىم ۋالىك (ئىنگلىزچە)\";\n\"qari_yasser_dussary_gapless\" = \"ياسەر ئەد-دوسارى\";\n\"qari_yasser_salama_hadr_gapless\" = \"ياسىر سالاما (حدر، يوچۇقسىز)\";\n"
  },
  {
    "path": "Core/Localization/Resources/ug.lproj/Suras.strings",
    "content": "\"sura_names[0]\" = \"فاتىھە\";\n\"sura_names[1]\" = \"بەقەرە\";\n\"sura_names[2]\" = \"ئال ئىمران\";\n\"sura_names[3]\" = \"نىسا\";\n\"sura_names[4]\" = \"مائىدە\";\n\"sura_names[5]\" = \"ئەنئام\";\n\"sura_names[6]\" = \"ئەئراف\";\n\"sura_names[7]\" = \"ئەنفال\";\n\"sura_names[8]\" = \"تەۋبە\";\n\"sura_names[9]\" = \"يۇنۇس\";\n\"sura_names[10]\" = \"ھۇد\";\n\"sura_names[11]\" = \"يۈسۈف\";\n\"sura_names[12]\" = \"رەئىد\";\n\"sura_names[13]\" = \"ئىبراھىم\";\n\"sura_names[14]\" = \"ھىجر\";\n\"sura_names[15]\" = \"نەھل\";\n\"sura_names[16]\" = \"ئىسرا\";\n\"sura_names[17]\" = \"كەھف\";\n\"sura_names[18]\" = \"مەريەم\";\n\"sura_names[19]\" = \"تاھا\";\n\"sura_names[20]\" = \"ئەنبىيا\";\n\"sura_names[21]\" = \"ھەج\";\n\"sura_names[22]\" = \"مۆئمىنۇن\";\n\"sura_names[23]\" = \"نۇر\";\n\"sura_names[24]\" = \"فۇرقان\";\n\"sura_names[25]\" = \"شۇئەرا\";\n\"sura_names[26]\" = \"نەمل\";\n\"sura_names[27]\" = \"قەسەس\";\n\"sura_names[28]\" = \"ئەنكەبۇت\";\n\"sura_names[29]\" = \"رۇم\";\n\"sura_names[30]\" = \"لوقمان\";\n\"sura_names[31]\" = \"سەجدە\";\n\"sura_names[32]\" = \"ئەھزاب\";\n\"sura_names[33]\" = \"سەبەئ\";\n\"sura_names[34]\" = \"فاتىر\";\n\"sura_names[35]\" = \"ياسىن\";\n\"sura_names[36]\" = \"ساففات\";\n\"sura_names[37]\" = \"ساد\";\n\"sura_names[38]\" = \"زۇمەر\";\n\"sura_names[39]\" = \"غافىر\";\n\"sura_names[40]\" = \"فۇسسىلەت\";\n\"sura_names[41]\" = \"شۇرا\";\n\"sura_names[42]\" = \"زۇخرۇف\";\n\"sura_names[43]\" = \"دۇخان\";\n\"sura_names[44]\" = \"جاسىيە\";\n\"sura_names[45]\" = \"ئەھقاف\";\n\"sura_names[46]\" = \"مۇھەممەد\";\n\"sura_names[47]\" = \"فەتىھ\";\n\"sura_names[48]\" = \"ھۇجۇرات\";\n\"sura_names[49]\" = \"قاف\";\n\"sura_names[50]\" = \"زارىيات\";\n\"sura_names[51]\" = \"تۇر\";\n\"sura_names[52]\" = \"نەجم\";\n\"sura_names[53]\" = \"قەمەر\";\n\"sura_names[54]\" = \"رەھمان\";\n\"sura_names[55]\" = \"ۋاقىئە\";\n\"sura_names[56]\" = \"ھەدىد\";\n\"sura_names[57]\" = \"مۇجادەلە\";\n\"sura_names[58]\" = \"ھەشر\";\n\"sura_names[59]\" = \"مۇمتەھىنە\";\n\"sura_names[60]\" = \"سەپ\";\n\"sura_names[61]\" = \"جۇمۇئە\";\n\"sura_names[62]\" = \"مۇنافىقۇن\";\n\"sura_names[63]\" = \"تەغابۇن\";\n\"sura_names[64]\" = \"تەلاق\";\n\"sura_names[65]\" = \"تەھرىم\";\n\"sura_names[66]\" = \"مۇلك\";\n\"sura_names[67]\" = \"قەلەم\";\n\"sura_names[68]\" = \"ھاققە\";\n\"sura_names[69]\" = \"مائارىج\";\n\"sura_names[70]\" = \"نۇھ\";\n\"sura_names[71]\" = \"جىن\";\n\"sura_names[72]\" = \"مۇززەممىل\";\n\"sura_names[73]\" = \"مۇددەسسىر\";\n\"sura_names[74]\" = \"قىيامەت\";\n\"sura_names[75]\" = \"ئىنسان\";\n\"sura_names[76]\" = \"مۇرسەلات\";\n\"sura_names[77]\" = \"نەبە\";\n\"sura_names[78]\" = \"نازىئات\";\n\"sura_names[79]\" = \"ئەبەسە\";\n\"sura_names[80]\" = \"تەكۋىر\";\n\"sura_names[81]\" = \"ئىنفىتار\";\n\"sura_names[82]\" = \"مۇتەففىفىن\";\n\"sura_names[83]\" = \"ئىنشىقاق\";\n\"sura_names[84]\" = \"بۇرۇج\";\n\"sura_names[85]\" = \"تارىق\";\n\"sura_names[86]\" = \"ئەئلا\";\n\"sura_names[87]\" = \"غاشىيە\";\n\"sura_names[88]\" = \"ھىجر\";\n\"sura_names[89]\" = \"بەلەد\";\n\"sura_names[90]\" = \"شەمس\";\n\"sura_names[91]\" = \"لەيل\";\n\"sura_names[92]\" = \"زۇھا\";\n\"sura_names[93]\" = \"ئىنشىراھ\";\n\"sura_names[94]\" = \"تىن\";\n\"sura_names[95]\" = \"ئەلەق\";\n\"sura_names[96]\" = \"قەدر\";\n\"sura_names[97]\" = \"بەييىنە\";\n\"sura_names[98]\" = \"زەلزەلە\";\n\"sura_names[99]\" = \"ئادىيات\";\n\"sura_names[100]\" = \"قارىئە\";\n\"sura_names[101]\" = \"تەكاسۇر\";\n\"sura_names[102]\" = \"ئەسر\";\n\"sura_names[103]\" = \"ھۇمەزە\";\n\"sura_names[104]\" = \"فىل\";\n\"sura_names[105]\" = \"قۇرەيش\";\n\"sura_names[106]\" = \"مائۇن\";\n\"sura_names[107]\" = \"كەۋسەر\";\n\"sura_names[108]\" = \"كافىرون\";\n\"sura_names[109]\" = \"نەسر\";\n\"sura_names[110]\" = \"مەسەد\";\n\"sura_names[111]\" = \"ئىخلاس\";\n\"sura_names[112]\" = \"فەلەق\";\n\"sura_names[113]\" = \"ناس\";\n"
  },
  {
    "path": "Core/Localization/Resources/uz.lproj/Android.strings",
    "content": "\"about_contributors\" = \"Ishtirokchilar\";\n\"about_contributors_summary\" = \"Ushbu \\\"Quran for Android\\\" ilovasini ishlab chiqarishda ishtirok etganlar roʻyxati\";\n\"about_data_sources\" = \"Maʼlumotlar manbalari\";\n\"about_description\" = \"\\\"Quran for Android\\\" - bu bepul Qurʼon ilovasidir. Iltimos, ilovani ishlab chiqarishda ishtirok etganlarni duolaringizda unutmang.\";\n\"about_furqan_summary\" = \"Usmoniy matn hamda arabcha tafsirlar\";\n\"about_images\" = \"Rasmlar\";\n\"about_madani_images\" = \"Qurʼon sahifalari rasmlari Podshoh Fahd Qurʼon Bosma Kompleksi shriftlari asosida yaratildi\";\n\"about_naskh_images\" = \"\\\"Quran - Naskh\\\" ilovasi uchun rasmlar \\\"SHL Info Systems\\\" ruhsati bilan olindi\";\n\"about_noorhidayat_summary\" = \"\\\"Noorehira\\\" shrifti hamda Mufti Taqi Usmoniy tarjimasi\";\n\"about_open_source\" = \"Ochiq kodli proyektlar\";\n\"about_others\" = \"Boshqalar\";\n\"about_qaloon_images\" = \"\\\"Quran - Qaloon\\\" ilovasi uchun rasmlar \\\"Nous Memes Editions Et Diffusion (Tunisia)\\\" ruhsati bilan olindi\";\n\"about_quran_enc_summary\" = \"Koʻplab tillardagi Qurʼon maʼnolari tarjimalari\";\n\"about_quran_ksu\" = \"Elektron Musʼhaf proyekti\";\n\"about_quran_ksu_summary\" = \"Arabcha tafsir hamda baʼzi tarjimalar Podshoh Saud Universiteti qoshidagi Elektron Musʼhaf proyektidan olindi.\\\nShuningdek doktor Ayman Suvayd qiroati ham ushbu proyektdan olingan.\\\n\";\n\"about_quranicaudio_summary\" = \"Muttasil mp3 Qurʼon tilovatlari\";\n\"about_tanzil_summary\" = \"Baʼzi tillardagi Qurʼon maʼnolari tarjimalari\";\n\"app_name\" = \"Qurʼon\";\n\"appearance\" = \"Koʻrinish\";\n\"audio_manager\" = \"Audio menejer\";\n\"audio_manager_delete_selection\" = \"Tanlanganlarni oʻchirish\";\n\"audio_manager_download_all\" = \"Hammasini saqlash\";\n\"audio_manager_download_selection\" = \"Tanlanganlarni saqlash\";\n\"audio_manager_remove_audio_msg\" = \"%1$@ audio fayllari oʻchirilsinmi?\";\n\"audio_manager_remove_multiple_audio_msg\" = \"Audio fayllari oʻchirilsinmi?\";\n\"audio_manager_surah_delete\" = \"Oʻchirish\";\n\"audio_manager_surah_download\" = \"Saqlab olish\";\n\"audio_updated_text\" = \"Bir necha Qurʼon audio fayllar yangilandi. Qurilmangizdagi eski\\\nversiyalar oʻchirildi, keyingi safar foydalanganingizda yangilangan versiyalari qayta saqlab olinadi.\\\n\";\n\"audio_updated_title\" = \"Audio fayllar yangilandi\";\n\"available_translations\" = \"Saqlab olish mumkin\";\n\"ayah_copied_popup\" = \"Oyat xotiraga koʻchirildi\";\n\"bookmark_ayah\" = \"Oyatni xatchoʻplash\";\n\"bookmarks_list_empty\" = \"Xatchoʻplar mavjud emas\";\n\"cancel\" = \"Bekor qilish\";\n\"canceling\" = \"Bekor qilinmoqda…\";\n\"copy_ayah\" = \"Oyatni koʻchirish\";\n\"delete_tag\" = \"Tegni oʻchirish\";\n\"delete_translation\" = \"Oʻchirish\";\n\"dialog_ok\" = \"OK\";\n\"download_amount_in_megabytes\" = \"%@ Mb\";\n\"download_cancel\" = \"Bekor qilish\";\n\"download_error_disk\" = \"Uskunada yetarli xotira mavjud emas\";\n\"download_error_general\" = \"Saqlash muvaffaqiyatsiz boʻldi\";\n\"download_error_invalid_download\" = \"Saqlab olingan fayl buzilgan\";\n\"download_error_invalid_download_retry\" = \"Fayl buzilgan, qayta saqlab olishga harakat qilinmoqda…\";\n\"download_error_network\" = \"Tarmoq bogʻlanishida xatolik yuz berdi\";\n\"download_error_network_retry\" = \"Tarqmoq xatoligi, qayta harakat qilinmoqda…\";\n\"download_error_perms\" = \"Ruhsat muammosi tufayli saqlab boʻlmadi\";\n\"download_extra_data\" = \"Boʻlishish va tarjimalardan foydalana olish uchun bir-ikkita kichik hajmdagi fayllar lozim. Hozir saqlab olasizmi?\";\n\"download_processing\" = \"Saqlanmoqda…\";\n\"download_progress\" = \"%1$@/%2$@ saqlandi\";\n\"download_retry\" = \"Qayta harakat qilish\";\n\"download_successful\" = \"Muvaffaqiyatli saqlandi\";\n\"download_sura_ayah_progress\" = \"%1$d-sura %2$d-oyat saqlanmoqda…\";\n\"download_sura_progress\" = \"%3$d-suraning %1$@ (jami: %2$@) saqlanmoqda…\";\n\"downloaded_translations\" = \"Saqlab olingan\";\n\"downloadImportantPrompt\" = \"Uskunangizdagi Qurʼon rasmlari uchun kichik, ammo muhim oʻzgartirishlar kiritish lozim.\\\nYangilangan fayllarni hozir saqlab olasizmi?\";\n\"downloading_message\" = \"Iltimos, fayllar toʻliq saqlanib olinguncha biroz kutib turing.\";\n\"downloadPrompt\" = \"Ilova toʻliq ishlashi uchun baʼzi fayllarni koʻchirib olish lozim.\\\nAgar fayllarni hozir saqlab olmasangiz, Qurʼon sahifalarining ochilishi biroz sekin amalga oshishi mumkin\\\nhamda doimiy Internet aloqasi kerak boʻladi. Fayllarni hozir saqlab olasizmi?\";\n\"downloadPrompt_no\" = \"Yoʻq\";\n\"downloadPrompt_ok\" = \"Ha\";\n\"downloadPrompt_title\" = \"Kerakli fayllar yuklansinmi?\";\n\"downloadTabletPrompt\" = \"Planshetlar uchun rasmlar yangilandi. Yangi fayllarni hozir saqlab olasizmi?\";\n\"edit_tag\" = \"Tegni tahrir qilish\";\n\"email_us\" = \"Agar savollaringizga yuqorida javob olmagan boʻlsangiz quranandroid@gmail.com\\\nadresiga maktub yoʻllashingiz mumkin. Faqat, shuni yodda tutingki, biz juda ham koʻplab e-mail\\\nxabarlar olamiz va shu sababli barcha xatlarga javob yoza olmasligimiz mumkin.\\\nIltimos, maktubni ingliz tilida yuborishni unutmang.\\\n\";\n\"error_getting_translation_list\" = \"Tarjimalar roʻyxatini olib boʻlmadi. Iltimos, birozdan keyin qayta harakat qilib koʻring.\";\n\"export_data_error\" = \"Eksport qilishda xatolik yuz berdi\";\n\"exported_data\" = \"Maʼlumotlar \\\"%1$@\\\"ga eksport qilindi\";\n\"extracting_title\" = \"Ishlanmoqda…\";\n\"found_in_sura\" = \"(%1$d) %2$@ surasi, %3$d-oyat (%4$d-bet)\";\n\"from\" = \"Boshi\";\n\"get_arabic_search_db\" = \"Arabcha izlash bazasini oʻrnatish\";\n\"get_translations\" = \"Tarjimalar saqlab olish\";\n\"gotoPage\" = \"Sahifaga oʻtish\";\n\"help\" = \"\\\n<b>Audiolarni qanday eshitish mumkin?</b>\\\n<br/>Qurʼonning istalgan sahifasini oching va ekranga bir marta bosing.\\\nEkranning quyi qismida chalish tugmasi va qorining ismini koʻrasiz.\\\nQori nomiga bosib roʻyxatdan boshqalarini ham tanlash mumkin.\\\nChalish tugmasiga bosib ochiq turgan sahifa yoki surani eshitish mumkin.\\\n<br/>\\\n<br/><b>Tarjimalarni qanday oʻqish mumkin?</b>\\\n<br/>Qurʼonning istalgan sahifasini oching va ekranga bir marta bosing.\\\nEkranning yuqori qismida globus rasmini koʻrasiz. Globusga bosib tarjima tanlang.\\\n<br/>\\\nAgar avval saqlangan tarjimalar mavjud boʻlmasa, tarjimalarni saqlab olish sahifasi ochiladi.\\\nIstalgan tarjimani tanlab, saqlab oling. Shundan keyin orqaga qaytib globus rasmini yana bir marta bosing.\\\n<br/>\\\n<br/><b>Sahifani qanday xatchoʻplash mumkin?</b>\\\n<br/>Qurʼonning istalgan sahifasini oching va ekranga bir marta bosing.\\\nEkranning yuqori qismida xatchoʻp rasmini koʻrasiz. Xatchoʻpga bir marta bosish orqali sahifani\\\nxatchoʻplang (rasm rangi toʻq oq rangga oʻzgaradi), yana bir marta bosilsa sahifa xatchoʻplardan oʻchiriladi.\\\n<br/>\\\n<br/><b>Shriftlarni qanday kattalashtirish mumkin?</b>\\\n<br/>Arabcha matnlarni kattalashtirish uchun uskunangizni landshaft (yotiq) holatda tuting.\\\nTarjima matnlari shriftini esa sozlamalar orqali oʻzgartirishingiz mumkin.\\\n<br/>\\\n<br/><b>Oyatni boshqalar bilan qanday boʻlishish mumkin?</b>\\\n<br/>Qurʼonning istalgan sahifasini oching va biror oyat ustiga biroz bosib turing.\\\nYangi ochilgan menyu orqali oyatni xatchoʻplarga qoʻshishingiz, teglashingiz, boʻlishingiz,\\\ntarjimasini koʻrishingiz hamda qiroatini tinglashingiz mumkin.\\\n<br/>\\\n<br/><b>Malayalam/Tamil/Bengali/Urdu shriflari ishlamayabdi!</b>\\\n<br/>Afsuski, Android 4.0 dan avvalgi versiyalarda ushbu shriftlar umuman ishlamaydi va\\\nbu boradi biz biror yordam qila olmaymiz.\\\n\";\n\"help_title\" = \"Koʻp soʻralgan savollar\";\n\"highlighting_database\" = \"Kerakli fayllar\";\n\"import_data\" = \"Import\";\n\"import_data_and_override\" = \"Ushbu import barcha xatchoʻplarni %1$d ta xatchoʻp(lar) va %2$d ta teg(lar) bilan almashtiradi.\\\nImport qilasizmi?\";\n\"import_data_error\" = \"Yaroqsiz zaxira fayl (yoxud zaxira faylni oʻqib boʻlmadi).\";\n\"import_data_permissions_error\" = \"Ruxsat xatoliklari tufayli zaxira faylini oʻqib boʻlmadi.\";\n\"import_successful\" = \"Muvaffaqiyatli import qilindi\";\n\"juz2_description\" = \"%1$@-juz\";\n\"kitkat_external_message\" = \"Ilovani tashqi xotiraga (SD kartaga) koʻchirib oʻtkazgach, agar u oʻchirib tashlab-qayta oʻrnatilsa\\\nyoki maʼlumotlari tozalansa barcha Qurʼon rasmlari va audio fayllar ham oʻchib ketadi va ushbu kerakli maʼlumotlarni yana qayta saqlab\\\nolishga toʻgʻri keladi. Baribir tashqi xotiradan foydalanmoqchimisiz?\";\n\"loading\" = \"Yuklanmoqda…\";\n\"madani\" = \"Madaniy\";\n\"makki\" = \"Makkiy\";\n\"manzil_description\" = \"%1$@-manzil\";\n\"menu_about\" = \"Ilova haqida\";\n\"menu_back_to_page\" = \"Qurʼon\";\n\"menu_bookmarks\" = \"Xatchoʻplar\";\n\"menu_bookmarks_ayah\" = \"Oyat xatchoʻplari\";\n\"menu_bookmarks_page\" = \"Sahifa xatchoʻplari\";\n\"menu_get_translations\" = \"Tarjimalar yuklab olish\";\n\"menu_help\" = \"Yordam\";\n\"menu_jump\" = \"Oʻtish\";\n\"menu_jump_last_page\" = \"Soʻnggi oʻqilgan sahifa\";\n\"menu_other_apps\" = \"Boshqa ilovalar\";\n\"menu_search\" = \"Izlash\";\n\"menu_settings\" = \"Sozlamalar\";\n\"menu_show_date\" = \"Sanalarni koʻrsatish\";\n\"menu_sort\" = \"Tartib\";\n\"menu_sort_date\" = \"Sana\";\n\"menu_sort_group_by_tags\" = \"Teglarga boʻlish\";\n\"menu_sort_location\" = \"Qurʼondagi yeri\";\n\"menu_translation\" = \"Tarjimalar\";\n\"more_translations\" = \"Yana tarjimalar\";\n\"move_down\" = \"Pastga\";\n\"move_up\" = \"Yuqoriga\";\n\"need_translation\" = \"Birorta ham tarjima saqlab olinmagan.\";\n\"new_tag\" = \"Yangi teg\";\n\"next\" = \"Keyingi\";\n\"no_arabic_search_available\" = \"Arabcha izlash moduli oʻrnatilmagan, iltimos, avval uni saqlab oling. Soʻngra qayta izlab koʻring.\";\n\"no_results\" = \"\\\"%@\\\" boʻyicha natija topilmadi\";\n\"not_tagged\" = \"Teglanmagan\";\n\"notification_channel_audio\" = \"Qurʼon qiroati\";\n\"notification_channel_download\" = \"Qurʼon yuklamalari\";\n\"notification_download_canceled\" = \"Saqlash bekor qilindi\";\n\"page_description\" = \"%1$@-bet, %2$@-juz\";\n\"pause\" = \"Pauza\";\n\"play\" = \"Chalish\";\n\"play_apply\" = \"Joriy qilish\";\n\"play_apply_and_play\" = \"Joriy qilish va chalish\";\n\"play_each_verse\" = \"Har bir oyatni:\";\n\"play_from_here\" = \"Shu yerdan boshlab chal\";\n\"play_restrict_range\" = \"Yuqorida oyatlarnigina eshitish\";\n\"play_verses_range\" = \"Oyatlar toʻplamini:\";\n\"playback_prompt_title\" = \"Boshlash joyi:\";\n\"playback_speed\" = \"Tezlik:\";\n\"please_grant_permissions\" = \"Iltimos, ilova sozlamalari orqali kerakli ruxsatlarni bering\";\n\"please_wait\" = \"Iltimos, biroz kuting…\";\n\"post_notification_permission\" = \"Qurʼon bildirishnomalar yuborishi uchun ruxsat berasizmi? Bu faqat fayllar saqlab olish statuslarini koʻrsatish yoxud audio fayllar avtomatik ravishda yuklab olinishida koʻrsatiladi.\";\n\"prefs_app_location_summary\" = \"Qurʼon fayllari saqlanadigan joy\";\n\"prefs_app_location_title\" = \"Maʼlumotlar jildi\";\n\"prefs_app_size\" = \"Mavjud fayllar hajmi:\";\n\"prefs_audio_manager_summary\" = \"Qurʼon audio fayllarini saqlab olish va boshqarish\";\n\"prefs_ayah_before_translation_summary\" = \"Arabcha oyatlarni tarjima matni ustida koʻrsatish\";\n\"prefs_ayah_before_translation_title\" = \"Oyatni avval koʻrsatish\";\n\"prefs_ayah_text_title\" = \"Oyat matni hajmi\";\n\"prefs_calculating_app_size\" = \"Ilova hajmi hisoblanmoqda…\";\n\"prefs_category_advanced\" = \"Ilgʻor\";\n\"prefs_category_advanced_summary\" = \"Xatchoʻplarni import/eksport qilish, maʼlumotlar jildini tanlash va h.k.\";\n\"prefs_category_display_settings\" = \"Displey\";\n\"prefs_category_download\" = \"Saqlab olish\";\n\"prefs_category_dual_screen\" = \"Juft sahifa sozlamalari\";\n\"prefs_category_reading\" = \"Oʻqish\";\n\"prefs_category_translation\" = \"Tarjima sozlamalari\";\n\"prefs_copying_app_files\" = \"Ilova fayllari koʻchirilmoqda…\";\n\"prefs_display_marker_summary\" = \"Juz, hizb kabi boʻlimlarga yetib kelganda bu haqida maʼlumot koʻrsatish\";\n\"prefs_display_marker_title\" = \"Boʻlim maʼlumotlari\";\n\"prefs_download_amount_summary\" = \"Nomuttasil audio fayllarni saqlab olish hajmi\";\n\"prefs_download_amount_title\" = \"Hajm\";\n\"prefs_dual_page_mode_disabled\" = \"Yotiq holatda ham faqat bitta sahifa koʻrinadi\";\n\"prefs_dual_page_mode_enabled\" = \"Yotiq holatda ikki sahifa yonma-yon koʻrinadi\";\n\"prefs_dual_page_mode_title\" = \"Juft sahifa rejimi\";\n\"prefs_err_moving_app_files\" = \"Fayllarni koʻchirib oʻtkazishda xatolik yuz berdi\";\n\"prefs_export_csv_summary\" = \"Xatchoʻp va teglarni CSV formatda eksport qilish\";\n\"prefs_export_csv_title\" = \"CSV formatda eksport\";\n\"prefs_export_summary\" = \"Xatchoʻp va teglarni eksport qilish\";\n\"prefs_export_title\" = \"Eksport\";\n\"prefs_highlight_bookmarks_summary\" = \"Xatchoʻplangan oyatlarni alohida ajratib koʻrsatish\";\n\"prefs_highlight_bookmarks_title\" = \"Xatchoʻp maʼlumotlari\";\n\"prefs_import_summary\" = \"Xatchoʻp va teglarni import qilish\";\n\"prefs_import_title\" = \"Import\";\n\"prefs_megabytes_int\" = \"%1$d Mb\";\n\"prefs_new_background_title\" = \"Yangi fon\";\n\"prefs_night_mode_background_brightness_summary\" = \"Tungi rejim faol boʼlganda sahifaning yorqinligi\";\n\"prefs_night_mode_background_brightness_title\" = \"Fon yorqinligi\";\n\"prefs_night_mode_summary\" = \"Qora fon va porloq shriftlardan foydalaniladi\";\n\"prefs_night_mode_text_brightness_summary\" = \"Tungi rejim ishga tushirilgan paytdagi matn porloqliligi\";\n\"prefs_night_mode_text_brightness_title\" = \"Matn porloqliligi\";\n\"prefs_night_mode_title\" = \"Tungi rejim\";\n\"prefs_no_enough_space_to_move_files\" = \"Fayllarni koʻchirib oʻtkazish uchun yetarli joy mavjud emas\";\n\"prefs_overlay_page_info_summary\" = \"Sura nomi, sahifa va juz raqamlarini koʻrsatish\";\n\"prefs_overlay_page_info_title\" = \"Sahifa maʼlumotlari\";\n\"prefs_page_type_summary\" = \"Qurʼon sahifalari turini tanlash\";\n\"prefs_page_type_title\" = \"Sahifa turi (eksperimental)\";\n\"prefs_preview\" = \"Oldindan koʻrish\";\n\"prefs_sdcard_external\" = \"Tashqi xotira (SD karta %1$d)\";\n\"prefs_sdcard_internal\" = \"Ichki xotira\";\n\"prefs_send_logs_summary\" = \"Ishlab chiqaruvchiga debag qaydlarini yuborish\";\n\"prefs_send_logs_title\" = \"Qaydlarni yuborish\";\n\"prefs_split_page_and_translation_summary\" = \"Juft sahifa rejimi yoniq boʻlsa, tarjimalar ekranida Qurʼonning toʻliq sahifasi koʻrsatiladi\";\n\"prefs_split_page_and_translation_title\" = \"Tarjima rejimida Qurʼon\";\n\"prefs_streaming_summary\" = \"Imkon qadar audio strimingdan foydalanish\";\n\"prefs_streaming_title\" = \"Striming\";\n\"prefs_sura_translated_name_summary\" = \"Sura nomi tarjimasi koʻrsatilsin\";\n\"prefs_sura_translated_name_title\" = \"Sura nomi tarjimasi\";\n\"prefs_translation_text_title\" = \"Tarjima shrifti oʻlchami\";\n\"prefs_translations\" = \"Tarjimalar\";\n\"prefs_translations_summary\" = \"Tarjimalarni saqlab olish va boshqarish\";\n\"prefs_use_arabic_summary_on\" = \"Ilova arab tilida ishlaydi\";\n\"prefs_use_arabic_title\" = \"Arabcha rejim (الوضع العربي)\";\n\"prefs_use_dyslexic_font_summary\" = \"Tarjimalar matni disleksiyasi borlar uchun qulay shriftda ko‘rsatiladi\";\n\"prefs_use_dyslexic_font_title\" = \"Disleksiyaga mos shrift\";\n\"prefs_volume_key_navigation_summary\" = \"Qurilmaning ovoz tugmalari yordamida varoqlash\";\n\"prefs_volume_key_navigation_title\" = \"Ovoz tugmalaridan foydalanish\";\n\"previous\" = \"Avvalgi\";\n\"process_progress\" = \"%1$d/%2$d ishlandi\";\n\"qarilist_dismiss\" = \"Rad etish\";\n\"qarilist_gapless\" = \"uzluksiz\";\n\"qarilist_gapped\" = \"Bo\\'shashgan\";\n\"qarilist_qaris_with_downloads\" = \"Yuklab olish bilan tilovatchilar\";\n\"qarilist_ready_to_play\" = \"Eshitishga tayyor\";\n\"qarilist_select_qari\" = \"Qori tanlang\";\n\"qarilist_selected\" = \"Tanlangan\";\n\"quran_ayah\" = \"%1$d-oyat\";\n\"quran_ayah_details\" = \"%1$@ %2$@-oyat, %3$@-juz\";\n\"quran_hizb\" = \"Hizb\";\n\"quran_juz2\" = \"Juz\";\n\"quran_nos\" = \"½\";\n\"quran_page\" = \"Sahifa\";\n\"quran_rob3\" = \"¼\";\n\"quran_sura\" = \"Sura\";\n\"quran_sura_title\" = \"%1$@ surasi\";\n\"quran_talt_arb3\" = \"¾\";\n\"quranSearchType\" = \"Suralar\";\n\"recent_pages\" = \"Soʻnggi sahifalar\";\n\"recite_from_here\" = \"Bu yerdan o\\'qing\";\n\"remove_button\" = \"Oʻchirish\";\n\"remove_dlg_msg\" = \"Haqiqatda \\\"%1$@\\\" tarjimasini oʻchirmoqchimisiz??\";\n\"remove_dlg_title\" = \"Tarjima oʻchirilsinmi?\";\n\"repeatValues[0]\" = \"1 marta\";\n\"repeatValues[1]\" = \"2 marta\";\n\"repeatValues[2]\" = \"3 marta\";\n\"repeatValues[3]\" = \"davomiy\";\n\"scoped_storage_message\" = \"Foydalanuvchilar xavfsizligini taʼminotini oshirish boʻyicha oʻzgarishlar tufayli Android tizimining\\\nyangi versiyalarida ilovamiz ushbu jilddagi maʼlumotlarni oʻqiy olmay qolishi mumkin. Shunga qaramasdan hozir ushbu jilddan foydalanmoqchimisiz?\\\n\";\n\"sdcard_error\" = \"SD karta topilmadi.Iltimos, kartani montaj qiling va qayta harakat qilib koʻring.\";\n\"search_data\" = \"Maʼlumot izlash\";\n\"search_entire_mushaf\" = \"Butun musʼhafni qidirish\";\n\"search_full_results\" = \"Barcha natijalar\";\n\"search_hint\" = \"Izlash\";\n\"search_key\" = \"Sura topish uchun izlash tugmasiga bosing\";\n\"see_tafseer_of_verse\" = \"Ushbu oyatning tafsiri %d-oyatning tafsirida mavjud (koʻrish uchun bosing).\";\n\"share_ayah\" = \"Oyat bogʻichini boʻlishish\";\n\"share_ayah_text\" = \"Oyat matnini boʻlishish\";\n\"starting_page_label\" = \"Sahifa boshlanishi\";\n\"stop\" = \"Toʻxtatish\";\n\"storage_permission_please_restart\" = \"Iltimos, ushbu oʻzgarish amalga kirishi uchun\\\nilovani qayta ishga tushiring.\";\n\"storage_permission_rationale\" = \"Qurʼon maʼlumotlarni saqlash uchun tashqi xotiraga\\\nbogʻlanishga ruxsat berishingizni soʻramoqda. Ushbu ruxsatni bermasangiz ham Qurʼon ishlashi\\\nmumkin, biroq ilovani oʻchirsangiz yoki maʼlumotlarni tozalasangiz barcha saqlab olingan\\\nsuralar, audio va tarjimalar ham oʻchib ketadi. Tashqi xotiraga bogʻlanishga ruxsat\\\nberasizmi?\";\n\"sura_ayah_notification_str\" = \"%1$@ surasi %2$d-oyat\";\n\"sura_ayah_sharing_str\" = \"%1$@ - %2$d\";\n\"tag_ayah\" = \"Oyatni teglash\";\n\"tag_blank_tag_error\" = \"Teg nomi boʻsh boʻlmasligi kerak!\";\n\"tag_bookmark\" = \"Xatchoʻpni teglash\";\n\"tag_dlg_title\" = \"Teg\";\n\"tag_duplicate_tag_error\" = \"Ushbu teg nom allaqachon mavjud!\";\n\"tag_name\" = \"Nom\";\n\"timing_database\" = \"Kerakli fayllar\";\n\"to\" = \"Oxiri\";\n\"translation_ayah\" = \"Oyat tarjimasi\";\n\"translation_dialog_later\" = \"Keyinroq\";\n\"translation_dialog_yes\" = \"Ha\";\n\"translation_updates_available\" = \"Tarjimalar uchun yangilanishlar mavjud, hozir tekshirib koʻrasizmi?\";\n\"undo\" = \"Bekor qilish\";\n\"update_available\" = \"Yangilanishlar mavjud\";\n\"warning\" = \"Ogohlantirish\";\n"
  },
  {
    "path": "Core/Localization/Resources/uz.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>audio_manager_delete_surah_error</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_delete_surah_error@</string>\n            <key>audio_manager_delete_surah_error</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Surani oʻchirishda xatolik yuz berdi</string>\n                <key>other</key>\n                <string>%1$d ta surani oʻchirishda xatolik yuz berdi</string>\n            </dict>\n        </dict>\n        <key>audio_manager_delete_surah_success</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_delete_surah_success@</string>\n            <key>audio_manager_delete_surah_success</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Sura oʻchirildi</string>\n                <key>other</key>\n                <string>%1$d ta sura oʻchirildi</string>\n            </dict>\n        </dict>\n        <key>audio_manager_files_downloaded</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_files_downloaded@</string>\n            <key>audio_manager_files_downloaded</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Bitta sura saqlangan</string>\n                <key>other</key>\n                <string>%1$d ta sura saqlangan</string>\n            </dict>\n        </dict>\n        <key>bookmark_tag_deleted</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@bookmark_tag_deleted@</string>\n            <key>bookmark_tag_deleted</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Bitta element oʻchirildi</string>\n                <key>other</key>\n                <string>%d ta element oʻchirildi</string>\n            </dict>\n        </dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>\\&quot;%1$d\\&quot; boʻyicha bitta natija:</string>\n                <key>other</key>\n                <string>\\&quot;%1$d\\&quot; boʻyicha %2$d ta natijalar:</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Bir oyat</string>\n                <key>other</key>\n                <string>%d oyat</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/uz.lproj/Localizable.strings",
    "content": "\n\n// MARK: - General\n\n// Metadata: Translated by ChatGPT; human review required.\n\"button.done\" = \"Tugallandi\";\n// Metadata: Translated by ChatGPT; human review required.\n\"button.delete\" = \"O'chirish\";\n\n// MARK: - Errors\n\n// Metadata: Translated by ChatGPT; human review required.\n\"error.dialog.title\" = \"Xato\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.connection_lost\" = \"Internet aloqasi yo'qolgan. Ko'proq barqaror aloqa mavjud joyga o'ting yoki aloqa barqaror bo'lguncha kuting.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.international_roaming_off\" = \"Xalqaro sayohatga ruxsat berilmagan. Xalqaro sayohat sozlamalarini o'zgartiring yoki Wi-Fi yoqing.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.not_connected_to_internet\" = \"Internetga ulanmagan. Wi-Fi yoqing yoki mobil ma'lumot aloqasiga ruxsat bering.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.general\" = \"Xo'p! Nimadir noto'g'ri bo'ldi. Iltimos, qayta urinib ko'ring.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.no_disk_space\" = \"Yuklamalarni saqlash uchun bo'sh disk maydoni yo'q.\";\n\n// MARK: - Quran\n\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah\" = \"Oyat\";\n// Metadata: Translated by ChatGPT; human review required.\n\"surah\" = \"Sura\";\n// Metadata: Translated by AI; human review required.\n\"quran_alquran\" = \"Qurʼon\";\n\n// MARK: - Translation\n\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.translation\" = \"Tarjima\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.transliteration\" = \"Transliteratsiya\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.selectedTranslations\" = \"Tanlangan\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.translator\" = \"Tarjimon: \";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.see-referenced-verse\" = \"%d-oyatni ko'ring.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.read-more\" = \"Ko'proq o'qing\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-retrieval\" = \"Xo'p! Nimadir noto'g'ri bo'ldi. Tarjimani qayta olmadik.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-not-available\" = \"Bu oyat uchun tarjima mavjud emas.\";\n\n// MARK: - Search\n\n// Metadata: Translated by ChatGPT; human review required.\n\"search.recents.title\" = \"So'nggi qidiruvlar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.popular.title\" = \"Quyidagi bilan qidirishni sinab ko'ring\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.placeholder.text\" = \"Sura, oyat, tarjima, tafsir va raqamlar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.result.count\" = \"%@ (%d)\";\n\n// MARK: - Settings\n\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.write_review\" = \"Ilovalar do'konida sharh yozing...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.contact_us\" = \"Biz bilan bog'laning\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.donate\" = \"Xayriya qilish\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.share_app\" = \"Ilovani ulashing...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.app_version\" = \"Ilova versiyasi\";\n\n// MARK: - Quran Menu\n\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabic\" = \"Arabcha\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translation\" = \"Tarjima/Tafsir\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.select_translation\" = \"Tarjimalar/Tafsirni tanlang\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer\" = \"So'z tarjimasining ko'rsatkichi\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer.select_translation\" = \"Ko'rsatkichni ko'rsatish\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.fontSizeLetter\" = \"A\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translationFontSize\" = \"Tarjima hajmi\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabicFontSize\" = \"Qur'on hajmi\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.twoPages\" = \"Yonma-yon 2 sahifa (gorizontal formatda)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.verticalScrolling\" = \"Vertikal aylantirish\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.theme_settings\" = \"Mavzular va sozlamalar\";\n\n// MARK: - Theme\n\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.light\" = \"Yorug'\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.dark\" = \"Qorong'u\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto\" = \"Avtomatik\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto.message\" = \"Qur'on ilovasi iPhone-ning ko'rinish sozlamalariga rioya qiladi\";\n\n// MARK: - Tabs\n\n// Metadata: Translated by ChatGPT; human review required.\n\"tab.notes\" = \"Eslatmalar\";\n\n// MARK: - Update\n\n// Metadata: Translated by ChatGPT; human review required.\n\"update.filesystem.title\" = \"Ma'lumotlar bazasini yangilamoqda...\";\n\"downloading_title\" = \"Saqlanmoqda…\";\n\n// MARK: - Reciters\n\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.title\" = \"Eshitish uchun qori tanlang\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.recent\" = \"Yaqinda\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.downloaded\" = \"Yuklab olingan\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.all\" = \"Hammasi\";\n\n// MARK: - Audio\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.action.modify\" = \"O'zgartirish\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.message\" = \"%@ dan %@ gacha audio o'ynatilmoqda\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.downloading.message\" = \"%@ dan %@ gacha audio yuklanmoqda\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing-verses.label\" = \"Oyatlar o'ynatilmoqda\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.adjust-end-verse-to-the-end.label\" = \"Oxirgi oyatni oxirigacha sozlang\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-start-verse\" = \"Boshlang'ich oyatni tanlang\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-end-verse\" = \"Yakuniy oyatni tanlang\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount\" = \"Yuklash/O'ynashgacha\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount.description\" = \"Audio o'ynatilganda oxirigacha o'ynatiladi\";\n\n// MARK: - Bookmarks\n\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.title\" = \"Xatcho'plar qo'shilmoqda...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.text\" = \"Qur'onni o'qiyotganda, joriy sahifani belgilash uchun xatcho'p tugmasini bosing.\";\n\n// MARK: - Notes\n\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.title\" = \"Oyat ta'kidlarini qo'shish...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.text\" = \"Oyat ustiga bosing va ushlab turing. Tanlovni bir nechta oyatlarni o'z ichiga oladigan qilib kengaytirishingiz mumkin, keyin xatcho'p tugmasini bosing.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.verses-count\" = \"(+%d oyat)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.title\" = \"Ta'kidni o'chirish\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.body\" = \"Bog'liq eslatma ham o'chiriladi.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.title\" = \"iCloud sinxronizatsiyasi\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.body\" = \"Ushbu ilova qurilmalaringizda xatcho'plar va eslatmalar sinxronlash uchun iCloud'dan foydalanadi. Uni qurilmangizning iCloud sozlamalaridan o'chirib qo'yishingiz mumkin.\";\n\n// MARK: - Ayah Menu\n\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.copy\" = \"Nusxalash\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.share\" = \"Ulashish...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-juz\" = \"Juz' oxirigacha\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-surah\" = \"Surah oxirigacha\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-page\" = \"Sahifa oxirigacha\";\n// Metadata: Translated by AI; human review required.\n\"ayah.menu.play-end-quran\" = \"Qur'on oxirigacha\";\n\"ayah.menu.repeat\" = \"Takrorlang\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verse\" = \"tanlangan oyat\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verses\" = \"tanlangan oyatlar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight\" = \"Ajratib ko'rsatish\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight-select-color\" = \"rangni tanlash\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.add-note\" = \"Eslatma qo'shish\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.edit-note\" = \"Eslatmani tahrirlash\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-note\" = \"Eslatmani o'chirish\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-highlight\" = \"Ajratib ko'rsatishni o'chirish\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.short\" = \"Tanlash\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.long\" = \"Joriy Mushaf sifatida belgilash\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.title\" = \"Mushaf tanlash\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selection-description\" = \"Ko'proq ma'lumot olish uchun Mushafni bosing.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.hafs\" = \"Hafs Mushaf\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.pages.604\" = \"604 sahifa\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.lines.15\" = \"15 chiziqli sahifa\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.supported\" = \"So'zma-so'z tarjima\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.not-supported\" = \"So'zma-so'z tarjimasi yo'q\";\n\n// Hafs 1405\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.title\" = \"Hafs, an'anaviy Madina, 1405 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.description\" = \"1405 Hijriy yilda Madinada chop etilgan an'anaviy Hafs Mushafi. Ushbu ilova uzoq vaqt ushbu versiyani taklif qildi.\\nQirol Fahd Qur'on bosma kompleksidan.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.issue\" = \"1405 Hijriy yilda nashr etilgan\";\n\n// Hafs 1421\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.title\" = \"Hafs, Madina, 1421 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.description\" = \"1421 Hijriy yilda Madinada chop etilgan Hafs Mushafi. Qirol Fahd Qur'on bosma kompleksidan.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.issue\" = \"1421 Hijriy yilda nashr etilgan\";\n\n// Hafs 1440\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.title\" = \"Hafs, Madina, 1440 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.description\" = \"1440 Hijriy yilda Madinada chop etilgan Hafs Mushafi. Qirol Fahd Qur'on bosma kompleksidan.\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.issue\" = \"1440 Hijriy yilda nashr etilgan\";\n\n// Hafs Tajweed\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.title\" = \"Hafs, Tajvid\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.description\" = \"Tajvid Hafs Mushafi. Al-Qur'an Al-Kareem - Dar al-Marefa nashri.\";\n\n// MARK: - Diagnostics\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.title\" = \"Diagnostika\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.details\" = \"Ushbu sozlamalar dastur ishlab chiqaruvchisi tomonidan maxsus tuzatish va diagnostika maqsadida ishlatiladi.\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.share_app_logs\" = \"Ilova loglarini ulashish\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs\" = \"Tuzatish qaydini yoqish\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs.details\" = \"Bu sozlama ilovani keyingi qayta ishga tushirilganda amalga oshadi.\";\n\n\n// MARK: - What's new\n\n// Metadata: Translated by ChatGPT; human review required.\n\"new.title\" = \"Yangiliklar\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.action\" = \"Davom etish\";\n\n// Mushafs\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs\" = \"Yangi Mushaflar:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs.details\" = \"* Tajvid Hafs Mushafi: Al-Qur'an Al-Karim - Dar al-Marefa nashri.\\n* 1421 hijriy Madina Mushafi.\\n* 1440 hijriy Madina Mushafi.\\n* Bundan tashqari, klassik 1405 hijriy versiyasidan zavqlanishda davom eting.\";\n\n// Reciters\n// Metadata: Translated by ChatGPT; human review required.\n\"new.reciters\" = \"Yangi qorilar:\";\n\n// Miscellaneous\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous\" = \"Turli-tuman:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous.details\" = \"* Yangi ilovalarning tashqi ko'rinishi yangilandi.\\n* Qidiruvni yaxshi qilish imkoniyatini oshirdi (yaqinda yangi algoritm keladi).\\n* Vietnam lokalizatsiya qo'llab-quvvatlash.\\n* Tilovchi ishlayotganida yuqori audio sozlamalari yo'l qo'yiladi.\\n* Ilovadan hozirgi kunlarda ochiq manbai: https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades\" = \"Audio:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades.details\" = \"* Qiroat tezligini 0.5x, 0.75x, 1x, 1.25x, 1.5x darajalarida sozlang - @adnan29979 ga rahmat.\\n* Qayta ijro etish sevimli tezligingizni eslab qoladi - @adnan29979 ga rahmat.\";\n\n// Personalization\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization\" = \"O'qish mavzulari:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization.details\" = \"* Bir nechta mavzuni qo'llab-quvvatlaydi. Qur'onning bir betini oching -> yuqori o'ng menyu -> Mavzular va Sozlamalar.\\n* Oldingi uslubga qaytmoqchi bo'lsangiz, 'Original'dan foydalaning.\";\n\n// Library & Navigation\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation\" = \"Kutubxona va navigatsiya:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation.details\" = \"* Bosh sahifada suralar va juzlarni tartiblang hamda sura raqamlarini ko'rsating, shunda kerakli joyga tezroq o'tasiz - @yismailuofa ga rahmat.\";\n"
  },
  {
    "path": "Core/Localization/Resources/uz.lproj/Readers.strings",
    "content": "\"qari_abdulaziz_zahrani_gapless\" = \"Abdulaziz Az-Zahroniy\";\n\"qari_abdulbaset\" = \"Abdulbosit (doimiy emas)\";\n\"qari_abdulbaset_gapless\" = \"Abdulbosit\";\n\"qari_abdulbaset_mujawwad\" = \"Abdulbosit (mujavvad)\";\n\"qari_abdulbaset_mujawwad_gapless\" = \"Abdulbosit (mujavvad)\";\n\"qari_abdulhadi_kanakeri_gapless\" = \"AbdulHadi Kanakeri\";\n\"qari_abdullah_matroud_gapless\" = \"Abdulloh Matroud\";\n\"qari_abdulmuhsin_qasim_gapless\" = \"Abdul Mohsen al-Qasim\";\n\"qari_abdulrahman_alshahat_gapless\" = \"Abdurahmon Ash-Shahat\";\n\"qari_abdurrashid_sufi_gapless\" = \"Abdurashid Sufiy\";\n\"qari_afasy\" = \"Mishariy al-Afasiy (doimiy emas)\";\n\"qari_afasy_cali_gapless\" = \"Mishariy al-Afasiy (Kalifornia)\";\n\"qari_afasy_gapless\" = \"Mishariy al-Afasiy\";\n\"qari_ahmad_nauina_gapless\" = \"Ahmad Nauiyna\";\n\"qari_ahmed_al_nufais_gapless\" = \"Ahmed Al-Nufais\";\n\"qari_ajamy_gapless\" = \"Ahmad ibn Ali al-Ajamiy\";\n\"qari_akram_al_alaqmi\" = \"Akram al-Alaqmiy\";\n\"qari_ali_hajjaj_alsouasi_gapless\" = \"Ali Hajjoj Alsuaysiy\";\n\"qari_ali_jaber_gapless\" = \"Ali Jaber\";\n\"qari_alijon_qari_gapless\" = \"Alijon Qari\";\n\"qari_aloosi_gapless\" = \"Abdul Rahmon Aloosi\";\n\"qari_alzain_ahmad_gapless\" = \"Alzain Muhammad Ahmad\";\n\"qari_ayman_suwaid_gapless\" = \"Ayman Suvayd\";\n\"qari_ayman_suwaid_gapped\" = \"Ayman Suvayd (doimiy emas)\";\n\"qari_ayyoub\" = \"Muhammad Ayyub (doimiy emas)\";\n\"qari_ayyoub_gapless\" = \"Muhammad Ayyub\";\n\"qari_aziz_alili_gapless\" = \"Aziz Aliliy\";\n\"qari_badr_al_turki_gapless\" = \"Badr Al-Turki\";\n\"qari_bandar_baleela_gapless\" = \"Bandar Boliyla\";\n\"qari_basfar\" = \"Abdulloh Basfar (doimiy emas)\";\n\"qari_basfar_gapless\" = \"Abdulloh Basfar\";\n\"qari_dussary\" = \"Yosir Ad-Dussoriy (doimiy emas)\";\n\"qari_fares_abbad_gapless\" = \"Fares Abbad\";\n\"qari_farman_shawani_gapless\" = \"Farman Shawani\";\n\"qari_hady_toure_gapless\" = \"Hady Toure\";\n\"qari_hani_rifai\" = \"Honiy Ar-Rifoiy (doimiy emas)\";\n\"qari_hani_rifai_gapless\" = \"Honiy Ar-Rifoiy\";\n\"qari_hudhayfi\" = \"Ali al-Xuzayfiy (doimiy emas)\";\n\"qari_hudhayfi_gapless\" = \"Ali al-Xuzayfiy\";\n\"qari_husary_gapless\" = \"Xusoriy\";\n\"qari_husary_iza3a_gapless\" = \"Xusoriy (radio)\";\n\"qari_husary_muallim_gapless\" = \"Husariy (muallim)\";\n\"qari_husary_mujawwad\" = \"Xusoriy (mujavvad)\";\n\"qari_husary_mujawwad_gapless\" = \"Xusoriy (mujavvad)\";\n\"qari_ibrahim_alakhdar_gapless\" = \"Ibrohim al-Axdar\";\n\"qari_idrees_abkar_gapless\" = \"Idrees Abkar\";\n\"qari_jibreel\" = \"Muhammad Jibriyl (doimiy emas)\";\n\"qari_jibreel_gapless\" = \"Muhammad Jibriyl\";\n\"qari_juhany_gapless\" = \"Abdulloh al-Juhany\";\n\"qari_khaled_muhanna_gapless\" = \"Xolid al-Muhanna\";\n\"qari_khalid_jalil_gapless\" = \"Khalid Al-Jalil\";\n\"qari_khalid_qahtani_gapless\" = \"Xolid Al Qahtoniy\";\n\"qari_khalifa_taniji_gapless\" = \"Xalifa Tengi\";\n\"qari_luhaidan_gapless\" = \"Muhammad Al-Luhaidan\";\n\"qari_mahmoud_ali_albana_gapless\" = \"Mahmud Ali al-Bana\";\n\"qari_minshawi_mujawwad\" = \"Minshoviy (mujavvad, doimiy emas)\";\n\"qari_minshawi_mujawwad_gapless\" = \"Minshoviy (mujavvad)\";\n\"qari_minshawi_murattal_gapless\" = \"Minshavi (murattal)\";\n\"qari_mishari_walk_gapless\" = \"Mishariy & Ibrohim Volk (inglizcha)\";\n\"qari_mohammad_altablawi_gapless\" = \"Muhammad al-Toblaviy\";\n\"qari_mokhtasar_asmari_gapless\" = \"Abdullah Al-Asmari (Arabcha sharh)\";\n\"qari_mostafa_ismaeel_gapless\" = \"Mustafa Ismoil\";\n\"qari_muaiqly\" = \"Mohir al-Muayqliy (doimiy emas)\";\n\"qari_muaiqly_gapless\" = \"Mohir al-Muayqliy\";\n\"qari_muaiqly_haramain_gapless\" = \"Mohir al-Muayqliy (Haramain)\";\n\"qari_muhammad_rashad_shereef_gapless\" = \"Muhammad Rashad Al-Sherif\";\n\"qari_nabil_rifa3i_gapless\" = \"Nabil Ar-Rifai\";\n\"qari_noreen_siddiq_gapless\" = \"Noreen Siddiq\";\n\"qari_peshawa_qadir_al_qurdi_gapless\" = \"Peshewa Qadir al-Kurdi\";\n\"qari_qatami_gapless\" = \"Nosir al-Qotomiy\";\n\"qari_raad_al_kurdi_gapless\" = \"Raad Al-Kurdi\";\n\"qari_saad_al_ghamdi\" = \"Saʼd al-Gʻomdiy (doimiy emas)\";\n\"qari_saad_al_ghamidi_gapless\" = \"Saʼd al-Gʻomdiy\";\n\"qari_sahl_yaseen_gapless\" = \"Sohil Yosin\";\n\"qari_salah_budair_gapless\" = \"Saloh Budoyr\";\n\"qari_salah_bukhatir_gapless\" = \"Saloh Buxotir\";\n\"qari_shatri\" = \"Abu Bakr Ash-Shatriy (doimiy emas)\";\n\"qari_shatri_gapless\" = \"Abu Bakr Ash-Shatriy\";\n\"qari_shuraym\" = \"Saud Ash-Shuroym (doimiy emas)\";\n\"qari_shuraym_gapless\" = \"Saud Ash-Shuroym\";\n\"qari_suadis\" = \"Abdurahmon As-Sudays (doimiy emas)\";\n\"qari_sudais_gapless\" = \"Abdurahmon As-Sudays\";\n\"qari_tablawy\" = \"Muhammad al-Toblaviy (doimiy emas)\";\n\"qari_tawfeeq_as_sawaigh_gapless\" = \"Tawfeeq as-Sawaigh\";\n\"qari_wadee3_alyamani_gapless\" = \"Wadee\\' Al-Yamani\";\n\"qari_walk\" = \"Ibrohim Volk (inglizcha)\";\n\"qari_walk_gapless\" = \"Ibrohim Volk (inglizcha)\";\n\"qari_yasser_dussary_gapless\" = \"Yosir Ad-Dussoriy\";\n\"qari_yasser_salama_hadr_gapless\" = \"Yosir Salama (hadr)\";\n"
  },
  {
    "path": "Core/Localization/Resources/uz.lproj/Suras.strings",
    "content": "\"sura_names[0]\" = \"Fotiha\";\n\"sura_names[1]\" = \"Baqara\";\n\"sura_names[2]\" = \"Oli Imron\";\n\"sura_names[3]\" = \"Niso\";\n\"sura_names[4]\" = \"Moida\";\n\"sura_names[5]\" = \"Anʼom\";\n\"sura_names[6]\" = \"Aʼrof\";\n\"sura_names[7]\" = \"Anfol\";\n\"sura_names[8]\" = \"Tavba\";\n\"sura_names[9]\" = \"Yunus\";\n\"sura_names[10]\" = \"Hud\";\n\"sura_names[11]\" = \"Yusuf\";\n\"sura_names[12]\" = \"Raʼd\";\n\"sura_names[13]\" = \"Ibrohim\";\n\"sura_names[14]\" = \"Xijr\";\n\"sura_names[15]\" = \"Nahl\";\n\"sura_names[16]\" = \"Isro\";\n\"sura_names[17]\" = \"Kahf\";\n\"sura_names[18]\" = \"Maryam\";\n\"sura_names[19]\" = \"Toxo\";\n\"sura_names[20]\" = \"Anbiyo\";\n\"sura_names[21]\" = \"Haj\";\n\"sura_names[22]\" = \"Moʻminun\";\n\"sura_names[23]\" = \"Nur\";\n\"sura_names[24]\" = \"Furqon\";\n\"sura_names[25]\" = \"Shuaro\";\n\"sura_names[26]\" = \"Naml\";\n\"sura_names[27]\" = \"Qasos\";\n\"sura_names[28]\" = \"Ankabut\";\n\"sura_names[29]\" = \"Rum\";\n\"sura_names[30]\" = \"Luqmon\";\n\"sura_names[31]\" = \"Sajda\";\n\"sura_names[32]\" = \"Ahzob\";\n\"sura_names[33]\" = \"Sabaʼ\";\n\"sura_names[34]\" = \"Fotir\";\n\"sura_names[35]\" = \"Yosin\";\n\"sura_names[36]\" = \"As-Saffot\";\n\"sura_names[37]\" = \"Sod\";\n\"sura_names[38]\" = \"Zumar\";\n\"sura_names[39]\" = \"Gʻofir\";\n\"sura_names[40]\" = \"Fussilat\";\n\"sura_names[41]\" = \"Shuro\";\n\"sura_names[42]\" = \"Zuhruf\";\n\"sura_names[43]\" = \"Duxon\";\n\"sura_names[44]\" = \"Josiya\";\n\"sura_names[45]\" = \"Ahqof\";\n\"sura_names[46]\" = \"Muhammad\";\n\"sura_names[47]\" = \"Fath\";\n\"sura_names[48]\" = \"Hujurot\";\n\"sura_names[49]\" = \"Qof\";\n\"sura_names[50]\" = \"Zariyat\";\n\"sura_names[51]\" = \"Tur\";\n\"sura_names[52]\" = \"Najm\";\n\"sura_names[53]\" = \"Qamar\";\n\"sura_names[54]\" = \"Rahmon\";\n\"sura_names[55]\" = \"Voqea\";\n\"sura_names[56]\" = \"Hadid\";\n\"sura_names[57]\" = \"Mujodala\";\n\"sura_names[58]\" = \"Xashr\";\n\"sura_names[59]\" = \"Mumtahana\";\n\"sura_names[60]\" = \"Saf\";\n\"sura_names[61]\" = \"Juma\";\n\"sura_names[62]\" = \"Munofiqun\";\n\"sura_names[63]\" = \"Tagʻobun\";\n\"sura_names[64]\" = \"Taloq\";\n\"sura_names[65]\" = \"Tahrim\";\n\"sura_names[66]\" = \"Mulk\";\n\"sura_names[67]\" = \"Qalam\";\n\"sura_names[68]\" = \"Haaqqah\";\n\"sura_names[69]\" = \"Maʼorij\";\n\"sura_names[70]\" = \"Nuh\";\n\"sura_names[71]\" = \"Jin\";\n\"sura_names[72]\" = \"Muzzammil\";\n\"sura_names[73]\" = \"Muddassir\";\n\"sura_names[74]\" = \"Qiyomat\";\n\"sura_names[75]\" = \"Inson\";\n\"sura_names[76]\" = \"Mursalat\";\n\"sura_names[77]\" = \"Naba\";\n\"sura_names[78]\" = \"Naziyat\";\n\"sura_names[79]\" = \"Abasa\";\n\"sura_names[80]\" = \"Takvir\";\n\"sura_names[81]\" = \"Infitor\";\n\"sura_names[82]\" = \"Mutaffifun\";\n\"sura_names[83]\" = \"Inshiqoq\";\n\"sura_names[84]\" = \"Buruj\";\n\"sura_names[85]\" = \"Toriq\";\n\"sura_names[86]\" = \"Aʼlo\";\n\"sura_names[87]\" = \"Gʻoshiya\";\n\"sura_names[88]\" = \"Fajr\";\n\"sura_names[89]\" = \"Balad\";\n\"sura_names[90]\" = \"Shams\";\n\"sura_names[91]\" = \"Layl\";\n\"sura_names[92]\" = \"Zuho\";\n\"sura_names[93]\" = \"Sharh\";\n\"sura_names[94]\" = \"Tiyn\";\n\"sura_names[95]\" = \"Alaq\";\n\"sura_names[96]\" = \"Qadr\";\n\"sura_names[97]\" = \"Bayyina\";\n\"sura_names[98]\" = \"Zalzala\";\n\"sura_names[99]\" = \"Оdiyot\";\n\"sura_names[100]\" = \"Qoriʼa\";\n\"sura_names[101]\" = \"Takasur\";\n\"sura_names[102]\" = \"Asr\";\n\"sura_names[103]\" = \"Humaza\";\n\"sura_names[104]\" = \"Fil\";\n\"sura_names[105]\" = \"Quraysh\";\n\"sura_names[106]\" = \"Moʼun\";\n\"sura_names[107]\" = \"Kavsar\";\n\"sura_names[108]\" = \"Kofirun\";\n\"sura_names[109]\" = \"Nasr\";\n\"sura_names[110]\" = \"Masad\";\n\"sura_names[111]\" = \"Ixlos\";\n\"sura_names[112]\" = \"Falaq\";\n\"sura_names[113]\" = \"Nos\";\n"
  },
  {
    "path": "Core/Localization/Resources/vi.lproj/Android.strings",
    "content": "\"about_contributors\" = \"Những người đóng góp\";\n\"about_contributors_summary\" = \"Danh sách những người đã đóng góp vào sự phát triển của Kinh Quran cho Android\";\n\"about_data_sources\" = \"Nguồn Dữ liệu\";\n\"about_description\" = \"Kinh Quran cho Android là một ứng dụng Kinh Quran miễn phí. Xin đừng quên những người đóng góp trong lời cầu nguyện của bạn.\";\n\"about_furqan_summary\" = \"Văn bản Uthmani and Tafaseer Ả Rập\";\n\"about_images\" = \"Ảnh\";\n\"about_madani_images\" = \"Các hình ảnh Kinh Quran dựa trên các phông chữ từ King Fahd Quran Printing Complex\";\n\"about_naskh_images\" = \"Hình ảnh Kinh Quran cho ứng dụng Naskh được lấy (với sự cho phép) từ SHL Info Systems\";\n\"about_noorhidayat_summary\" = \"Phông chữ Noorehira và Bản dịch Mufti Taqi\";\n\"about_open_source\" = \"Dự án Mã nguồn Mở\";\n\"about_others\" = \"Khác\";\n\"about_qaloon_images\" = \"Hình ảnh Qaloon được sử dụng với sự cho phép của Nous Memes Editions Et Diffusion (Tunisia)\";\n\"about_quran_enc_summary\" = \"Bản dịch cho nhiều ngôn ngữ\";\n\"about_quran_ksu\" = \"Electronic Moshaf Project\";\n\"about_quran_ksu_summary\" = \"King Saud University Electronic Moshaf Project là nguồn Tafaseer Ả Rập cho app và các bản dịch cho nhiều ngôn ngữ khác nhau. Nó cũng là nguồn cho bản đọc của Tiến sĩ Ayman Suwaid.\";\n\"about_quranicaudio_summary\" = \"Các bản xướng đọc gapless mp3 Quran\";\n\"about_tanzil_summary\" = \"Bản dịch cho một vài ngôn ngữ\";\n\"app_name\" = \"Kinh Quran\";\n\"audio_manager\" = \"Quản lý Âm thanh\";\n\"audio_manager_delete_selection\" = \"Xóa lựa chọn\";\n\"audio_manager_download_all\" = \"Tải tất cả\";\n\"audio_manager_download_selection\" = \"Tải xuống lựa chọn\";\n\"audio_manager_remove_audio_msg\" = \"Bạn có muốn xóa %1$@?\";\n\"audio_manager_remove_audio_title\" = \"Xóa Surah?\";\n\"audio_manager_remove_multiple_audio_msg\" = \"Bạn có chắc là muốn xóa?\";\n\"audio_manager_surah_delete\" = \"Xóa surah\";\n\"audio_manager_surah_download\" = \"Tải surah\";\n\"audio_updated_text\" = \"Một số tệp âm thanh Kinh Quran đã được cập nhật. Kinh Quran đã loại bỏ\\\nbản sao của các tệp này để có thể tải xuống các phiên bản mới nhất khi bạn phát lần sau.\\\n\";\n\"audio_updated_title\" = \"Cập nhật tệp âm thanh Kinh Quran\";\n\"available_translations\" = \"Có sẵn để tải xuống\";\n\"ayah_copied_popup\" = \"Đã sao chép Ayah\";\n\"bookmark_ayah\" = \"Đánh dấu Ayah này\";\n\"bookmarks_list_empty\" = \"Không có Đánh dấu\";\n\"cancel\" = \"Hủy\";\n\"canceling\" = \"Đang hủy…\";\n\"copy_ayah\" = \"Sao chép Ayah\";\n\"delete_tag\" = \"Xóa Thẻ\";\n\"delete_translation\" = \"Xóa Bản dịch\";\n\"dialog_ok\" = \"OK\";\n\"download_amount_in_megabytes\" = \"%@ MB\";\n\"download_cancel\" = \"Hủy\";\n\"download_error_disk\" = \"Không đủ dung lượng đĩa để tải xuống\";\n\"download_error_general\" = \"Không tải xuống được\";\n\"download_error_invalid_download\" = \"Tệp đã tải bị hỏng\";\n\"download_error_invalid_download_retry\" = \"Tệp bị hỏng, đang cố tải lại\";\n\"download_error_network\" = \"Không tải được do lỗi mạng\";\n\"download_error_network_retry\" = \"Lỗi mạng, đang cố gắng tải tiếp…\";\n\"download_error_perms\" = \"Không thể tải xuống do lỗi quyền\";\n\"download_extra_data\" = \"Chúng tôi cần tải xuống một hoặc hai tệp nhỏ để hỗ trợ chia sẻ và dịch thuật. Tải ngay?\";\n\"download_processing\" = \"Xử lý tải xuống…\";\n\"download_progress\" = \"Đã tải xuống %1$@ / %2$@\";\n\"download_retry\" = \"Thử lại\";\n\"download_successful\" = \"Tải xuống thành công\";\n\"download_sura_ayah_progress\" = \"Đang tải xuống surah %1$d ayah %2$d\";\n\"download_sura_progress\" = \"Đã tải xuống %1$@ / %2$@ of surah %3$d\";\n\"downloaded_translations\" = \"Đã tải\";\n\"downloadImportantPrompt\" = \"Có một cập nhật nhỏ nhưng quan trọng\\\ncho những hình ảnh Kinh Quran bạn có trên thiết bị của mình. Bạn có muốn tải bản vá này\\\nbây giờ không?\\\n\";\n\"downloading_message\" = \"Vui lòng đợi tệp tải xuống (hỗ trợ tạm dừng).\";\n\"downloadPrompt\" = \"Để Kinh Quran Android hoạt động bình thường,\\\nchúng tôi cần tải xuống một số tệp. Nếu bạn không làm điều này bây giờ, ứng dụng\\\ncó thể không hoạt động đáng tin cậy và sẽ yêu cầu kết nối Internet để đọc.\\\nBạn có muốn tải xuống các tệp cần thiết ngay bây giờ không?\\\n\";\n\"downloadPrompt_no\" = \"Không\";\n\"downloadPrompt_ok\" = \"Có\";\n\"downloadPrompt_title\" = \"Tải xuống tệp cần thiết?\";\n\"downloadTabletPrompt\" = \"Gần đây chúng tôi đã thêm hình ảnh cải tiến cho\\\nmáy tính bảng. Bạn có muốn tải xuống những hình ảnh này ngay bây giờ không?\";\n\"edit_tag\" = \"Sửa Thẻ\";\n\"email_us\" = \"Nếu câu hỏi của bạn không được trả lời ở trên, bạn có thể gửi email quranandroid@gmail.com để được hỗ trợ.\\\nXin lưu ý rằng chúng tôi nhận được rất nhiều email, vì vậy chúng tôi không thể trả lời tất cả chúng.\";\n\"error_getting_translation_list\" = \"Không thể tải xuống danh sách các bản dịch. Vui lòng thử lại sau.\";\n\"export_data_error\" = \"Lỗi xuất dữ liệu\";\n\"exported_data\" = \"Dữ liệu được xuất sang %1$@\";\n\"extracting_title\" = \"Đang xử lý…\";\n\"found_in_sura\" = \"Tìm thấy ở Surah (%1$d) %2$@: %3$d (page %4$d)\";\n\"from\" = \"Từ\";\n\"get_arabic_search_db\" = \"Tải Gói dữ liệu Tìm kiếm tiếng Ả Rập\";\n\"get_translations\" = \"Tải Bản dịch\";\n\"gotoPage\" = \"Đến trang\";\n\"help\" = \"\\\n<b>Làm cách nào để nghe Quran?</b>\\\n<br/>Mở bất kỳ trang Kinh Quran nào. Chạm vào màn hình một lần. Ở phía dưới, bạn sẽ nhận thấy\\\nmột nút phát và một danh sách tên các qari. Nhấp vào tên của qari để\\\nchọn một qari khác. Nhấp vào phát để tải xuống và phát trang hoặc sura hiện tại.\\\n<br/>\\\n<br/><b>Làm cách nào để xem bản dịch?</b>\\\n<br/>Mở bất kỳ trang Kinh Quran nào. Chạm vào màn hình một lần. Ở trên cùng, bạn sẽ thấy một\\\nbiểu tượng quả địa cầu (hoặc, nếu bạn không nhìn thấy nó, hãy nhấp vào biểu tượng có ba chấm tròn) - nhấn\\\nnó và chọn bản dịch để xem bản dịch.\\\n<br/>\\\nNếu bạn không có bất kỳ bản dịch nào được tải xuống, nó sẽ đưa\\\nbạn đến một màn hình nơi bạn có thể tải xuống các bản dịch. Chọn và tải xuống bản dịch,\\\nsau đó quay lại và nhấn lại vào biểu tượng quả địa cầu để xem bản dịch.\\\n<br/>\\\n<br/><b>Làm cách nào để đánh dấu trang?</b>\\\n<br/>Mở bất kỳ trang Kinh Quran nào. Chạm vào màn hình một lần. Ở trên cùng bên phải, bạn sẽ thấy một\\\nbiểu tượng dấu trang. Nhấn vào biểu tượng dấu trang để đánh dấu trang (màu sẽ chuyển sang màu trắng đặc). Nhấn vào biểu tượng dấu trang\\\nmột lần nữa để xóa dấu trang.\\\n<br/>\\\n<br/><b>Làm cách nào để làm cho văn bản lớn hơn?</b>\\\n<br/>Đối với các trang tiếng Ả Rập, hãy giữ điện thoại của bạn ở chế độ nằm ngang. Điều này làm cho văn bản lớn hơn.\\\nĐối với bản dịch, hãy đi tới cài đặt và tăng cỡ chữ văn bản dịch.\\\n<br/>\\\n<br/><b>Làm cách nào để chia sẻ ayah?</b>\\\n<br/>Khi đang ở bất kỳ trang tiếng Ả Rập nào, hãy nhấn và giữ bất kỳ ayah nào để có menu nơi bạn có thể\\\nchọn đánh dấu, gắn thẻ, chia sẻ hoặc sao chép ayah đó vào khay nhớ tạm, xem bản dịch,\\\nhoặc nghe bản đọc của nó.<br/>\\\n<br/><b>Phông Malayalam/Tamil/Bengali/Urdu không dùng được!</b>\\\n<br/>Rất tiếc, các phiên bản Android trước 4.0 không hỗ trợ các phông chữ này và\\\nchúng tôi không giúp được gì nhiều.\\\n\";\n\"help_title\" = \"(FAQ) Câu hỏi thường gặp\";\n\"highlighting_database\" = \"Tệp cần thiết\";\n\"import_data\" = \"Nhập Data\";\n\"import_data_and_override\" = \"Nếu bạn nhập tệp này, nó sẽ thay thế tất cả đánh dấu của bạn bằng %1$d đánh dấu và %2$d thẻ. Nhập?\";\n\"import_data_error\" = \"Tệp sao lưu không hợp lệ (hoặc không thể đọc tệp sao lưu).\";\n\"import_data_permissions_error\" = \"Không thể đọc tệp sao lưu do lỗi quyền.\";\n\"import_successful\" = \"Nhập thành công\";\n\"juz2_description\" = \"Juz\\' %1$@\";\n\"kitkat_external_message\" = \"Do những hạn chế của Android, nếu bạn chọn đặt dữ liệu Kinh Quran\\\ntrên thẻ nhớ SD ngoài và sau đó gỡ cài đặt hoặc xóa dữ liệu của Kinh Quran Android, tất cả các trang và âm thanh\\\ncủa Kinh Quran Android sẽ bị xóa và bạn sẽ phải tải xuống lại. Bạn có\\\nchắc chắn muốn sử dụng thẻ nhớ SD ngoài?\";\n\"loading\" = \"Đang tải…\";\n\"madani\" = \"Madani\";\n\"madani_description\" = \"Bản kinh Madani cổ điển.\";\n\"madani_title\" = \"Madani Mushaf cổ điển\";\n\"makki\" = \"Makki\";\n\"menu_about\" = \"Về Chúng tôi\";\n\"menu_back_to_page\" = \"Hiện Quran\";\n\"menu_bookmarks\" = \"Đánh dấu\";\n\"menu_bookmarks_ayah\" = \"Dấu Ayah\";\n\"menu_bookmarks_page\" = \"Dấu Trang\";\n\"menu_get_translations\" = \"Tải Bản dịch\";\n\"menu_help\" = \"Trợ giúp\";\n\"menu_jump\" = \"Đến trang\";\n\"menu_jump_last_page\" = \"Trang cuối\";\n\"menu_other_apps\" = \"Ứng dụng khác\";\n\"menu_search\" = \"Tìm kiếm\";\n\"menu_settings\" = \"Cài đặt\";\n\"menu_show_date\" = \"Hiện Ngày\";\n\"menu_sort\" = \"Sắp xếp\";\n\"menu_sort_date\" = \"Ngày Thêm\";\n\"menu_sort_group_by_tags\" = \"Nhóm theo Thẻ\";\n\"menu_sort_location\" = \"Vị trí ở Quran\";\n\"menu_translation\" = \"Hiện Bản dịch\";\n\"more_translations\" = \"Bản dịch khác\";\n\"move_down\" = \"Di Xuống\";\n\"move_up\" = \"Di Lên\";\n\"need_translation\" = \"Bạn chưa tải xuống bản dịch/tafaseer nào.\";\n\"new_tag\" = \"Thẻ Mới\";\n\"next\" = \"Tiếp\";\n\"no_arabic_search_available\" = \"Bạn chưa tải xuống gói tìm kiếm tiếng Ả Rập. Vui lòng tải xuống và thử tìm kiếm lại.\";\n\"no_results\" = \"Không kết quả cho \\\"%@\\\"\";\n\"not_tagged\" = \"Chưa được gắn thẻ\";\n\"notification_channel_audio\" = \"Quran Xướng đọc\";\n\"notification_channel_download\" = \"Quran Tải xuống\";\n\"notification_download_canceled\" = \"Đã hủy tải xuống\";\n\"page_description\" = \"Trang %1$@, Juz\\' %2$@\";\n\"pause\" = \"Nghỉ\";\n\"play\" = \"Phát\";\n\"play_apply\" = \"Áp dụng\";\n\"play_apply_and_play\" = \"Áp dụng và Phát\";\n\"play_each_verse\" = \"Lần phát từng câu:\";\n\"play_from_here\" = \"Phát từ Đây\";\n\"play_restrict_range\" = \"Chỉ phát những câu trên\";\n\"play_verses_range\" = \"Lần phát cả bộ câu:\";\n\"playback_prompt_title\" = \"Bắt đầu phát từ:\";\n\"playback_speed\" = \"Tốc độ phát lại:\";\n\"please_grant_permissions\" = \"Vui lòng cấp quyền trong cài đặt ứng dụng\";\n\"please_wait\" = \"Xin đợi…\";\n\"prefs_app_location_summary\" = \"Chọn nơi lưu trữ các tệp Kinh Quran\";\n\"prefs_app_location_title\" = \"Nơi Kinh Quran lưu dữ liệu\";\n\"prefs_app_size\" = \"Kích cỡ dữ liệu hiện tại là\";\n\"prefs_audio_manager_summary\" = \"Quản lý và tải xuống bản đọc Kinh Quran\";\n\"prefs_ayah_before_translation_summary\" = \"Hiển thị ayah tiếng Ả Rập phía trên bản dịch\";\n\"prefs_ayah_before_translation_title\" = \"Ayah trước bản dịch\";\n\"prefs_calculating_app_size\" = \"Tính Kích thước App\";\n\"prefs_category_advanced\" = \"Tùy chọn Nâng cao\";\n\"prefs_category_advanced_summary\" = \"Nhập/xuất đánh dấu, đặt thư mục dữ liệu Kinh Quran, v.v.\";\n\"prefs_category_display_settings\" = \"Cài đặt Hiển thị\";\n\"prefs_category_download\" = \"Tùy chọn Tải xuống\";\n\"prefs_category_dual_screen\" = \"Tùy chọn Trang Kép\";\n\"prefs_category_reading\" = \"Tùy chọn Đọc\";\n\"prefs_category_translation\" = \"Tùy chọn Bản dịch\";\n\"prefs_copying_app_files\" = \"Sao chép tệp App\";\n\"prefs_display_marker_summary\" = \"Hiển thị hộp thoại khi tới juz\\', hizb, v.v kế tiếp\";\n\"prefs_display_marker_title\" = \"Hiện hộp thoại\";\n\"prefs_download_amount_summary\" = \"Số lượng tải xuống ưu tiên cho âm thanh non-gapless\";\n\"prefs_download_amount_title\" = \"Số lượng tải xuống\";\n\"prefs_dual_page_mode_disabled\" = \"Ở chế độ ngang, chỉ một trang sẽ xuất hiện\";\n\"prefs_dual_page_mode_enabled\" = \"Ở chế độ ngang, hai trang sẽ xuất hiện cạnh nhau\";\n\"prefs_dual_page_mode_title\" = \"Chế độ Trang Kép\";\n\"prefs_err_moving_app_files\" = \"Lỗi di chuyển tệp của app\";\n\"prefs_export_csv_summary\" = \"Xuất bản sao của đánh dấu và thẻ dạng CSV\";\n\"prefs_export_csv_title\" = \"Xuất CSV\";\n\"prefs_export_summary\" = \"Xuất bản sao của đánh dấu và thẻ\";\n\"prefs_export_title\" = \"Xuất\";\n\"prefs_highlight_bookmarks_summary\" = \"Tô sáng ayahs đã được đánh dấu trong khi đọc\";\n\"prefs_highlight_bookmarks_title\" = \"Tô sáng các đánh dấu\";\n\"prefs_import_summary\" = \"Nhập đánh dấu và thẻ\";\n\"prefs_import_title\" = \"Nhập\";\n\"prefs_megabytes_int\" = \"%1$d MB\";\n\"prefs_new_background_title\" = \"Màu nền mới\";\n\"prefs_night_mode_background_brightness_summary\" = \"Độ sáng của trang khi chế độ tối được kích hoạt\";\n\"prefs_night_mode_background_brightness_title\" = \"Độ sáng nền\";\n\"prefs_night_mode_summary\" = \"Dùng nền tối và phông chữ sáng\";\n\"prefs_night_mode_text_brightness_summary\" = \"Độ sáng của chữ khi chế độ tối được kích hoạt\";\n\"prefs_night_mode_text_brightness_title\" = \"Độ sáng của chữ\";\n\"prefs_night_mode_title\" = \"Chế độ Tối\";\n\"prefs_no_enough_space_to_move_files\" = \"Không đủ dung lượng để di chuyển tệp app\";\n\"prefs_overlay_page_info_summary\" = \"Hiện số trang, tên surah và số juz\\' trong khi đọc\";\n\"prefs_overlay_page_info_title\" = \"Hiển thị thông tin trang\";\n\"prefs_page_type_summary\" = \"Chọn loại trang đọc\";\n\"prefs_page_type_title\" = \"Loại Trang (thử nghiệm)\";\n\"prefs_preview\" = \"Xem trước\";\n\"prefs_sdcard_external\" = \"Bộ nhớ ngoài %1$d\";\n\"prefs_sdcard_internal\" = \"Bộ nhớ trong\";\n\"prefs_send_logs_summary\" = \"Gửi debug logs cho lập trình viên\";\n\"prefs_send_logs_title\" = \"Gửi logs\";\n\"prefs_split_page_and_translation_summary\" = \"Ở chế độ trang kép có bản dịch, cả trang Kinh Quran và bản dịch được hiển thị\";\n\"prefs_split_page_and_translation_title\" = \"Kinh Quran và bản dịch ở chế độ kép\";\n\"prefs_streaming_summary\" = \"Phát âm thanh trực tuyến thay vì tải xuống\";\n\"prefs_streaming_title\" = \"Phát trực tuyến\";\n\"prefs_sura_translated_name_summary\" = \"Hiển thị bản dịch tên của các surah\";\n\"prefs_sura_translated_name_title\" = \"Dịch tên Surah\";\n\"prefs_translation_text_title\" = \"Cỡ chữ bản dịch\";\n\"prefs_translations\" = \"Bản dịch\";\n\"prefs_translations_summary\" = \"Tải xuống và quản lý bản dịch\";\n\"prefs_use_arabic_summary_on\" = \"Dùng tiếng Ả Rập cho giao diện ứng dụng\";\n\"prefs_use_arabic_title\" = \"Chế độ Ả Rập (الوضع العربي)\";\n\"prefs_use_dyslexic_font_summary\" = \"Hiển thị bản dịch bằng phông chữ thân thiện với người mắc chứng khó đọc\";\n\"prefs_use_dyslexic_font_title\" = \"Phông chữ cho chứng khó đọc\";\n\"prefs_volume_key_navigation_summary\" = \"Điều hướng giữa các trang bằng phím âm lượng\";\n\"prefs_volume_key_navigation_title\" = \"Điều hướng phím âm lượng\";\n\"previous\" = \"Trước\";\n\"process_progress\" = \"Đang xử lý tập tin %1$d / %2$d\";\n\"qarilist_dismiss\" = \"Bỏ qua\";\n\"qarilist_gapless\" = \"Gapless (Liền mạch)\";\n\"qarilist_gapped\" = \"Gapped (Ngắt quãng)\";\n\"qarilist_qaris_with_downloads\" = \"Qaris với Tải xuống\";\n\"qarilist_ready_to_play\" = \"Có sẵn để Phát\";\n\"qarilist_select_qari\" = \"Chọn một Qari\";\n\"qarilist_selected\" = \"Đã chọn\";\n\"quran_ayah\" = \"Ayah %1$d\";\n\"quran_ayah_details\" = \"%1$@ - Ayah %2$@, Juz\\' %3$@\";\n\"quran_hizb\" = \"Hizb\";\n\"quran_juz2\" = \"Juz\\'\";\n\"quran_nos\" = \"½\";\n\"quran_page\" = \"Trang\";\n\"quran_rob3\" = \"¼\";\n\"quran_sura\" = \"Surahs\";\n\"quran_sura_title\" = \"Surah %1$@\";\n\"quran_talt_arb3\" = \"¾\";\n\"quranSearchType\" = \"Những câu Kinh Quran\";\n\"recent_pages\" = \"Vừa Đọc\";\n\"recite_from_here\" = \"Đọc từ đây\";\n\"remove_button\" = \"Xóa\";\n\"remove_dlg_msg\" = \"Bạn có chắc chắn muốn xóa %1$@?\";\n\"remove_dlg_title\" = \"Xóa Bản dịch?\";\n\"repeatValues[0]\" = \"1 lần\";\n\"repeatValues[1]\" = \"2 lần\";\n\"repeatValues[2]\" = \"3 lần\";\n\"repeatValues[3]\" = \"lặp\";\n\"scoped_storage_message\" = \"Do những thay đổi của Android để tăng quyền riêng tư của người dùng, việc sao chép\\\ncác tệp bên ngoài thư mục của ứng dụng có thể sẽ ngăn Kinh Quran truy cập dữ liệu của nó trong các phiên bản sau\\\ncủa Android. Bạn có chắc chắn muốn sử dụng đường dẫn này không?\";\n\"sdcard_error\" = \"Không tìm thấy thẻ SD. Vui lòng gắn nó và thử lại.\";\n\"search_data\" = \"Dữ liệu Tìm kiếm\";\n\"search_entire_mushaf\" = \"Tìm kiếm cả mushaf\";\n\"search_full_results\" = \"Kết quả đầy đủ\";\n\"search_hint\" = \"Tìm trong Quran\";\n\"search_key\" = \"Ấn nút tìm để tìm một câu kinh\";\n\"see_tafseer_of_verse\" = \"Tafseer của ayah này đã có trong tafseer của ayah %d (Nhấp để mở rộng).\";\n\"share_ayah\" = \"Chia sẻ Link Ayah\";\n\"share_ayah_text\" = \"Chia sẻ văn bản Ayah\";\n\"starting_page_label\" = \"Đầu Trang\";\n\"stop\" = \"Dừng\";\n\"storage_permission_please_restart\" = \"Vui lòng khởi động lại ứng dụng để điều này có hiệu lực.\";\n\"storage_permission_rationale\" = \"Kinh Quran muốn bạn cho phép lưu trữ dữ liệu của nó trên\\\nlưu trữ ngoài. Kinh Quran sẽ vẫn hoạt động mà không cần quyền này, nhưng nếu bạn xóa dữ liệu hoặc\\\ngỡ cài đặt ứng dụng, tất cả các trang, âm thanh và dữ liệu đã tải xuống sẽ bị xóa. Cấp quyền\\\ncho kinh Quran?\";\n\"sura_ayah_notification_str\" = \"Surah %1$@, Ayah %2$d\";\n\"sura_ayah_sharing_str\" = \"Surah %1$@: %2$d\";\n\"tag_ayah\" = \"Gắn thẻ Ayah này\";\n\"tag_blank_tag_error\" = \"Tên thẻ không được để trống!\";\n\"tag_bookmark\" = \"Đánh dấu Thẻ\";\n\"tag_dlg_title\" = \"Thẻ\";\n\"tag_duplicate_tag_error\" = \"Tên thẻ đã tồn tại!\";\n\"tag_name\" = \"Tên\";\n\"timing_database\" = \"Tệp cần thiết\";\n\"to\" = \"Đến\";\n\"translation_ayah\" = \"Bản dịch/Tafseer của Ayah\";\n\"translation_dialog_later\" = \"Để sau\";\n\"translation_dialog_yes\" = \"Có\";\n\"translation_updates_available\" = \"Một bản cập nhật có sẵn cho một số bản dịch của bạn. Truy cập trang bản dịch ngay bây giờ?\";\n\"undo\" = \"Hoàn tác\";\n\"update_available\" = \"Có cập nhật mới\";\n\"warning\" = \"Cảnh báo\";\n"
  },
  {
    "path": "Core/Localization/Resources/vi.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>audio_manager_delete_surah_error</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_delete_surah_error@</string>\n            <key>audio_manager_delete_surah_error</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Đã xảy ra lỗi khi xóa surah</string>\n                <key>other</key>\n                <string>Đã xảy ra lỗi khi xóa %1$d surahs</string>\n            </dict>\n        </dict>\n        <key>audio_manager_delete_surah_success</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_delete_surah_success@</string>\n            <key>audio_manager_delete_surah_success</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Xóa surah thành công</string>\n                <key>other</key>\n                <string>Xóa %1$d surahs thành công</string>\n            </dict>\n        </dict>\n        <key>audio_manager_files_downloaded</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@audio_manager_files_downloaded@</string>\n            <key>audio_manager_files_downloaded</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>1 surah đã tải</string>\n                <key>other</key>\n                <string>%1$d surahs đã tải</string>\n            </dict>\n        </dict>\n        <key>bookmark_tag_deleted</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@bookmark_tag_deleted@</string>\n            <key>bookmark_tag_deleted</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Đã xóa một mục</string>\n                <key>other</key>\n                <string>Đã xóa %d mục</string>\n            </dict>\n        </dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Một kết quả cho \\&quot;%1$d\\&quot;:</string>\n                <key>other</key>\n                <string>%2$d kết quả cho \\&quot;%1$d\\&quot;:</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>one</key>\n                <string>Một câu</string>\n                <key>other</key>\n                <string>%d câu</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/vi.lproj/Localizable.strings",
    "content": "/*\n  Author: https://github.com/techyescountry\n */\n\n\n// MARK: - General\n\n\"button.done\" = \"Xong\";\n\"button.delete\" = \"Xóa\";\n\n// MARK: - Errors\n\n// Metadata: Translated by ChatGPT; human review required.\n\"error.dialog.title\" = \"Lỗi\";\n\"error.message.connection_lost\" = \"Mất kết nối mạng. Di chuyển đến nới có kết nối ổn định hơn hoặc đợi cho đến khi kết nối ổn định trở lại.\";\n\"error.message.international_roaming_off\" = \"Chuyển vùng quốc tế không được phép. Thay đổi cài đặt chuyển vùng quốc tế hoặc bật Wi-Fi.\";\n\"error.message.not_connected_to_internet\" = \"Không được kết nối với internet. Bật Wi-Fi hoặc cho phép kết nối dữ liệu di động.\";\n\"error.message.general\" = \"Ối! Đã xảy ra sự cố. Vui lòng thử lại.\";\n\"error.message.no_disk_space\" = \"Không đủ dung lượng trống để lưu các bản tải xuống.\";\n\n// MARK: - Quran\n\n\"ayah\" = \"Ayah\";\n\"surah\" = \"Surah\";\n// Metadata: Translated by AI; human review required.\n\"quran_alquran\" = \"Kinh Quran\";\n\n// MARK: - Translation\n\n\"translation.text-type.translation\" = \"Bản dịch\";\n\"translation.text-type.transliteration\" = \"Phiên âm\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.selectedTranslations\" = \"Đã chọn\";\n\"translation.translator\" = \"Dịch giả: \";\n\"translation.text.see-referenced-verse\" = \"Xem ayah %d.\";\n\"translation.text.read-more\" = \"Xem thêm\";\n\"error.translation.text-retrieval\" = \"Ối! Đã xảy ra sự cố. Chúng tôi không thể truy xuất bản dịch.\";\n\"error.translation.text-not-available\" = \"Không có bản dịch nào cho Ayah này.\";\n\n// MARK: - Search\n\n\"search.recents.title\" = \"Tìm kiếm gần đây\";\n\"search.popular.title\" = \"Thử tìm kiếm với\";\n\"search.placeholder.text\" = \"Surah, câu kinh, bản dịch, tafseer và số\";\n\"search.result.count\" = \"%@ (%d)\";\n\n// MARK: - Settings\n\n\"setting.write_review\" = \"Đánh giá ứng dụng trên Appstore...\";\n\"setting.contact_us\" = \"Liên hệ\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.donate\" = \"Quyên góp\";\n\"setting.share_app\" = \"Chia sẻ ứng dụng...\";\n\"setting.app_version\" = \"Phiên bản ứng dụng\";\n\n// MARK: - Quran Menu\n\n\"menu.arabic\" = \"Ả Rập\";\n\"menu.translation\" = \"Bản dịch/Tafseer\";\n\"menu.select_translation\" = \"Chọn bản dịch/tafseer\";\n\"menu.pointer\" = \"Con trỏ dịch từ\";\n\"menu.pointer.select_translation\" = \"Hiển thị con trỏ\";\n\"menu.fontSizeLetter\" = \"A\";\n\"menu.translationFontSize\" = \"Cỡ chữ Bản dịch\";\n\"menu.arabicFontSize\" = \"Cỡ chữ Quran\";\n\"menu.twoPages\" = \"2 trang cạnh nhau (xoay ngang)\";\n\"menu.verticalScrolling\" = \"Cuộn dọc\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.theme_settings\" = \"Chủ đề & Cài đặt\";\n\n// MARK: - Theme\n\n\"theme.light\" = \"Sáng\";\n\"theme.dark\" = \"Tối\";\n\"theme.auto\" = \"Tự động\";\n\"theme.auto.message\" = \"Ứng dụng Kinh Quran sẽ tự theo cài đặt giao diện trên iPhone của bạn\";\n\n// MARK: - Tabs\n\n\"tab.notes\" = \"Ghi chú\";\n\n// MARK: - Update\n\n\"update.filesystem.title\" = \"Nâng cấp cơ sở dữ liệu...\";\n\"downloading_title\" = \"Đang tải xuống…\";\n\n// MARK: - Reciters\n\n\"reciters.title\" = \"Chọn người xướng đọc để nghe\";\n\"reciters.recent\" = \"Gần đây\";\n\"reciters.downloaded\" = \"Đã tải\";\n\"reciters.all\" = \"Tất cả\";\n\n// MARK: - Audio\n\n\"audio.playing.action.modify\" = \"Sửa\";\n\"audio.playing.message\" = \"Phát âm thanh từ %@ đến %@\";\n\"audio.downloading.message\" = \"Đang tải âm thanh từ %@ đến %@\";\n\n\"audio.playing-verses.label\" = \"Câu đang Phát\";\n\"audio.adjust-end-verse-to-the-end.label\" = \"Điều chỉnh câu cuối thành kết thúc của\";\n\n\"audio.select-start-verse\" = \"Chọn Câu Đầu\";\n\"audio.select-end-verse\" = \"Chọn Câu Cuối\";\n\n\"audio.download-play-amount\" = \"Tải xuống/Phát đến\";\n\"audio.download-play-amount.description\" = \"Khi phát âm thanh, nó sẽ phát đến cuối của\";\n\n// MARK: - Bookmarks\n\n\"bookmarks.no-data.title\" = \"Thêm Đánh dấu...\";\n\"bookmarks.no-data.text\" = \"Khi bạn đang đọc Kinh Quran, hãy nhấn vào nút Đánh dấu trang để đánh dấu trang hiện tại.\";\n\n// MARK: - Notes\n\n\"notes.no-data.title\" = \"Thêm Tô sáng Ayah...\";\n\"notes.no-data.text\" = \"Chạm và giữ vào một Ayah. Bạn có thể mở rộng lựa chọn để bao gồm nhiều Ayat, sau đó chạm vào nút Đánh dấu.\";\n\"notes.verses-count\" = \"(+%d ayat)\";\n\"notes.delete.alert.title\" = \"Xóa Tô sáng\";\n\"notes.delete.alert.body\" = \"Ghi chú liên quan cũng sẽ bị xóa.\";\n\"notes.icloud.alert.title\" = \"Đồng bộ iCloud\";\n\"notes.icloud.alert.body\" = \"Ứng dụng sử dụng iCloud để đồng bộ hóa dấu trang và ghi chú trên các thiết bị của bạn. Bạn có thể tắt nó từ cài đặt iCloud của thiết bị.\";\n\n// MARK: - Ayah Menu\n\n\"ayah.menu.copy\" = \"Sao chép\";\n\"ayah.menu.share\" = \"Chia sẻ...\";\n\"ayah.menu.play-end-juz\" = \"đến cuối Juz'\";\n\"ayah.menu.play-end-surah\" = \"đến cuối Surah\";\n\"ayah.menu.play-end-page\" = \"đến cuối Trang\";\n// Metadata: Translated by AI; human review required.\n\"ayah.menu.play-end-quran\" = \"đến cuối Kinh Quran\";\n\"ayah.menu.repeat\" = \"Lặp lại\";\n\"ayah.menu.selected-verse\" = \"câu đã chọn\";\n\"ayah.menu.selected-verses\" = \"bộ câu đã chọn\";\n\"ayah.menu.highlight\" = \"Tô sáng\";\n\"ayah.menu.highlight-select-color\" = \"chọn màu\";\n\"ayah.menu.add-note\" = \"Thêm Ghi chú\";\n\"ayah.menu.edit-note\" = \"Sửa Ghi chú\";\n\"ayah.menu.delete-note\" = \"Xóa Ghi chú\";\n\"ayah.menu.delete-highlight\" = \"Xóa Tô sáng\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n\"reading.selector.selectMushaf.short\" = \"Chọn\";\n\"reading.selector.selectMushaf.long\" = \"Đặt làm Mushaf hiện tại\";\n\"reading.selector.title\" = \"Chọn Mushaf\";\n\"reading.selector.selection-description\" = \"Chạm vào Mushaf để biết thêm thông tin.\";\n\"reading.selector.property.hafs\" = \"Hafs Mushaf\";\n\"reading.selector.property.pages.604\" = \"604 trang\";\n\"reading.selector.property.lines.15\" = \"15-dòng mỗi trang\";\n\"reading.selector.property.word-translation.supported\" = \"Dịch Từng Từ\";\n\"reading.selector.property.word-translation.not-supported\" = \"Không có Dịch Từng Từ\";\n\n// Hafs 1405\n\"reading.hafs-1405.title\" = \"Hafs, Madina cổ điển, 1405 AH\";\n\"reading.hafs-1405.description\" = \"Hafs cổ điển Mushaf ban hành ở Medina vào năm 1405 Hijri. Ứng dụng đã từng cung cấp phiên bản này trong một thời gian dài.\\nTừ Tổ hợp In ấn Kinh Quran của Vua Fahd.\";\n\"reading.hafs-1405.issue\" = \"Ban hành năm 1405 Hijri\";\n\n// Hafs 1421\n\"reading.hafs-1421.title\" = \"Hafs, Medina, 1421 AH\";\n\"reading.hafs-1421.description\" = \"Hafs Mushaf ban hành ở Medina vào năm 1421 Hijri. Từ Tổ hợp in Kinh Quran King Fahd.\";\n\"reading.hafs-1421.issue\" = \"Ban hành năm 1421 Hijri\";\n\n// Hafs 1440\n\"reading.hafs-1440.title\" = \"Hafs, Medina, 1440 AH\";\n\"reading.hafs-1440.description\" = \"Hafs Mushaf ban hành ở Medina vào năm 1440 Hijri. Từ Tổ hợp in Kinh Quran King Fahd.\";\n\"reading.hafs-1440.issue\" = \"Ban hành năm 1440 Hijri\";\n\n// Hafs Tajweed\n\"reading.tajweed.title\" = \"Hafs, Tajweed\";\n\"reading.tajweed.description\" = \"Tajweed hafs Mushaf. Al-Quran Al-Kareem - Phiên bản Dar al-Marefa.\";\n\n// MARK: - Diagnostics\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.title\" = \"Chuẩn đoán\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.details\" = \"Các cài đặt này được nhà phát triển ứng dụng sử dụng cụ thể cho mục đích gỡ lỗi và chẩn đoán.\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.share_app_logs\" = \"Chia sẻ nhật ký ứng dụng\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs\" = \"Kích hoạt ghi nhật ký gỡ lỗi\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs.details\" = \"Cài đặt này sẽ có hiệu lực khi ứng dụng được khởi động lại lần tiếp theo.\";\n\n\n// MARK: - What's new\n\n\"new.title\" = \"Có gì mới\";\n\"new.action\" = \"Tiếp\";\n\n// Mushafs\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs\" = \"Mushaf Mới:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs.details\" = \"* Tajweed Hafs Mushaf: Al-Quran Al-Kareem - Ấn bản Dar al-Marefa.\\n* Mushaf Madina 1421 hijri.\\n* Mushaf Madina 1440 hijri.\\n* Ngoài ra, tiếp tục thưởng thức phiên bản cổ điển 1405 hijri.\";\n\n// Reciters\n\"new.reciters\" = \"Người đọc Mới\";\n\n// Miscellaneous\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous\" = \"Đa dạng:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous.details\" = \"* Cập nhật giao diện ứng dụng.\\n* Cải tiến tính năng tìm kiếm (thuật toán mới sắp ra mắt).\\n* Hỗ trợ đa ngôn ngữ tiếng Việt.\\n* Truy cập tùy chọn âm thanh nâng cao khi không có bản đọc nào đang phát.\\n* Ứng dụng hiện đã là mã nguồn mở: https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades\" = \"Âm thanh:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades.details\" = \"* Điều chỉnh tốc độ đọc: 0.5x, 0.75x, 1x, 1.25x, 1.5x - nhờ @adnan29979.\\n* Phát lại ghi nhớ tốc độ ưa thích của bạn - nhờ @adnan29979.\";\n\n// Personalization\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization\" = \"Chủ đề đọc:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization.details\" = \"* Hỗ trợ nhiều chủ đề. Mở một trang Quran -> Menu góc trên bên phải -> Chủ đề & Cài đặt.\\n* Dùng 'Original' nếu bạn muốn quay lại phong cách trước.\";\n\n// Library & Navigation\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation\" = \"Thư viện & Điều hướng:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation.details\" = \"* Sắp xếp surah và juz trên Trang chủ và hiển thị số surah để bạn đến nội dung cần nhanh hơn - nhờ @yismailuofa.\";\n"
  },
  {
    "path": "Core/Localization/Resources/vi.lproj/Readers.strings",
    "content": "\"qari_abdulaziz_zahrani_gapless\" = \"Abdulaziz Az-Zahrani\";\n\"qari_abdulbaset\" = \"Abd Al-Basit (gapped)\";\n\"qari_abdulbaset_gapless\" = \"Abd Al-Basit\";\n\"qari_abdulbaset_mujawwad\" = \"Abd Al-Basit Mujawwad (gapped)\";\n\"qari_abdulbaset_mujawwad_gapless\" = \"Abd Al-Basit Mujawwad\";\n\"qari_abdulhadi_kanakeri_gapless\" = \"AbdulHadi Kanakeri\";\n\"qari_abdullah_matroud_gapless\" = \"Abdullah Matroud\";\n\"qari_abdulmuhsin_qasim_gapless\" = \"AbdulMuhsin al Qasim\";\n\"qari_abdulrahman_alshahat_gapless\" = \"Abdulrahman Al-Shahat\";\n\"qari_abdurrashid_sufi_gapless\" = \"Abdur-Rashid Sufi\";\n\"qari_afasy\" = \"Mishary Al-Afasy (gapped)\";\n\"qari_afasy_cali_gapless\" = \"Mishari Al-Afasy (California)\";\n\"qari_afasy_gapless\" = \"Mishary Al-Afasy\";\n\"qari_ahmad_nauina_gapless\" = \"Ahmad Nauina\";\n\"qari_ahmed_al_nufais_gapless\" = \"Ahmed Al-Nufais\";\n\"qari_ajamy_gapless\" = \"Ahmed ibn Ali al-Ajamy\";\n\"qari_akram_al_alaqmi\" = \"Akram Al-Alaqmi\";\n\"qari_ali_hajjaj_alsouasi_gapless\" = \"Ali Hajjaj Alsouasi\";\n\"qari_ali_jaber_gapless\" = \"Ali Jaber\";\n\"qari_alijon_qari_gapless\" = \"Alijon Qari\";\n\"qari_aloosi_gapless\" = \"Abdulrahman Aloosi\";\n\"qari_alzain_ahmad_gapless\" = \"Alzain Mohammad Ahmad\";\n\"qari_ayman_suwaid_gapless\" = \"Dr. Ayman Suwaid\";\n\"qari_ayman_suwaid_gapped\" = \"Dr. Ayman Suwaid (gapped)\";\n\"qari_ayyoub\" = \"Muhammad Ayyoub (gapped)\";\n\"qari_ayyoub_gapless\" = \"Muhammad Ayyoub\";\n\"qari_aziz_alili_gapless\" = \"Aziz Alili\";\n\"qari_badr_al_turki_gapless\" = \"Badr Al-Turki\";\n\"qari_bandar_baleela_gapless\" = \"Bandar Baleela\";\n\"qari_basfar\" = \"Abdullah Basfar (gapped)\";\n\"qari_basfar_gapless\" = \"Abdullah Basfar\";\n\"qari_dussary\" = \"Yasser Ad-Dussary (gapped)\";\n\"qari_fares_abbad_gapless\" = \"Fares Abbad\";\n\"qari_farman_shawani_gapless\" = \"Farman Shawani\";\n\"qari_hady_toure_gapless\" = \"Hady Toure\";\n\"qari_hani_rifai\" = \"Hani Ar-Rifai (gapped)\";\n\"qari_hani_rifai_gapless\" = \"Hani Ar-Rifai\";\n\"qari_hudhayfi\" = \"Ali Al-Hudhaify (gapped)\";\n\"qari_hudhayfi_gapless\" = \"Ali Al-Hudhaify\";\n\"qari_husary_gapless\" = \"Husary\";\n\"qari_husary_iza3a_gapless\" = \"Husary Broadcast\";\n\"qari_husary_muallim_gapless\" = \"Husary (Muallim)\";\n\"qari_husary_mujawwad\" = \"Husary Mujawwad (gapped)\";\n\"qari_husary_mujawwad_gapless\" = \"Husary (Mujawwad)\";\n\"qari_ibrahim_alakhdar_gapless\" = \"Ibrahim Al-Akhdar\";\n\"qari_idrees_abkar_gapless\" = \"Idrees Abkar\";\n\"qari_jibreel\" = \"Muhammad Jibreel (gapped)\";\n\"qari_jibreel_gapless\" = \"Muhammad Jibreel\";\n\"qari_juhany_gapless\" = \"Abdullah al Juhany\";\n\"qari_khaled_muhanna_gapless\" = \"Khaled Al-Muhanna (gapped)\";\n\"qari_khalid_jalil_gapless\" = \"Khalid Al-Jalil\";\n\"qari_khalid_qahtani_gapless\" = \"Khalid Al-Qahtani\";\n\"qari_khalifa_taniji_gapless\" = \"Khalifa Taniji\";\n\"qari_luhaidan_gapless\" = \"Muhammad Al-Luhaidan\";\n\"qari_mahmoud_ali_albana_gapless\" = \"Mahmoud Ali al Bana\";\n\"qari_minshawi_mujawwad\" = \"Minshawy Mujawwad (gapped)\";\n\"qari_minshawi_mujawwad_gapless\" = \"Minshawy Mujawwad\";\n\"qari_minshawi_murattal_gapless\" = \"Minshawi Murattal\";\n\"qari_mishari_walk_gapless\" = \"Mishari và Ibrahim Walk (tiếng Anh)\";\n\"qari_mohammad_altablawi_gapless\" = \"Mohammad al Tablawy\";\n\"qari_mokhtasar_asmari_gapless\" = \"Abdullah Al-Asmari (Bình luận t. Ả Rập)\";\n\"qari_mostafa_ismaeel_gapless\" = \"Mostafa Ismaeel\";\n\"qari_muaiqly\" = \"Maher Al Muaiqly (gapped)\";\n\"qari_muaiqly_gapless\" = \"Maher Al Muaiqly\";\n\"qari_muaiqly_haramain_gapless\" = \"Maher Al Muaiqly (Haramain)\";\n\"qari_muhammad_rashad_shereef_gapless\" = \"Muhammad Rashad Al-Shereef\";\n\"qari_nabil_rifa3i_gapless\" = \"Nabil Ar-Rifai\";\n\"qari_noreen_siddiq_gapless\" = \"Noreen Siddiq\";\n\"qari_peshawa_qadir_al_qurdi_gapless\" = \"Peshewa Qadir al-Kurdi\";\n\"qari_qatami_gapless\" = \"Nasser Al Qatami\";\n\"qari_raad_al_kurdi_gapless\" = \"Raad Al-Kurdi\";\n\"qari_saad_al_ghamdi\" = \"Saad Al-Ghamdi (gapped)\";\n\"qari_saad_al_ghamidi_gapless\" = \"Saad Al-Ghamdi\";\n\"qari_sahl_yaseen_gapless\" = \"Sahl Yaseen\";\n\"qari_salah_budair_gapless\" = \"Salah Budair\";\n\"qari_salah_bukhatir_gapless\" = \"Salah Bukhatir\";\n\"qari_shatri\" = \"Abu Bakr Ash-Shatri (gapped)\";\n\"qari_shatri_gapless\" = \"Abu Bakr Ash-Shatri\";\n\"qari_shuraym\" = \"Saood Ash-Shuraym (gapped)\";\n\"qari_shuraym_gapless\" = \"Saood Ash-Shuraym\";\n\"qari_suadis\" = \"Abdurrahmaan As-Sudais (gapped)\";\n\"qari_sudais_gapless\" = \"Abdurrahman As-Sudais\";\n\"qari_tablawy\" = \"Mohammad al Tablaway (gapped)\";\n\"qari_tawfeeq_as_sawaigh_gapless\" = \"Tawfeeq as-Sawaigh\";\n\"qari_wadee3_alyamani_gapless\" = \"Wadee\\' Al-Yamani\";\n\"qari_walk\" = \"Ibrahim Walk (tiếng Anh)\";\n\"qari_walk_gapless\" = \"Ibrahim Walk (tiếng Anh)\";\n\"qari_yasser_dussary_gapless\" = \"Yasser Ad-Dussary\";\n\"qari_yasser_salama_hadr_gapless\" = \"Yasser Salama (hadr)\";\n"
  },
  {
    "path": "Core/Localization/Resources/vi.lproj/Suras.strings",
    "content": "\"sura_names_translation[0]\" = \"Khai Đề\";\n\"sura_names_translation[1]\" = \"Con Bò Cái\";\n\"sura_names_translation[2]\" = \"Gia Đình Imran\";\n\"sura_names_translation[3]\" = \"Người Phụ Nữ\";\n\"sura_names_translation[4]\" = \"Bàn Thức Ăn\";\n\"sura_names_translation[5]\" = \"Súc Vật\";\n\"sura_names_translation[6]\" = \"Các Gò Cao\";\n\"sura_names_translation[7]\" = \"Chiến Lợi Phẩm\";\n\"sura_names_translation[8]\" = \"Sám Hối\";\n\"sura_names_translation[9]\" = \"Nabi Jonah (Giô-na)\";\n\"sura_names_translation[10]\" = \"Nabi Hūd\";\n\"sura_names_translation[11]\" = \"Nabi Joseph (Giô-sép)\";\n\"sura_names_translation[12]\" = \"Sấm Sét\";\n\"sura_names_translation[13]\" = \"Nabi Abraham (Áp-ra-ham)\";\n\"sura_names_translation[14]\" = \"Vùng Núi Hijr\";\n\"sura_names_translation[15]\" = \"Con Ong\";\n\"sura_names_translation[16]\" = \"Đi Trong Đêm\";\n\"sura_names_translation[17]\" = \"Cái Hang\";\n\"sura_names_translation[18]\" = \"Maryam (Maria)\";\n\"sura_names_translation[19]\" = \"Ta-Ha\";\n\"sura_names_translation[20]\" = \"Các Vị Nabi\";\n\"sura_names_translation[21]\" = \"Hành Hương Hajj\";\n\"sura_names_translation[22]\" = \"Người Có Đức Tin\";\n\"sura_names_translation[23]\" = \"Ánh Sáng\";\n\"sura_names_translation[24]\" = \"Tiêu Chuẩn Phân Biệt\";\n\"sura_names_translation[25]\" = \"Các Thi Sĩ\";\n\"sura_names_translation[26]\" = \"Con Kiến\";\n\"sura_names_translation[27]\" = \"Những Câu Chuyện\";\n\"sura_names_translation[28]\" = \"Con Nhện\";\n\"sura_names_translation[29]\" = \"La Mã\";\n\"sura_names_translation[30]\" = \"Hiền Nhân Luqmān\";\n\"sura_names_translation[31]\" = \"Phủ Phục\";\n\"sura_names_translation[32]\" = \"Liên Quân\";\n\"sura_names_translation[33]\" = \"Vương Quốc Sheba\";\n\"sura_names_translation[34]\" = \"Đấng Tạo Hoá\";\n\"sura_names_translation[35]\" = \"Ya Sin\";\n\"sura_names_translation[36]\" = \"Những Thiên Thần Đứng Thẳng Hàng\";\n\"sura_names_translation[37]\" = \"Chữ \\\"Sad\\\"\";\n\"sura_names_translation[38]\" = \"Những Nhóm Người\";\n\"sura_names_translation[39]\" = \"Đấng Tha Thứ\";\n\"sura_names_translation[40]\" = \"Được Giải Thích Chi Tiết\";\n\"sura_names_translation[41]\" = \"Tham Khảo\";\n\"sura_names_translation[42]\" = \"Đồ Trang Trí Bằng Vàng\";\n\"sura_names_translation[43]\" = \"Khói Mờ\";\n\"sura_names_translation[44]\" = \"Quì Gối\";\n\"sura_names_translation[45]\" = \"Cồn Cát\";\n\"sura_names_translation[46]\" = \"Thiên Sứ Muhammad\";\n\"sura_names_translation[47]\" = \"Thắng Lợi\";\n\"sura_names_translation[48]\" = \"Nội Phòng\";\n\"sura_names_translation[49]\" = \"Chữ \\\"Qaf\\\"\";\n\"sura_names_translation[50]\" = \"Những Cơn Gió Thổi Bụi\";\n\"sura_names_translation[51]\" = \"Núi Tur\";\n\"sura_names_translation[52]\" = \"Tinh Tú\";\n\"sura_names_translation[53]\" = \"Mặt Trăng\";\n\"sura_names_translation[54]\" = \"Đấng Độ Lượng\";\n\"sura_names_translation[55]\" = \"Biến Cố Giờ Tận Thế\";\n\"sura_names_translation[56]\" = \"Sắt\";\n\"sura_names_translation[57]\" = \"Người Phụ Nữ Khiếu Nại\";\n\"sura_names_translation[58]\" = \"Cuộc Tập Họp\";\n\"sura_names_translation[59]\" = \"Cô Ấy Cần Được Kiểm Tra\";\n\"sura_names_translation[60]\" = \"Hàng Ngũ\";\n\"sura_names_translation[61]\" = \"Thứ Sáu\";\n\"sura_names_translation[62]\" = \"Kẻ Đạo Đức Giả\";\n\"sura_names_translation[63]\" = \"Người Thắng Kẻ Thua\";\n\"sura_names_translation[64]\" = \"Ly Dị\";\n\"sura_names_translation[65]\" = \"Cấm Đoán\";\n\"sura_names_translation[66]\" = \"Quyền Thống Trị\";\n\"sura_names_translation[67]\" = \"Cây Viết\";\n\"sura_names_translation[68]\" = \"Sự Thật\";\n\"sura_names_translation[69]\" = \"Đường Lên Trời\";\n\"sura_names_translation[70]\" = \"Nabi Noah (Nô-ê)\";\n\"sura_names_translation[71]\" = \"Loài Jinn\";\n\"sura_names_translation[72]\" = \"Người Cuộn Mình Trong Chiếc Áo\";\n\"sura_names_translation[73]\" = \"Người Phủ Áo Choàng Lên Mình\";\n\"sura_names_translation[74]\" = \"Ngày Phục Sinh\";\n\"sura_names_translation[75]\" = \"Loài Người\";\n\"sura_names_translation[76]\" = \"Các Luồng Gió Liên Tục\";\n\"sura_names_translation[77]\" = \"Các Nguồn Tin\";\n\"sura_names_translation[78]\" = \"Giật Mạnh\";\n\"sura_names_translation[79]\" = \"Y Cau Mày\";\n\"sura_names_translation[80]\" = \"Sự Cuốn Xếp\";\n\"sura_names_translation[81]\" = \"Phân Tách\";\n\"sura_names_translation[82]\" = \"Những Kẻ Giân Lận\";\n\"sura_names_translation[83]\" = \"Vỡ Nứt\";\n\"sura_names_translation[84]\" = \"Chòm Sao “Burūj”\";\n\"sura_names_translation[85]\" = \"Sao Mai\";\n\"sura_names_translation[86]\" = \"Đấng Tối Cao\";\n\"sura_names_translation[87]\" = \"Biến Cố Trần Ngập\";\n\"sura_names_translation[88]\" = \"Rạng Đông\";\n\"sura_names_translation[89]\" = \"Vùng Đất Al-Haram\";\n\"sura_names_translation[90]\" = \"Mặt Trời\";\n\"sura_names_translation[91]\" = \"Ban Đêm\";\n\"sura_names_translation[92]\" = \"Giờ Dhuha\";\n\"sura_names_translation[93]\" = \"Mở Rộng\";\n\"sura_names_translation[94]\" = \"Cây Sung\";\n\"sura_names_translation[95]\" = \"Cục Máu\";\n\"sura_names_translation[96]\" = \"Đêm Định Mệnh\";\n\"sura_names_translation[97]\" = \"Bằng Chứng Rõ Ràng\";\n\"sura_names_translation[98]\" = \"Động Đất\";\n\"sura_names_translation[99]\" = \"Những Con Chiến Mã\";\n\"sura_names_translation[100]\" = \"Giờ Kinh Hoàng\";\n\"sura_names_translation[101]\" = \"Tranh Tiền Của Và Con Cái\";\n\"sura_names_translation[102]\" = \"Thời Gian\";\n\"sura_names_translation[103]\" = \"Kẻ Vu Khống\";\n\"sura_names_translation[104]\" = \"Con Voi\";\n\"sura_names_translation[105]\" = \"Bộ Tộc Quraish\";\n\"sura_names_translation[106]\" = \"Vật Dụng Cần Thiết\";\n\"sura_names_translation[107]\" = \"Sông Kawthar\";\n\"sura_names_translation[108]\" = \"Kẻ Vô Đức Tin\";\n\"sura_names_translation[109]\" = \"Phù Trợ\";\n\"sura_names_translation[110]\" = \"Sợi Dây Được Xe Từ Xơ\";\n\"sura_names_translation[111]\" = \"Thành Tâm\";\n\"sura_names_translation[112]\" = \"Bình Minh\";\n\"sura_names_translation[113]\" = \"Nhân Loại\";\n\"sura_names[0]\" = \"Al-Fātihah\";\n\"sura_names[1]\" = \"Al-Baqarah\";\n\"sura_names[2]\" = \"Āli-ʿImrān\";\n\"sura_names[3]\" = \"An-Nisāʾ\";\n\"sura_names[4]\" = \"Al-Māʾidah\";\n\"sura_names[5]\" = \"Al-Anʿām\";\n\"sura_names[6]\" = \"Al-Aʿrāf\";\n\"sura_names[7]\" = \"Al-Anfāl\";\n\"sura_names[8]\" = \"At-Tawbah\";\n\"sura_names[9]\" = \"Yūnus\";\n\"sura_names[10]\" = \"Hūd\";\n\"sura_names[11]\" = \"Yūsuf\";\n\"sura_names[12]\" = \"Ar-Raʿd\";\n\"sura_names[13]\" = \"Ibrāhīm\";\n\"sura_names[14]\" = \"Al-Ḥijr\";\n\"sura_names[15]\" = \"An-Naḥl\";\n\"sura_names[16]\" = \"Al-Isrāʾ\";\n\"sura_names[17]\" = \"Al-Kahf\";\n\"sura_names[18]\" = \"Maryam\";\n\"sura_names[19]\" = \"Ṭā-Hā\";\n\"sura_names[20]\" = \"Al-Anbiyāʾ\";\n\"sura_names[21]\" = \"Al-Ḥajj\";\n\"sura_names[22]\" = \"Al-Muʾminūn\";\n\"sura_names[23]\" = \"An-Nūr\";\n\"sura_names[24]\" = \"Al-Furqān\";\n\"sura_names[25]\" = \"Ash-Shuʿarāʾ\";\n\"sura_names[26]\" = \"An-Naml\";\n\"sura_names[27]\" = \"Al-Qaṣaṣ\";\n\"sura_names[28]\" = \"Al-ʿAnkabūt\";\n\"sura_names[29]\" = \"Ar-Rūm\";\n\"sura_names[30]\" = \"Luqmān\";\n\"sura_names[31]\" = \"As-Sajdah\";\n\"sura_names[32]\" = \"Al-Aḥzāb\";\n\"sura_names[33]\" = \"Sabaʾ\";\n\"sura_names[34]\" = \"Fāṭir\";\n\"sura_names[35]\" = \"Yā-Sīn\";\n\"sura_names[36]\" = \"Aṣ-Ṣāffāt\";\n\"sura_names[37]\" = \"Ṣād\";\n\"sura_names[38]\" = \"Az-Zumar\";\n\"sura_names[39]\" = \"Ghāfir\";\n\"sura_names[40]\" = \"Fuṣṣilat\";\n\"sura_names[41]\" = \"Ash-Shūrā\";\n\"sura_names[42]\" = \"Az-Zukhruf\";\n\"sura_names[43]\" = \"Ad-Dukhān\";\n\"sura_names[44]\" = \"Al-Jāthiyah\";\n\"sura_names[45]\" = \"Al-Aḥqāf\";\n\"sura_names[46]\" = \"Muḥammad\";\n\"sura_names[47]\" = \"Al-Fatḥ\";\n\"sura_names[48]\" = \"Al-Ḥujurāt\";\n\"sura_names[49]\" = \"Qāf\";\n\"sura_names[50]\" = \"Adh-Dhāriyāt\";\n\"sura_names[51]\" = \"Aṭ-Ṭūr\";\n\"sura_names[52]\" = \"An-Najm\";\n\"sura_names[53]\" = \"Al-Qamar\";\n\"sura_names[54]\" = \"Ar-Raḥmān\";\n\"sura_names[55]\" = \"Al-Wāqiʿah\";\n\"sura_names[56]\" = \"Al-Ḥadīd\";\n\"sura_names[57]\" = \"Al-Mujādilah\";\n\"sura_names[58]\" = \"Al-Ḥashr\";\n\"sura_names[59]\" = \"Al-Mumtaḥanah\";\n\"sura_names[60]\" = \"Aṣ-Ṣaff\";\n\"sura_names[61]\" = \"Al-Jumuʿah\";\n\"sura_names[62]\" = \"Al-Munāfiqūn\";\n\"sura_names[63]\" = \"At-Taghābun\";\n\"sura_names[64]\" = \"Aṭ-Ṭalāq\";\n\"sura_names[65]\" = \"At-Taḥrīm\";\n\"sura_names[66]\" = \"Al-Mulk\";\n\"sura_names[67]\" = \"Al-Qalam\";\n\"sura_names[68]\" = \"Al-Ḥāqqah\";\n\"sura_names[69]\" = \"Al-Maʿārij\";\n\"sura_names[70]\" = \"Nūḥ\";\n\"sura_names[71]\" = \"Al-Jinn\";\n\"sura_names[72]\" = \"Al-Muzzammil\";\n\"sura_names[73]\" = \"Al-Muddaththir\";\n\"sura_names[74]\" = \"Al-Qiyāmah\";\n\"sura_names[75]\" = \"Al-Insān\";\n\"sura_names[76]\" = \"Al-Mursalāt\";\n\"sura_names[77]\" = \"An-Nabaʾ\";\n\"sura_names[78]\" = \"An-Nāziʿāt\";\n\"sura_names[79]\" = \"ʿAbasa\";\n\"sura_names[80]\" = \"At-Takwīr\";\n\"sura_names[81]\" = \"Al-Infiṭār\";\n\"sura_names[82]\" = \"Al-Muṭaffifīn\";\n\"sura_names[83]\" = \"Al-Inshiqāq\";\n\"sura_names[84]\" = \"Al-Burūj\";\n\"sura_names[85]\" = \"Aṭ-Ṭāriq\";\n\"sura_names[86]\" = \"Al-Aʿlā\";\n\"sura_names[87]\" = \"Al-Ghāshiyah\";\n\"sura_names[88]\" = \"Al-Fajr\";\n\"sura_names[89]\" = \"Al-Balad\";\n\"sura_names[90]\" = \"Ash-Shams\";\n\"sura_names[91]\" = \"Al-Layl\";\n\"sura_names[92]\" = \"Aḍ-Ḍuḥā\";\n\"sura_names[93]\" = \"Ash-Sharḥ\";\n\"sura_names[94]\" = \"At-Tīn\";\n\"sura_names[95]\" = \"Al-ʿAlaq\";\n\"sura_names[96]\" = \"Al-Qadr\";\n\"sura_names[97]\" = \"Al-Bayyinah\";\n\"sura_names[98]\" = \"Az-Zalzalah\";\n\"sura_names[99]\" = \"Al-ʿĀdiyāt\";\n\"sura_names[100]\" = \"Al-Qāriʿah\";\n\"sura_names[101]\" = \"At-Takāthur\";\n\"sura_names[102]\" = \"Al-ʿAṣr\";\n\"sura_names[103]\" = \"Al-Humazah\";\n\"sura_names[104]\" = \"Al-Fīl\";\n\"sura_names[105]\" = \"Quraysh\";\n\"sura_names[106]\" = \"Al-Māʿūn\";\n\"sura_names[107]\" = \"Al-Kawthar\";\n\"sura_names[108]\" = \"Al-Kāfirūn\";\n\"sura_names[109]\" = \"An-Naṣr\";\n\"sura_names[110]\" = \"Al-Masad\";\n\"sura_names[111]\" = \"Al-Ikhlāṣ\";\n\"sura_names[112]\" = \"Al-Falaq\";\n\"sura_names[113]\" = \"An-Nās\";\n"
  },
  {
    "path": "Core/Localization/Resources/zh.lproj/Android.strings",
    "content": "\"about_contributors\" = \"撰稿人\";\n\"about_contributors_summary\" = \"为安卓版《古兰经》的开发做出贡献的人员名单\";\n\"about_data_sources\" = \"数据来源\";\n\"about_description\" = \"安卓版古兰经是一款免费的古兰经应用程序。请不要在你的祈祷中忘记贡献者。\";\n\"about_furqan_summary\" = \"乌斯马尼文本和阿拉伯语Tafaseer\";\n\"about_images\" = \"图片\";\n\"about_madani_images\" = \"古兰经图像是基于法赫德国王古兰经印刷厂的字体。\";\n\"about_naskh_images\" = \"Naskh应用程序的古兰经图像来自SHL信息系统（经许可）。\";\n\"about_noorhidayat_summary\" = \"Noorehira字体和Mufti Taqi翻译\";\n\"about_open_source\" = \"开源项目\";\n\"about_others\" = \"其他\";\n\"about_qaloon_images\" = \"Qaloon图片经Nous Memes Editions Et Diffusion（突尼斯）许可使用。\";\n\"about_quran_enc\" = \"《古兰经》合辑\";\n\"about_quran_enc_summary\" = \"多种语言的翻译\";\n\"about_quran_ksu\" = \"电子莫沙夫项目\";\n\"about_quran_ksu_summary\" = \"沙特国王大学电子Moshaf项目是该应用程序的阿拉伯语Tafaseer和各种语言的翻译来源。它也是艾曼-苏韦德博士朗诵的来源。\";\n\"about_quranicaudio_summary\" = \"无间隙的MP3古兰经诵读\";\n\"about_tanzil_summary\" = \"几种语言的翻译\";\n\"app_name\" = \"古兰经\";\n\"audio_manager\" = \"音频经理\";\n\"audio_manager_delete_selection\" = \"删除选择\";\n\"audio_manager_download_all\" = \"下载所有\";\n\"audio_manager_download_selection\" = \"下载选择\";\n\"audio_manager_remove_audio_msg\" = \"您确定要删除%1$@吗？\";\n\"audio_manager_remove_audio_title\" = \"删除苏拉？\";\n\"audio_manager_remove_multiple_audio_msg\" = \"您确定要删除吗？\";\n\"audio_manager_surah_delete\" = \"删除音频文件\";\n\"audio_manager_surah_download\" = \"下载SURAH\";\n\"audio_updated_text\" = \"几个古兰经音频文件已经更新。Quran for Android已经删除了你对这些文件的拷贝，以便在你下次回放时可以下载最新的版本。\";\n\"audio_updated_title\" = \"古兰经音频文件更新\";\n\"available_translations\" = \"可供下载\";\n\"ayah_copied_popup\" = \"复制成功\";\n\"bookmark_ayah\" = \"收藏此节\";\n\"bookmarks_list_empty\" = \"没有收藏\";\n\"cancel\" = \"取消\";\n\"canceling\" = \"正在取消…\";\n\"copy_ayah\" = \"复制此节\";\n\"delete_tag\" = \"删除标签\";\n\"delete_translation\" = \"移除翻译\";\n\"dialog_ok\" = \"确认\";\n\"download_cancel\" = \"取消\";\n\"download_error_disk\" = \"磁盘可供下载空间不足\";\n\"download_error_general\" = \"下载失败\";\n\"download_error_invalid_download\" = \"下载文件损坏\";\n\"download_error_invalid_download_retry\" = \"文件损坏，正在尝试重新下载\";\n\"download_error_network\" = \"网络错误，无法下载\";\n\"download_error_network_retry\" = \"网络错误，正在重新连接…\";\n\"download_error_perms\" = \"权限错误，无法下载\";\n\"download_extra_data\" = \"共享功能和下载功能需要下载一两个小文件，现在下载吗？\";\n\"download_processing\" = \"正在下载…\";\n\"download_progress\" = \"已下载 %1$@ / %2$@\";\n\"download_retry\" = \"重试\";\n\"download_successful\" = \"下载成功\";\n\"downloaded_translations\" = \"已经下载\";\n\"downloadImportantPrompt\" = \"有一个小而重要的更新 对你设备上的古兰经图像进行了一个小而重要的更新。你想下载这个 补丁吗？\";\n\"downloading_message\" = \"文件下载中，请等待。（支持续传）\";\n\"downloadPrompt\" = \"为了更好的使用体验，需要下载一些文件。如果目前选择不下载，每个页面载入时会花较长的时间。确认开始下载这些文件吗？\\\n\";\n\"downloadPrompt_no\" = \"取消\";\n\"downloadPrompt_ok\" = \"确认\";\n\"downloadPrompt_title\" = \"下载所需的文件吗？\";\n\"downloadTabletPrompt\" = \"我们最近增加了改进的图像，用于 平板电脑。你想现在下载这些图片吗？\";\n\"edit_tag\" = \"编辑标签\";\n\"email_us\" = \"If your question is not answered above, you can email quranandroid@gmail.com for support. Please note that we get lots of email, so we may not be able to reply to all emails we receive.\";\n\"error_getting_translation_list\" = \"无法下载译文列表。请稍后重试.\";\n\"export_data_error\" = \"输出数据时出错\";\n\"exported_data\" = \"数据导出到%1$@\";\n\"extracting_title\" = \"处理中…\";\n\"found_in_sura\" = \"对应章节 (%1$d) %2$@ 节 %3$d (页 %4$d)\";\n\"from\" = \"来自\";\n\"get_arabic_search_db\" = \"下载阿拉伯语搜索包\";\n\"get_translations\" = \"下载译文\";\n\"gotoPage\" = \"跳转到页数\";\n\"help\" = \"\\\n<b>怎样播放音频？</b>\\\n<br/>打开任意古兰经页面，轻触屏幕，屏幕底部会出现播放按钮和诵经家的名字.\\\n点击诵经家的名字可以调出诵经家列表进行选择，点击播放按钮会下载当前页面或当前章的音频后开始播放。\\\n<br/>\\\n<br/><b>怎样查看译文？</b>\\\n<br/>打开任意古兰经页面，轻触屏幕，屏幕顶部有一个地球仪图标（或者是三个圆方点构成的图标），点击它\\\n后即可查看译文页面。\\\n<br/>\\\n如果你还未下载任何译文版本，此时会进入译文下载管理页面，选择并下载所需的译文后返回，再次轻触地球仪图标进入译文页面。\\\n<br/>\\\n<br/><b>怎样收藏某个页面？</b>\\\n<br/>打开任意古兰经页面，轻触屏幕，屏幕顶部有一个五角星图标，点击后即可收藏当前页，同时图标会变为实心五角星。\\\n再次点击图标可以取消收藏。\\\n<br/>\\\n<br/><b>怎样增大字体？</b>\\\n<br/>在阿拉伯语原文页面，使用横屏模式会使字体变大。\\\n在译文页面，可以在设置中选择字体大小。\\\n<br/><b>怎样分享一个段落？</b>\\\n<br/>在阿拉伯语原文页面，长按某个章节会弹出关联菜单，包括了收藏，分享，查看译文，复制到剪贴板等功能。\\\n<br/>\\\n<br/><b>无法使用马拉雅拉姆语、泰米尔语、孟加拉语、乌尔都语的字体!</b>\\\n<br/>很抱歉，安卓4.0以前的版本不支持这些字体，目前还没有好的解决方案。\\\n\";\n\"help_title\" = \"常见问题\";\n\"highlighting_database\" = \"所需文件\";\n\"import_data\" = \"进口数据\";\n\"import_data_and_override\" = \"如果你导入这个文件，它将用%1$d书签和%2$d标签替换你所有的书签。导入？\";\n\"import_data_error\" = \"无效的备份文件（或无法读取备份文件）。\";\n\"import_data_permissions_error\" = \"由于权限错误，无法读取备份文件。\";\n\"import_successful\" = \"进口成功\";\n\"juz2_description\" = \"第%1$@卷\";\n\"kitkat_external_message\" = \"由于安卓系统的限制，如果你选择将古兰经数据放在外部SD卡上，后来卸载或清除古兰经安卓系统的数据，所有古兰经安卓系统的页面和音频将被删除，你将不得不重新下载它们。你确定你要使用外部SD卡吗？\";\n\"loading\" = \"正在载入…\";\n\"madani\" = \"麦地那章\";\n\"makki\" = \"麦加章\";\n\"menu_about\" = \"关于\";\n\"menu_back_to_page\" = \"显示古兰经\";\n\"menu_bookmarks\" = \"收藏\";\n\"menu_bookmarks_ayah\" = \"节收藏\";\n\"menu_bookmarks_page\" = \"页面收藏\";\n\"menu_get_translations\" = \"译文下载\";\n\"menu_help\" = \"帮助\";\n\"menu_jump\" = \"跳转\";\n\"menu_jump_last_page\" = \"上次的页面\";\n\"menu_other_apps\" = \"其他应用程序\";\n\"menu_search\" = \"搜索\";\n\"menu_settings\" = \"设置\";\n\"menu_show_date\" = \"显示日期\";\n\"menu_sort\" = \"排序\";\n\"menu_sort_date\" = \"按添加日期\";\n\"menu_sort_group_by_tags\" = \"按标签分组\";\n\"menu_sort_location\" = \"按章节位置\";\n\"menu_translation\" = \"显示译文\";\n\"more_translations\" = \"更多翻译\";\n\"move_down\" = \"下移\";\n\"move_up\" = \"上升\";\n\"need_translation\" = \"还没有下载任何译文。\";\n\"new_tag\" = \"新建标签\";\n\"next\" = \"下一页\";\n\"no_arabic_search_available\" = \"还没有下载搜索包，请下载后再次进行搜索.\";\n\"no_results\" = \"未搜索到\\\"%@\\\"\";\n\"not_tagged\" = \"未命名\";\n\"notification_channel_audio\" = \"古兰经诵读\";\n\"notification_channel_download\" = \"古兰经下载\";\n\"notification_download_canceled\" = \"下载已取消\";\n\"page_description\" = \"第%2$@卷，第%1$@页\";\n\"pause\" = \"暂停\";\n\"play\" = \"播放\";\n\"play_apply\" = \"申请\";\n\"play_apply_and_play\" = \"应用和倾听\";\n\"play_each_verse\" = \"听听每一段经文。\";\n\"play_from_here\" = \"从当前节开始播放\";\n\"play_restrict_range\" = \"只播放上述阿亚特\";\n\"play_verses_range\" = \"听听这组阿亚特。\";\n\"playback_prompt_title\" = \"开始播放从。\";\n\"playback_speed\" = \"播放速度：\";\n\"please_grant_permissions\" = \"请在应用程序设置中授予权限\";\n\"please_wait\" = \"请等待...\";\n\"prefs_app_location_summary\" = \"选择存储古兰经文件的地方\";\n\"prefs_app_location_title\" = \"古兰经数据目录\";\n\"prefs_app_size\" = \"目前的数据大小是\";\n\"prefs_audio_manager_summary\" = \"管理和下载古兰经音频\";\n\"prefs_ayah_before_translation_summary\" = \"在译文前显示阿拉伯语原文\";\n\"prefs_ayah_before_translation_title\" = \"显示原文\";\n\"prefs_calculating_app_size\" = \"计算应用程序的大小\";\n\"prefs_category_advanced\" = \"高级选项\";\n\"prefs_category_advanced_summary\" = \"导入/导出书签，设置古兰经数据目录，等等。\";\n\"prefs_category_display_settings\" = \"显示设置\";\n\"prefs_category_download\" = \"下载选项\";\n\"prefs_category_dual_screen\" = \"双页偏好\";\n\"prefs_category_reading\" = \"朗读设置\";\n\"prefs_category_translation\" = \"译文设置\";\n\"prefs_copying_app_files\" = \"复制应用程序文件\";\n\"prefs_display_marker_summary\" = \"阅读时弹出卷章标记窗口\";\n\"prefs_display_marker_title\" = \"显示卷章标记弹出窗口\";\n\"prefs_download_amount_summary\" = \"non-gapless音频的下载方式。\";\n\"prefs_download_amount_title\" = \"下载方式\";\n\"prefs_dual_page_mode_disabled\" = \"在横屏状态下，将只出现一页。\";\n\"prefs_dual_page_mode_enabled\" = \"在横向情况下，两个页面将并排出现。\";\n\"prefs_dual_page_mode_title\" = \"双页模式\";\n\"prefs_err_moving_app_files\" = \"移动应用程序文件失败\";\n\"prefs_export_summary\" = \"导出书签和标签的副本\";\n\"prefs_export_title\" = \"出口\";\n\"prefs_highlight_bookmarks_summary\" = \"在阅读时，突出显示书签上的阿亚。\";\n\"prefs_highlight_bookmarks_title\" = \"突出显示书签\";\n\"prefs_import_summary\" = \"导入书签和标签\";\n\"prefs_import_title\" = \"进口\";\n\"prefs_new_background_title\" = \"新的壁纸\";\n\"prefs_night_mode_background_brightness_summary\" = \"夜间模式激活时的页面亮度\";\n\"prefs_night_mode_background_brightness_title\" = \"背景亮度\";\n\"prefs_night_mode_summary\" = \"黑色背景和白色字体\";\n\"prefs_night_mode_text_brightness_summary\" = \"Brightness of the text when night more is active\";\n\"prefs_night_mode_text_brightness_title\" = \"Text Brightness\";\n\"prefs_night_mode_title\" = \"夜间模式\";\n\"prefs_no_enough_space_to_move_files\" = \"没有足够的空间来移动应用程序文件\";\n\"prefs_overlay_page_info_summary\" = \"阅读时显示页数，章名和卷数\";\n\"prefs_overlay_page_info_title\" = \"显示页面信息\";\n\"prefs_page_type_summary\" = \"选择阅读页的类型\";\n\"prefs_page_type_title\" = \"页面类型（实验性）\";\n\"prefs_preview\" = \"预览\";\n\"prefs_sdcard_external\" = \"外部存储 %1$d\";\n\"prefs_sdcard_internal\" = \"内部存储\";\n\"prefs_send_logs_summary\" = \"发送调试日志给开发人员\";\n\"prefs_send_logs_title\" = \"发送日志\";\n\"prefs_split_page_and_translation_summary\" = \"在带翻译的双页模式下，显示古兰经页面和翻译。\";\n\"prefs_split_page_and_translation_title\" = \"古兰经和翻译的双重模式\";\n\"prefs_streaming_summary\" = \"优先使用流式音频\";\n\"prefs_streaming_title\" = \"流式音频\";\n\"prefs_sura_translated_name_summary\" = \"显示Surah名称的翻译\";\n\"prefs_sura_translated_name_title\" = \"苏拉译名\";\n\"prefs_translation_text_title\" = \"译文页面字体大小\";\n\"prefs_translations\" = \"译文\";\n\"prefs_translations_summary\" = \"下载与管理译文\";\n\"prefs_use_arabic_summary_on\" = \"应用程序将采用阿拉伯语界面\";\n\"prefs_use_arabic_title\" = \"阿拉伯语模式 (الوضع العربي)\";\n\"prefs_use_dyslexic_font_summary\" = \"Display translations in dyslexia friendly font\";\n\"prefs_use_dyslexic_font_title\" = \"Dyslexia friendly font\";\n\"prefs_volume_key_navigation_summary\" = \"用音量键控制翻页\";\n\"prefs_volume_key_navigation_title\" = \"音量键翻页\";\n\"previous\" = \"上一篇\";\n\"process_progress\" = \"正在处理文件 %1$d / %2$d\";\n\"qarilist_dismiss\" = \"解散\";\n\"qarilist_gapless\" = \"连续的\";\n\"qarilist_gapped\" = \"非连续的\";\n\"qarilist_qaris_with_downloads\" = \"有下载的朗诵者\";\n\"qarilist_ready_to_play\" = \"准备聆听\";\n\"qarilist_select_qari\" = \"选择一个卡里\";\n\"qarilist_selected\" = \"精选\";\n\"quran_ayah\" = \"节 %1$d\";\n\"quran_ayah_details\" = \"%1$@ - Ayah %2$@, Juz\\' %3$@\";\n\"quran_hizb\" = \"段落\";\n\"quran_juz2\" = \"卷\";\n\"quran_nos\" = \"½\";\n\"quran_page\" = \"页\";\n\"quran_rob3\" = \"¼\";\n\"quran_sura\" = \"章\";\n\"quran_talt_arb3\" = \"¾\";\n\"quranSearchType\" = \"Verses of the Quran\";\n\"recent_pages\" = \"最近的页面\";\n\"recite_from_here\" = \"从这里背诵\";\n\"remove_button\" = \"移除\";\n\"remove_dlg_msg\" = \"确定要移除译文%1$@吗？\";\n\"remove_dlg_title\" = \"移除译文吗？\";\n\"scoped_storage_message\" = \"由于安卓系统为增加用户隐私而做出的改变，在未来的安卓系统版本中，将文件复制到应用目录之外可能会阻止Quran for Android访问其数据。你确定你要使用这个路径吗？\";\n\"sdcard_error\" = \"无法找到SD卡。请安装它并重试。\";\n\"search_data\" = \"搜索数据\";\n\"search_entire_mushaf\" = \"搜索整个mushaf\";\n\"search_full_results\" = \"全部结果\";\n\"search_hint\" = \"搜索古兰经\";\n\"search_key\" = \"按住搜索键来查找某节\";\n\"see_tafseer_of_verse\" = \"这段经文的塔夫赛尔与第%d段的塔夫赛尔包括在一起（点击展开）。\";\n\"share_ayah\" = \"分享此节\";\n\"share_ayah_text\" = \"分享文字\";\n\"starting_page_label\" = \"页首\";\n\"stop\" = \"停止\";\n\"storage_permission_please_restart\" = \"请重新启动应用程序以使其生效。\";\n\"storage_permission_rationale\" = \"安卓版 \\\"古兰经 \\\"希望得到你的许可，将其数据存储在外部存储器上。Quran for Android在没有这个许可的情况下也能工作，但如果你清除数据或卸载该应用，所有下载的页面、音频和数据都会被删除。授予Quran for Android的权限？\";\n\"sura_ayah_notification_str\" = \"第%1$@章，第%2$d节\";\n\"sura_ayah_sharing_str\" = \"第%1$@章: %2$d\";\n\"tag_ayah\" = \"为此节加上标签\";\n\"tag_blank_tag_error\" = \"标签名称不能是空白的!\";\n\"tag_bookmark\" = \"为收藏加标签\";\n\"tag_dlg_title\" = \"标签\";\n\"tag_duplicate_tag_error\" = \"标签名称已经存在!\";\n\"tag_name\" = \"标签名\";\n\"timing_database\" = \"所需文件\";\n\"to\" = \"拟\";\n\"translation_ayah\" = \"翻译此节\";\n\"translation_dialog_later\" = \"稍后再说\";\n\"translation_dialog_yes\" = \"好的\";\n\"translation_updates_available\" = \"译文中有可用更新. 访问译文页面吗？\";\n\"undo\" = \"撤销\";\n\"update_available\" = \"有可用更新\";\n\"warning\" = \"警告\";\n"
  },
  {
    "path": "Core/Localization/Resources/zh.lproj/Android.stringsdict",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n<plist version=\"1.0\">\n    <dict>\n        <key>search_results</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@search_results@</string>\n            <key>search_results</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>other</key>\n                <string>%2$d 搜索\\&quot;%1$d\\&quot;的结果:</string>\n            </dict>\n        </dict>\n        <key>verses</key>\n        <dict>\n            <key>NSStringLocalizedFormatKey</key>\n            <string>%#@verses@</string>\n            <key>verses</key>\n            <dict>\n                <key>NSStringFormatSpecTypeKey</key>\n                <string>NSStringPluralRuleType</string>\n                <key>NSStringFormatValueTypeKey</key>\n                <string>d</string>\n                <key>other</key>\n                <string>%d 节</string>\n            </dict>\n        </dict>\n    </dict>\n</plist>\n"
  },
  {
    "path": "Core/Localization/Resources/zh.lproj/Localizable.strings",
    "content": "\n\n// MARK: - General\n\n// Metadata: Translated by ChatGPT; human review required.\n\"button.done\" = \"完成\";\n// Metadata: Translated by ChatGPT; human review required.\n\"button.delete\" = \"删除\";\n\n// MARK: - Errors\n\n// Metadata: Translated by ChatGPT; human review required.\n\"error.dialog.title\" = \"错误\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.connection_lost\" = \"互联网连接丢失。移动到一个有更稳定连接的地方，或等到连接变得稳定。\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.international_roaming_off\" = \"不允许国际漫游。更改国际漫游设置，或打开 Wi-Fi。\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.not_connected_to_internet\" = \"未连接到互联网。打开 Wi-Fi 或允许移动数据连接。\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.general\" = \"哎呀！出错了。请再试一次。\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.message.no_disk_space\" = \"没有可用的磁盘空间来保存下载内容。\";\n\n// MARK: - Quran\n\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah\" = \"经文\";\n// Metadata: Translated by ChatGPT; human review required.\n\"surah\" = \"章\";\n// Metadata: Translated by AI; human review required.\n\"quran_alquran\" = \"古兰经\";\n\n// MARK: - Translation\n\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.translation\" = \"翻译\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text-type.transliteration\" = \"音译\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.selectedTranslations\" = \"已选\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.translator\" = \"译者: \";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.see-referenced-verse\" = \"查看经文 %d。\";\n// Metadata: Translated by ChatGPT; human review required.\n\"translation.text.read-more\" = \"阅读更多\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-retrieval\" = \"哎呀！出错了。我们无法检索翻译。\";\n// Metadata: Translated by ChatGPT; human review required.\n\"error.translation.text-not-available\" = \"这个经文没有可用的翻译。\";\n\n// MARK: - Search\n\n// Metadata: Translated by ChatGPT; human review required.\n\"search.recents.title\" = \"最近搜索\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.popular.title\" = \"尝试搜索\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.placeholder.text\" = \"章节、经文、翻译、注释和数字\";\n// Metadata: Translated by ChatGPT; human review required.\n\"search.result.count\" = \"%@ (%d)\";\n\n// MARK: - Settings\n\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.write_review\" = \"撰写应用商店评论...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.contact_us\" = \"联系我们\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.donate\" = \"捐赠\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.share_app\" = \"分享应用...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"setting.app_version\" = \"应用版本\";\n\n// MARK: - Quran Menu\n\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabic\" = \"阿拉伯语\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translation\" = \"翻译/注释\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.select_translation\" = \"选择翻译/注释\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer\" = \"单词翻译指针\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.pointer.select_translation\" = \"显示指针\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.fontSizeLetter\" = \"A\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.translationFontSize\" = \"翻译大小\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.arabicFontSize\" = \"古兰经大小\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.twoPages\" = \"2页并排（横向模式）\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.verticalScrolling\" = \"垂直滚动\";\n// Metadata: Translated by ChatGPT; human review required.\n\"menu.theme_settings\" = \"主题和设置\";\n\n// MARK: - Theme\n\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.light\" = \"浅色\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.dark\" = \"深色\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto\" = \"自动\";\n// Metadata: Translated by ChatGPT; human review required.\n\"theme.auto.message\" = \"古兰经应用将遵循您的 iPhone 外观设置\";\n\n// MARK: - Tabs\n\n// Metadata: Translated by ChatGPT; human review required.\n\"tab.notes\" = \"笔记\";\n\n// MARK: - Update\n\n// Metadata: Translated by ChatGPT; human review required.\n\"update.filesystem.title\" = \"正在升级数据库...\";\n\"downloading_title\" = \"下载中…\";\n\n// MARK: - Reciters\n\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.title\" = \"选择要聆听的诵经者\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.recent\" = \"最近\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.downloaded\" = \"已下载\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reciters.all\" = \"全部\";\n\n// MARK: - Audio\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.action.modify\" = \"修改\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing.message\" = \"正在播放 %@ 至 %@ 的音频\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.downloading.message\" = \"正在下载 %@ 至 %@ 的音频\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.playing-verses.label\" = \"播放经文\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.adjust-end-verse-to-the-end.label\" = \"将最后一节调整至结束\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-start-verse\" = \"选择起始经文\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.select-end-verse\" = \"选择结束经文\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount\" = \"下载/播放到\";\n// Metadata: Translated by ChatGPT; human review required.\n\"audio.download-play-amount.description\" = \"播放音频时，将播放至\";\n\n// MARK: - Bookmarks\n\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.title\" = \"正在添加书签...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"bookmarks.no-data.text\" = \"阅读古兰经时，点击书签按钮以标记当前页面。\";\n\n// MARK: - Notes\n\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.title\" = \"添加经文高亮...\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.no-data.text\" = \"长按一节经文。您可以扩展选择以包含多个经文，然后点击书签按钮。\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.verses-count\" = \"(+%d 节经文)\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.title\" = \"删除高亮\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.delete.alert.body\" = \"关联的笔记也将被删除。\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.title\" = \"iCloud 同步\";\n// Metadata: Translated by ChatGPT; human review required.\n\"notes.icloud.alert.body\" = \"该应用使用iCloud同步您设备上的书签和笔记。您可以在设备的iCloud设置中禁用它。\";\n\n// MARK: - Ayah Menu\n\n\"ayah.menu.copy\" = \"拷贝\";\n\"ayah.menu.share\" = \"共享…\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-juz\" = \"直到Juz'结束\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-surah\" = \"直到苏拉结束\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.play-end-page\" = \"直到页面结束\";\n// Metadata: Translated by AI; human review required.\n\"ayah.menu.play-end-quran\" = \"直到古兰经结束\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.repeat\" = \"重复\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verse\" = \"选定的经文\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.selected-verses\" = \"选定的经文\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight\" = \"高亮\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.highlight-select-color\" = \"选择颜色\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.add-note\" = \"添加笔记\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.edit-note\" = \"编辑笔记\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-note\" = \"删除笔记\";\n// Metadata: Translated by ChatGPT; human review required.\n\"ayah.menu.delete-highlight\" = \"删除高亮\";\n\n// MARK: - Reading Selector\n\n// Selector UI\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.short\" = \"选择\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selectMushaf.long\" = \"设为当前Mushaf\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.title\" = \"选择Mushaf\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.selection-description\" = \"点击Mushaf获取更多信息。\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.hafs\" = \"哈夫斯穆沙夫\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.pages.604\" = \"604页\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.lines.15\" = \"15行页面\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.supported\" = \"逐字翻译\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.selector.property.word-translation.not-supported\" = \"没有逐字翻译\";\n\n// Hafs 1405\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.title\" = \"哈夫斯，古典麦地那，1405 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.description\" = \"公元1405年在麦地那发行的经典哈夫斯穆沙夫。该应用程序长时间提供了这个版本。\\n来自法赫德国王古兰经印刷复合体。\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1405.issue\" = \"公元1405年发行\";\n\n// Hafs 1421\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.title\" = \"哈夫斯，麦地那，1421 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.description\" = \"公元1421年在麦地那发行的哈夫斯穆沙夫。来自法赫德国王古兰经印刷复合体。\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1421.issue\" = \"公元1421年发行\";\n\n// Hafs 1440\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.title\" = \"哈夫斯，麦地那，1440 AH\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.description\" = \"公元1440年在麦地那发行的哈夫斯穆沙夫。来自法赫德国王古兰经印刷复合体。\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.hafs-1440.issue\" = \"公元1440年发行\";\n\n// Hafs Tajweed\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.title\" = \"哈夫斯，塔吉维德\";\n// Metadata: Translated by ChatGPT; human review required.\n\"reading.tajweed.description\" = \"塔吉维德哈夫斯穆沙夫。阿尔古兰阿尔克里姆 - 达尔马雷法版。\";\n\n// MARK: - Diagnostics\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.title\" = \"诊断\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.details\" = \"这些设置由应用程序开发者专门用于调试和诊断目的。\";\n\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.share_app_logs\" = \"分享应用日志\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs\" = \"启用调试日志\";\n// Metadata: Translated by ChatGPT; human review required.\n\"diagnostics.enable_debug_logs.details\" = \"该设置将在应用程序下次重启时生效。\";\n\n\n// MARK: - What's new\n\n// Metadata: Translated by ChatGPT; human review required.\n\"new.title\" = \"最新动态\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.action\" = \"继续\";\n\n// Mushafs\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs\" = \"新穆沙夫:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.mushafs.details\" = \"愿真主解除我们在加沙的兄弟姐妹所受的压迫。\\n\\n* 塔吉维德哈夫斯穆沙夫：阿尔古兰阿尔克里姆 - 达尔马雷法版。\\n* 麦地那穆沙夫1421希杰里。\\n* 麦地那穆沙夫1440希杰里。\\n* 此外，继续享受经典的1405希杰里版本。\";\n\n// Reciters\n// Metadata: Translated by ChatGPT; human review required.\n\"new.reciters\" = \"新颂经者:\";\n\n// Miscellaneous\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous\" = \"杂项:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.miscellaneous.details\" = \"* 更新应用程序外观。\\n* 增强搜索功能（新算法即将推出）。\\n* 支持越南本地化。\\n* 在没有朗诵播放时可访问高级音频选项。\\n* 应用现在是开源的：https://github.com/quran/quran-ios\";\n\n// Audio upgrades\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades\" = \"音频:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.audio_upgrades.details\" = \"* 可调节的诵读速度：0.5x、0.75x、1x、1.25x、1.5x - 感谢 @adnan29979。\\n* 播放会记住你偏好的速度 - 感谢 @adnan29979。\";\n\n// Personalization\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization\" = \"阅读主题:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.personalization.details\" = \"* 支持多种主题。打开一页《古兰经》 -> 右上角菜单 -> 主题与设置。\\n* 如果想恢复以前的样式，请使用 'Original'。\";\n\n// Library & Navigation\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation\" = \"书库与导航:\";\n// Metadata: Translated by ChatGPT; human review required.\n\"new.library_navigation.details\" = \"* 在主页排序苏拉和朱兹并显示苏拉编号，帮助你更快跳转到所需内容 - 感谢 @yismailuofa。\";\n"
  },
  {
    "path": "Core/Localization/resource_bundle.swift",
    "content": "//\n//  resource_bundle.swift\n//\n//\n//  Created by Afifi, Mohamed on 8/29/21.\n//\n\nimport Foundation\n\nprivate class BundleFinder {}\n\nextension Foundation.Bundle {\n    /// SwiftUI Previews stores the resources in a location not accessible by the generated `Bundle.module`\n    static var fixedModule: Bundle = {\n        let bundleName = \"QuranEngine_Localization\"\n\n        let candidates = [\n            // Bundle should be present here when the package is linked into an App.\n            Bundle.main.resourceURL,\n\n            // Bundle should be present here when the package is linked into a framework.\n            Bundle(for: BundleFinder.self).resourceURL,\n\n            // For command-line tools.\n            Bundle.main.bundleURL,\n\n            // For SwiftUI Previews\n            // Bundle should be present here when running previews from a different package (this is the path to \"…/Debug-iphonesimulator/\").\n            Bundle(for: BundleFinder.self).resourceURL?.deletingLastPathComponent().deletingLastPathComponent(),\n        ]\n\n        for candidate in candidates {\n            let bundlePath = candidate?.appendingPathComponent(bundleName + \".bundle\")\n            if let bundle = bundlePath.flatMap(Bundle.init(url:)) {\n                return bundle\n            }\n        }\n        fatalError(\"unable to find bundle named \\(bundleName)\")\n    }()\n}\n"
  },
  {
    "path": "Core/Locking/NSLocking+Extension.swift",
    "content": "//\n//  NSLocking+Extension.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/4/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\n\nextension NSLocking {\n    public func sync<T>(_ block: () throws -> T) rethrows -> T {\n        lock()\n        defer {\n            unlock()\n        }\n        return try block()\n    }\n\n    public func sync(_ block: () throws -> Void) rethrows {\n        lock()\n        defer {\n            unlock()\n        }\n        try block()\n    }\n}\n"
  },
  {
    "path": "Core/Locking/Protected.swift",
    "content": "//\n//  Protected.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 3/16/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\n\npublic class Protected<T> {\n    // MARK: Lifecycle\n\n    public init(_ data: T, using lock: NSLocking = NSLock()) {\n        _data = data\n        self.lock = lock\n    }\n\n    // MARK: Public\n\n    public var value: T {\n        get {\n            lock.sync {\n                _data\n            }\n        }\n        set {\n            lock.sync {\n                _data = newValue\n            }\n        }\n    }\n\n    public func sync<U>(_ body: (inout T) throws -> U) rethrows -> U {\n        try lock.sync {\n            var d = _data\n            let result = try body(&d)\n            _data = d\n            return result\n        }\n    }\n\n    public func sync(_ body: (inout T) throws -> Void) rethrows {\n        try lock.sync {\n            var d = _data\n            try body(&d)\n            _data = d\n        }\n    }\n\n    // MARK: Private\n\n    private var _data: T\n    private let lock: NSLocking\n}\n"
  },
  {
    "path": "Core/OAuthService/OAuthService.swift",
    "content": "//\n//  OAuthService.swift\n//  QuranEngine\n//\n//  Created by Mohannad Hassan on 08/01/2025.\n//\n\nimport Foundation\nimport UIKit\n\npublic enum OAuthServiceError: Error {\n    case failedToRefreshTokens(Error?)\n\n    case stateDataDecodingError(Error?)\n\n    case failedToDiscoverService(Error?)\n\n    case failedToAuthenticate(Error?)\n}\n\n/// Encapsulates the OAuth state data. Should only be managed and mutated by `OAuthService.`\npublic protocol OAuthStateData {\n    var isAuthorized: Bool { get }\n}\n\n/// An abstraction for handling the OAuth flow steps.\n///\n/// The service is assumed not to have any internal state. It's the responsibility of the client of this service\n/// to hold and persist the state data. Each call to the service returns an updated `OAuthStateData`\n/// that reflects the latest state.\npublic protocol OAuthService {\n    /// Attempts to discover the authentication services and redirects the user to the authentication service.\n    func login(on viewController: UIViewController) async throws -> OAuthStateData\n\n    func getAccessToken(using data: OAuthStateData) async throws -> (String, OAuthStateData)\n\n    func refreshAccessTokenIfNeeded(data: OAuthStateData) async throws -> OAuthStateData\n}\n\n/// Encodes and decodes the `OAuthStateData`. A convneience to hide the conforming `OAuthStateData` type\n/// while preparing the state for persistence.\npublic protocol OAuthStateDataEncoder {\n    func encode(_ data: OAuthStateData) throws -> Data\n\n    func decode(_ data: Data) throws -> OAuthStateData\n}\n"
  },
  {
    "path": "Core/OAuthServiceAppAuthImpl/OAuthServiceAppAuthImpl.swift",
    "content": "//\n//  OAuthServiceAppAuthImpl.swift\n//  QuranEngine\n//\n//  Created by Mohannad Hassan on 08/01/2025.\n//\n\nimport AppAuth\nimport OAuthService\nimport UIKit\nimport VLogging\n\npublic struct AppAuthConfiguration {\n    public let clientID: String\n    public let clientSecret: String\n    public let redirectURL: URL\n    /// The client requests the `offline` and `openid` scopes by default.\n    public let scopes: [String]\n    public let authorizationIssuerURL: URL\n\n    public init(clientID: String, clientSecret: String, redirectURL: URL, scopes: [String], authorizationIssuerURL: URL) {\n        self.clientID = clientID\n        self.clientSecret = clientSecret\n        self.redirectURL = redirectURL\n        self.scopes = scopes\n        self.authorizationIssuerURL = authorizationIssuerURL\n    }\n}\n\nstruct AppAuthStateData: OAuthStateData {\n    let state: OIDAuthState\n\n    public var isAuthorized: Bool { state.isAuthorized }\n}\n\npublic struct OAuthStateEncoderAppAuthImpl: OAuthStateDataEncoder {\n    public init() { }\n\n    public func encode(_ data: any OAuthStateData) throws -> Data {\n        guard let data = data as? AppAuthStateData else {\n            fatalError()\n        }\n        let encoded = try NSKeyedArchiver.archivedData(\n            withRootObject: data.state,\n            requiringSecureCoding: true\n        )\n        return encoded\n    }\n\n    public func decode(_ data: Data) throws -> any OAuthStateData {\n        guard let state = try NSKeyedUnarchiver.unarchivedObject(ofClass: OIDAuthState.self, from: data) else {\n            throw OAuthServiceError.stateDataDecodingError(nil)\n        }\n        return AppAuthStateData(state: state)\n    }\n}\n\npublic final class OAuthServiceAppAuthImpl: OAuthService {\n    // MARK: Lifecycle\n\n    public init(configurations: AppAuthConfiguration) {\n        self.configurations = configurations\n    }\n\n    // MARK: Public\n\n    public func login(on viewController: UIViewController) async throws -> any OAuthStateData {\n        let serviceConfiguration = try await discoverConfiguration(forIssuer: configurations.authorizationIssuerURL)\n        let state = try await login(\n            withServiceConfiguration: serviceConfiguration,\n            appConfiguration: configurations,\n            on: viewController\n        )\n        return AppAuthStateData(state: state)\n    }\n\n    public func getAccessToken(using data: any OAuthStateData) async throws -> (String, any OAuthStateData) {\n        guard let data = data as? AppAuthStateData else {\n            // This should be a fatal error.\n            fatalError()\n        }\n        return try await withCheckedThrowingContinuation { continuation in\n            data.state.performAction { accessToken, clientID, error in\n                guard error == nil else {\n                    logger.error(\"Failed to refresh tokens: \\(error!)\")\n                    continuation.resume(throwing: OAuthServiceError.failedToRefreshTokens(error))\n                    return\n                }\n                guard let accessToken else {\n                    logger.error(\"Failed to refresh tokens: No access token returned. An unexpected situation.\")\n                    continuation.resume(throwing: OAuthServiceError.failedToRefreshTokens(nil))\n                    return\n                }\n                let updatedData = AppAuthStateData(state: data.state)\n                continuation.resume(returning: (accessToken, updatedData))\n            }\n        }\n    }\n\n    public func refreshAccessTokenIfNeeded(data: any OAuthStateData) async throws -> any OAuthStateData {\n        try await getAccessToken(using: data).1\n    }\n\n    // MARK: Private\n\n    private let configurations: AppAuthConfiguration\n\n    // Needed mainly for retention.\n    @MainActor private var authFlow: (any OIDExternalUserAgentSession)?\n\n    // MARK: - Authenication Flow\n\n    private func discoverConfiguration(forIssuer issuer: URL) async throws -> OIDServiceConfiguration {\n        logger.info(\"Discovering configuration for OAuth\")\n        return try await withCheckedThrowingContinuation { continuation in\n            OIDAuthorizationService\n                .discoverConfiguration(forIssuer: issuer) { configuration, error in\n                    guard error == nil else {\n                        logger.error(\"Error fetching OAuth configuration: \\(error!)\")\n                        continuation.resume(throwing: OAuthServiceError.failedToDiscoverService(error))\n                        return\n                    }\n                    guard let configuration else {\n                        // This should not happen\n                        logger.error(\"Error fetching OAuth configuration: no configuration was loaded. An unexpected situtation.\")\n                        continuation.resume(throwing: OAuthServiceError.failedToDiscoverService(nil))\n                        return\n                    }\n                    logger.info(\"OAuth configuration fetched successfully\")\n                    continuation.resume(returning: configuration)\n                }\n        }\n    }\n\n    private func login(\n        withServiceConfiguration serviceConfiguration: OIDServiceConfiguration,\n        appConfiguration: AppAuthConfiguration,\n        on viewController: UIViewController\n    ) async throws -> OIDAuthState {\n        let scopes = [OIDScopeOpenID, OIDScopeProfile] + appConfiguration.scopes\n        let request = OIDAuthorizationRequest(\n            configuration: serviceConfiguration,\n            clientId: appConfiguration.clientID,\n            clientSecret: appConfiguration.clientSecret,\n            scopes: scopes,\n            redirectURL: appConfiguration.redirectURL,\n            responseType: OIDResponseTypeCode,\n            additionalParameters: [:]\n        )\n\n        logger.info(\"Starting OAuth flow\")\n        return try await withCheckedThrowingContinuation { continuation in\n            Task { @MainActor in\n                self.authFlow = OIDAuthState.authState(\n                    byPresenting: request,\n                    presenting: viewController\n                ) { [weak self] state, error in\n                    Task { @MainActor in\n                        self?.authFlow = nil\n                        guard error == nil else {\n                            logger.error(\"Error authenticating: \\(error!)\")\n                            continuation.resume(throwing: OAuthServiceError.failedToAuthenticate(error))\n                            return\n                        }\n                        guard let state else {\n                            logger.error(\"Error authenticating: no state returned. An unexpected situtation.\")\n                            continuation.resume(throwing: OAuthServiceError.failedToAuthenticate(nil))\n                            return\n                        }\n                        logger.info(\"OAuth flow completed successfully\")\n                        continuation.resume(returning: state)\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Core/OAuthServiceFake/OAuthServiceFake.swift",
    "content": "//\n//  OAuthServiceFake.swift\n//  QuranEngine\n//\n//  Created by Mohannad Hassan on 22/01/2025.\n//\n\nimport OAuthService\nimport UIKit\n\npublic struct OAuthStateEncoderFake: OAuthStateDataEncoder {\n    public init() {}\n\n    public func encode(_ data: any OAuthStateData) throws -> Data {\n        guard let data = data as? OAuthStateDataFake else {\n            fatalError()\n        }\n        return try JSONEncoder().encode(data)\n    }\n\n    public func decode(_ data: Data) throws -> any OAuthStateData {\n        try JSONDecoder().decode(OAuthStateDataFake.self, from: data)\n    }\n}\n\npublic final class OAuthServiceFake: OAuthService {\n    public enum AccessTokenBehavior {\n        case success(String)\n        case successWithNewData(String, any OAuthStateData)\n        case failure(Error)\n\n        func getToken() throws -> String {\n            switch self {\n            case .success(let token), .successWithNewData(let token, _):\n                return token\n            case .failure(let error):\n                throw error\n            }\n        }\n\n        func getStateData() throws -> (any OAuthStateData)? {\n            switch self {\n            case .success:\n                return nil\n            case .successWithNewData(_, let data):\n                return data\n            case .failure(let error):\n                throw error\n            }\n        }\n    }\n\n    public init() {}\n\n    public var loginResult: Result<OAuthStateData, Error>?\n\n    public func login(on viewController: UIViewController) async throws -> any OAuthStateData {\n        try loginResult!.get()\n    }\n\n    public var accessTokenRefreshBehavior: AccessTokenBehavior?\n\n    public func getAccessToken(using data: any OAuthStateData) async throws -> (String, any OAuthStateData) {\n        guard let behavior = accessTokenRefreshBehavior else {\n            fatalError()\n        }\n        return (try behavior.getToken(), try behavior.getStateData() ?? data)\n    }\n\n    public func refreshAccessTokenIfNeeded(data: any OAuthStateData) async throws -> any OAuthStateData {\n        try await getAccessToken(using: data).1\n    }\n}\n\npublic final class OAuthStateDataFake: Equatable, Codable, OAuthStateData {\n    enum Codingkey: String, CodingKey {\n        case accessToken\n    }\n\n    public var accessToken: String? {\n        didSet {\n            guard oldValue != nil else { return }\n        }\n    }\n\n    public init() { }\n\n    public required init(from decoder: any Decoder) throws {\n        let container = try decoder.container(keyedBy: Codingkey.self)\n        accessToken = try container.decode(String.self, forKey: .accessToken)\n    }\n\n    public func encode(to encoder: any Encoder) throws {\n        var container = encoder.container(keyedBy: Codingkey.self)\n        try container.encode(accessToken, forKey: .accessToken)\n    }\n\n    public var isAuthorized: Bool {\n        accessToken != nil\n    }\n\n    public static func == (lhs: OAuthStateDataFake, rhs: OAuthStateDataFake) -> Bool {\n        lhs.accessToken == rhs.accessToken\n    }\n}\n"
  },
  {
    "path": "Core/Preferences/Preference.swift",
    "content": "//\n//  Preference.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-04-16.\n//\n\nimport Combine\n\n@propertyWrapper\npublic final class Preference<T> {\n    // MARK: Lifecycle\n\n    public init(_ key: PreferenceKey<T>, preferences: Preferences = .shared) {\n        self.key = key\n        self.preferences = preferences\n    }\n\n    // MARK: Public\n\n    public var wrappedValue: T {\n        get { preferences.valueForKey(key) }\n        set { preferences.setValue(newValue, forKey: key) }\n    }\n\n    public var projectedValue: AnyPublisher<T, Never> {\n        preferences.notifications\n            .compactMap { [weak self] key in\n                if let self, key == self.key.key {\n                    return wrappedValue\n                } else {\n                    return nil\n                }\n            }\n            .eraseToAnyPublisher()\n    }\n\n    // MARK: Private\n\n    private let key: PreferenceKey<T>\n    private let preferences: Preferences\n}\n\n@propertyWrapper\npublic final class TransformedPreference<Raw, T> {\n    // MARK: Lifecycle\n\n    public init(\n        _ key: PreferenceKey<Raw>,\n        preferences: Preferences = .shared,\n        transformer: PreferenceTransformer<Raw, T>\n    ) {\n        preference = Preference(key, preferences: preferences)\n        self.transformer = transformer\n    }\n\n    // MARK: Public\n\n    public var wrappedValue: T {\n        get { transformer.rawToValue(preference.wrappedValue) }\n        set { preference.wrappedValue = transformer.valueToRaw(newValue) }\n    }\n\n    public var projectedValue: AnyPublisher<T, Never> {\n        preference.projectedValue\n            .map(transformer.rawToValue)\n            .eraseToAnyPublisher()\n    }\n\n    // MARK: Private\n\n    private let preference: Preference<Raw>\n    private let transformer: PreferenceTransformer<Raw, T>\n}\n"
  },
  {
    "path": "Core/Preferences/PreferenceKey.swift",
    "content": "//\n//  PreferenceKey.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-17.\n//\n\n#if DEBUG\n    private enum Statics {\n        static var registeredKeys = Set<String>()\n    }\n#endif\n\npublic final class PreferenceKey<Type> {\n    // MARK: Lifecycle\n\n    public init(key: String, defaultValue: Type) {\n        self.key = key\n        self.defaultValue = defaultValue\n\n        #if DEBUG\n            if Statics.registeredKeys.contains(key) {\n                fatalError(\"PersistenceKey '\\(key)' is registered multiple times\")\n            }\n            Statics.registeredKeys.insert(key)\n        #endif\n    }\n\n    init(_ key: String, _ defaultValue: Type) {\n        self.key = key\n        self.defaultValue = defaultValue\n    }\n\n    // MARK: Public\n\n    public let key: String\n    public let defaultValue: Type\n}\n"
  },
  {
    "path": "Core/Preferences/PreferenceTransformer.swift",
    "content": "//\n//  PreferenceTransformer.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-09-10.\n//\n\npublic struct PreferenceTransformer<Raw, T> {\n    // MARK: Lifecycle\n\n    public init(\n        rawToValue: @escaping (Raw) -> T,\n        valueToRaw: @escaping (T) -> Raw\n    ) {\n        self.rawToValue = rawToValue\n        self.valueToRaw = valueToRaw\n    }\n\n    // MARK: Public\n\n    public let rawToValue: (Raw) -> T\n    public let valueToRaw: (T) -> Raw\n}\n\nextension PreferenceTransformer where T: RawRepresentable, T.RawValue == Raw {\n    public static func rawRepresentable(defaultValue: @escaping @autoclosure () -> T) -> Self {\n        PreferenceTransformer(\n            rawToValue: { T(rawValue: $0) ?? defaultValue() },\n            valueToRaw: { $0.rawValue }\n        )\n    }\n}\n\npublic func optionalTransfomer<Raw, T>(of transformer: PreferenceTransformer<Raw, T>) -> PreferenceTransformer<Raw?, T?> {\n    PreferenceTransformer(\n        rawToValue: { $0.map { transformer.rawToValue($0) } },\n        valueToRaw: { $0.map { transformer.valueToRaw($0) } }\n    )\n}\n"
  },
  {
    "path": "Core/Preferences/Preferences.swift",
    "content": "//\n//  Preferences.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-17.\n//\n\nimport Combine\nimport Foundation\n\npublic final class Preferences {\n    // MARK: Lifecycle\n\n    private init(userDefaults: UserDefaults) {\n        self.userDefaults = userDefaults\n    }\n\n    // MARK: Public\n\n    public static var shared = Preferences(userDefaults: .standard)\n\n    public var notifications: AnyPublisher<String, Never> {\n        notificationsSubject.eraseToAnyPublisher()\n    }\n\n    public func valueForKey<T>(_ key: PreferenceKey<T>) -> T {\n        let value = userDefaults.object(forKey: key.key)\n        return (value as? T) ?? key.defaultValue\n    }\n\n    public func setValue<T>(_ value: T?, forKey key: PreferenceKey<T>) {\n        defer {\n            notificationsSubject.send(key.key)\n        }\n\n        guard let value else {\n            userDefaults.removeObject(forKey: key.key)\n            return\n        }\n\n        if let value = value as? Int {\n            userDefaults.set(value, forKey: key.key)\n        } else if let value = value as? Float {\n            userDefaults.set(value, forKey: key.key)\n        } else if let value = value as? Double {\n            userDefaults.set(value, forKey: key.key)\n        } else if let value = value as? Bool {\n            userDefaults.set(value, forKey: key.key)\n        } else if let value = value as? URL {\n            userDefaults.set(value, forKey: key.key)\n        } else if let value = value as? Data {\n            userDefaults.set(value, forKey: key.key)\n        } else {\n            userDefaults.set(value, forKey: key.key)\n        }\n    }\n\n    public func removeValueForKey(_ key: PreferenceKey<some Any>) {\n        setValue(nil, forKey: key)\n    }\n\n    // MARK: Private\n\n    private let userDefaults: UserDefaults\n    private let notificationsSubject = PassthroughSubject<String, Never>()\n}\n"
  },
  {
    "path": "Core/QueuePlayer/AudioInterruptionMonitor.swift",
    "content": "//\n//  AudioInterruptionMonitor.swift\n//  QueuePlayer\n//\n//  Created by Afifi, Mohamed on 4/29/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AVFAudio\nimport Foundation\n\nenum AudioInterruptionType {\n    case began\n    case endedShouldResume\n    case endedShouldNotResume\n}\n\n@MainActor\nfinal class AudioInterruptionMonitor {\n    // MARK: Lifecycle\n\n    init() {\n        let center = NotificationCenter.default\n        center.addObserver(\n            self,\n            selector: #selector(onInterruption(_:)),\n            name: AVAudioSession.interruptionNotification,\n            object: nil\n        )\n    }\n\n    // MARK: Internal\n\n    var onAudioInterruption: (@Sendable @MainActor (AudioInterruptionType) -> Void)?\n\n    // MARK: Private\n\n    private nonisolated static func extractInterruptionType(from notification: Notification) -> AudioInterruptionType? {\n        guard let info = notification.userInfo else {\n            return nil\n        }\n        guard let rawType = info[AVAudioSessionInterruptionTypeKey] as? UInt else {\n            return nil\n        }\n        guard let type = AVAudioSession.InterruptionType(rawValue: rawType) else {\n            return nil\n        }\n        switch type {\n        case .began:\n            return .began\n        case .ended:\n            guard let rawOptions = info[AVAudioSessionInterruptionOptionKey] as? UInt else {\n                return nil\n            }\n            let options = AVAudioSession.InterruptionOptions(rawValue: rawOptions)\n            if options.contains(.shouldResume) {\n                return .endedShouldResume\n            } else {\n                return .endedShouldNotResume\n            }\n        @unknown default:\n            assertionFailure(\"Unimplemented case\")\n            return nil\n        }\n    }\n\n    @objc\n    private nonisolated func onInterruption(_ notification: Notification) {\n        if let type = Self.extractInterruptionType(from: notification) {\n            Task {\n                await onAudioInterruption?(type)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Core/QueuePlayer/AudioPlayer.swift",
    "content": "//\n//  AudioPlayer.swift\n//  QueuePlayer\n//\n//  Created by Afifi, Mohamed on 4/27/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport Foundation\nimport Timing\n\n@MainActor\nclass AudioPlayer {\n    // MARK: Lifecycle\n\n    init(request: AudioRequest, rate: Float) {\n        self.request = request\n        playbackRate = rate\n        audioPlaying = AudioPlaying(request: request, fileIndex: 0, frameIndex: 0)\n        player = Player(url: request.files[0].url)\n        player.onRateChanged = { [weak self] in\n            self?.rateChanged(to: $0)\n        }\n        interruptionMonitor.onAudioInterruption = { [weak self] in\n            self?.onAudioInterruption(type: $0)\n        }\n    }\n\n    // MARK: Internal\n\n    var actions: QueuePlayerActions?\n\n    // MARK: - Interruption\n\n    func onAudioInterruption(type: AudioInterruptionType) {\n        switch type {\n        case .began: pause()\n        case .endedShouldResume: resume()\n        case .endedShouldNotResume: break\n        }\n    }\n\n    // MARK: - Player Controls\n\n    func startPlaying() {\n        play(fileIndex: 0, frameIndex: 0, forceSeek: true)\n    }\n\n    func resume() {\n        timer?.resume()\n        player.play(rate: playbackRate)\n    }\n\n    func pause() {\n        timer?.pause()\n        player.pause()\n    }\n\n    func stop() {\n        timer?.cancel()\n        player.stop()\n        actions?.playbackEnded()\n    }\n\n    func setRate(_ rate: Float) {\n        playbackRate = rate\n\n        // Apply the rate if currently playing\n        if player.isPlaying {\n            player.setRate(rate)\n            timer?.cancel()\n            waitUntilFrameEnds()\n        }\n    }\n\n    func stepForward() {\n        if let next = audioPlaying.nextFrame() {\n            audioPlaying.resetFramePlays()\n            play(fileIndex: next.fileIndex, frameIndex: next.frameIndex, forceSeek: true)\n        } else {\n            // stop playback if last frame\n            stop()\n        }\n    }\n\n    func stepBackgward() {\n        if let previous = audioPlaying.previousFrame() {\n            audioPlaying.resetFramePlays()\n            play(fileIndex: previous.fileIndex, frameIndex: previous.frameIndex, forceSeek: true)\n        } else {\n            // stop playback if first frame\n            stop()\n        }\n    }\n\n    // MARK: Private\n\n    private let interruptionMonitor = AudioInterruptionMonitor()\n    private let request: AudioRequest\n    private var audioPlaying: AudioPlaying\n    private var playbackRate: Float\n\n    private var player: Player {\n        didSet {\n            player.onRateChanged = { [weak self] in\n                self?.rateChanged(to: $0)\n            }\n        }\n    }\n\n    private var timer: Timing.Timer? {\n        didSet { oldValue?.cancel() }\n    }\n\n    // MARK: - Repeat Logic\n\n    private func play(fileIndex: Int, frameIndex: Int, forceSeek: Bool) {\n        let oldFileIndex = audioPlaying.filePlaying.fileIndex\n        let oldFrameIndex = audioPlaying.framePlaying.frameIndex\n\n        let shouldSeek = forceSeek || oldFileIndex != fileIndex || frameIndex - 1 != oldFrameIndex\n\n        // update the model\n        audioPlaying.setPlaying(fileIndex: fileIndex, frameIndex: frameIndex)\n\n        // reload player if the seek will change\n        if shouldSeek {\n            player = Player(url: request.files[fileIndex].url)\n        }\n\n        // if not a continuous play, adjust the seek\n        var currentTime: TimeInterval?\n        if shouldSeek {\n            seek(to: audioPlaying.frame)\n            currentTime = audioPlaying.frame.startTime\n        }\n\n        // start playing\n        resume()\n\n        // wait until frame ends\n        waitUntilFrameEnds(currentTime: currentTime)\n\n        // inform the delegate of a frame changed\n        actions?.audioFrameChanged(fileIndex, frameIndex, player.playerItem)\n    }\n\n    private func onFrameEnded() {\n        let time = getDurationToFrameEnd()\n        // make sure we reached the end of the frame\n        // don't use `abs` since we could be notified a little bit after\n        guard time < 0.2 else {\n            // audio is 200 ms behind, reschedule the timer\n            waitUntilFrameEnds()\n            return\n        }\n\n        // 1. Done playing the frame?\n        //  1.1. Last frame?\n        //   1.1.1 Done playing the request?\n        //      1.1.1.1 Stop\n        //   1.1.2 else Repeat the request\n        //  1.2 else Run next frame\n        // 2. else Repeat the frame\n        if audioPlaying.isLastPlayForCurrentFrame() {\n            if let next = audioPlaying.nextFrame() {\n                // move to next frame\n                audioPlaying.resetFramePlays()\n                play(fileIndex: next.fileIndex, frameIndex: next.frameIndex, forceSeek: false)\n            } else { // last frame\n                if audioPlaying.isLastRun() {\n                    // stop\n                    stop()\n                } else {\n                    // start a new run\n                    audioPlaying.incrementRequestPlays()\n                    audioPlaying.resetFramePlays()\n                    play(fileIndex: 0, frameIndex: 0, forceSeek: true)\n                }\n            }\n        } else {\n            // repeat frame\n            audioPlaying.incrementFramePlays()\n            play(\n                fileIndex: audioPlaying.filePlaying.fileIndex,\n                frameIndex: audioPlaying.framePlaying.frameIndex,\n                forceSeek: true\n            )\n        }\n    }\n\n    private func waitUntilFrameEnds(currentTime: TimeInterval? = nil) {\n        if !player.isPlaying {\n            return\n        }\n\n        // max with 100ms since sometimes the returned value could be negative\n        let mediaDelta = max(0, getDurationToFrameEnd(currentTime: currentTime))\n        // Convert media time to wall-clock time\n        let interval = max(0.05, mediaDelta / Double(playbackRate)) // small floor for stability\n        timer = Timer(interval: interval, queue: .main) { [weak self] in\n            self?.timer = nil\n            self?.onFrameEnded()\n        }\n    }\n\n    // MARK: - PlayerDelegate\n\n    private func rateChanged(to rate: Float) {\n        actions?.playbackRateChanged(rate)\n    }\n\n    private func seek(to frame: AudioFrame) {\n        player.seek(to: frame.startTime, rate: playbackRate)\n    }\n\n    // MARK: - Utilities\n\n    private func getDurationToFrameEnd(currentTime: TimeInterval? = nil) -> TimeInterval {\n        let currentTimeInSeconds = currentTime ?? player.currentTime\n        let frameEndTime = audioPlaying.frameEndTime ?? player.duration\n        return frameEndTime - currentTimeInSeconds\n    }\n}\n"
  },
  {
    "path": "Core/QueuePlayer/AudioPlaying.swift",
    "content": "//\n//  AudioPlaying.swift\n//  QueuePlayer\n//\n//  Created by Afifi, Mohamed on 4/27/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport Foundation\n\nstruct FramePlaying {\n    var frameIndex: Int\n    var framePlays: Int\n}\n\nstruct FilePlaying {\n    // MARK: Lifecycle\n\n    init(fileIndex: Int) {\n        self.fileIndex = fileIndex\n    }\n\n    // MARK: Internal\n\n    let fileIndex: Int\n}\n\nstruct AudioPlaying {\n    // MARK: Lifecycle\n\n    init(request: AudioRequest, fileIndex: Int, frameIndex: Int) {\n        self.request = request\n        filePlaying = FilePlaying(fileIndex: fileIndex)\n        framePlaying = FramePlaying(frameIndex: frameIndex, framePlays: 0)\n        requestPlays = 0\n    }\n\n    // MARK: Internal\n\n    let request: AudioRequest\n    private(set) var filePlaying: FilePlaying\n    private(set) var framePlaying: FramePlaying\n    var requestPlays: Int\n\n    var file: AudioFile {\n        request.files[filePlaying.fileIndex]\n    }\n\n    var frame: AudioFrame {\n        file.frames[framePlaying.frameIndex]\n    }\n\n    var frameEndTime: TimeInterval? {\n        if let frameEndTime = request.files[filePlaying.fileIndex].frames[framePlaying.frameIndex].endTime {\n            return frameEndTime\n        }\n\n        guard let nextFrame = nextFrame() else {\n            // last frame\n            return request.endTime\n        }\n        if nextFrame.fileIndex == filePlaying.fileIndex {\n            // same file\n            return request.files[nextFrame.fileIndex].frames[nextFrame.frameIndex].startTime\n        }\n        // different file\n        return nil\n    }\n\n    mutating func setPlaying(fileIndex: Int, frameIndex: Int) {\n        filePlaying = FilePlaying(fileIndex: fileIndex)\n        framePlaying.frameIndex = frameIndex\n    }\n\n    func isLastPlayForCurrentFrame() -> Bool {\n        framePlaying.framePlays + 1 >= request.frameRuns.maxRuns\n    }\n\n    func isLastRun() -> Bool {\n        requestPlays + 1 >= request.requestRuns.maxRuns\n    }\n\n    mutating func incrementRequestPlays() {\n        guard request.requestRuns != .indefinite else {\n            return\n        }\n        requestPlays += 1\n    }\n\n    mutating func incrementFramePlays() {\n        guard request.frameRuns != .indefinite else {\n            return\n        }\n        framePlaying.framePlays += 1\n    }\n\n    mutating func resetFramePlays() {\n        framePlaying.framePlays = 0\n    }\n\n    func previousFrame() -> (fileIndex: Int, frameIndex: Int)? {\n        // same file\n        if framePlaying.frameIndex > 0 {\n            return (filePlaying.fileIndex, framePlaying.frameIndex - 1)\n        }\n        // previous file\n        if filePlaying.fileIndex > 0 {\n            let previousFileIndex = filePlaying.fileIndex - 1\n            return (previousFileIndex, request.files[previousFileIndex].frames.count - 1)\n        }\n        // first frame\n        return nil\n    }\n\n    func nextFrame() -> (fileIndex: Int, frameIndex: Int)? {\n        // same file\n        if framePlaying.frameIndex < file.frames.count - 1 {\n            return (filePlaying.fileIndex, framePlaying.frameIndex + 1)\n        }\n        // next file\n        if filePlaying.fileIndex < request.files.count - 1 {\n            return (filePlaying.fileIndex + 1, 0)\n        }\n        // last frame\n        return nil\n    }\n}\n"
  },
  {
    "path": "Core/QueuePlayer/AudioRequest.swift",
    "content": "//\n//  AudioRequest.swift\n//  QueuePlayer\n//\n//  Created by Afifi, Mohamed on 4/27/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport Foundation\n\npublic struct AudioRequest: Equatable, Sendable {\n    // MARK: Lifecycle\n\n    public init(files: [AudioFile], endTime: TimeInterval?, frameRuns: Runs, requestRuns: Runs) {\n        self.files = files\n        self.endTime = endTime\n        self.frameRuns = frameRuns\n        self.requestRuns = requestRuns\n    }\n\n    // MARK: Public\n\n    public let files: [AudioFile]\n    public let endTime: TimeInterval?\n    public let frameRuns: Runs\n    public let requestRuns: Runs\n}\n\npublic struct AudioFile: Equatable, Sendable {\n    // MARK: Lifecycle\n\n    public init(url: URL, frames: [AudioFrame]) {\n        self.url = url\n        self.frames = frames\n    }\n\n    // MARK: Public\n\n    public let url: URL\n    public let frames: [AudioFrame]\n}\n\npublic struct AudioFrame: Equatable, Sendable {\n    // MARK: Lifecycle\n\n    public init(startTime: TimeInterval, endTime: TimeInterval?) {\n        self.startTime = startTime\n        self.endTime = endTime\n    }\n\n    // MARK: Public\n\n    public let startTime: TimeInterval\n    public let endTime: TimeInterval?\n}\n"
  },
  {
    "path": "Core/QueuePlayer/NowPlayingUpdater.swift",
    "content": "//\n//  NowPlayingUpdater.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/28/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport MediaPlayer\n\n@MainActor\npublic class NowPlayingUpdater {\n    // MARK: Lifecycle\n\n    public init(center: MPNowPlayingInfoCenter) {\n        self.center = center\n    }\n\n    // MARK: Public\n\n    public func clear() {\n        nowPlayingInfo = nil\n    }\n\n    public func update(duration: TimeInterval) {\n        update([MPMediaItemPropertyPlaybackDuration: duration])\n    }\n\n    public func update(elapsedTime: TimeInterval) {\n        update([MPNowPlayingInfoPropertyElapsedPlaybackTime: elapsedTime])\n    }\n\n    public func update(info: PlayerItemInfo) {\n        update([MPMediaItemPropertyTitle: info.title,\n                MPMediaItemPropertyArtist: info.artist])\n        if let artwork = info.artwork {\n            update([MPMediaItemPropertyArtwork: artwork])\n        }\n    }\n\n    public func update(rate: Float) {\n        update([MPNowPlayingInfoPropertyPlaybackRate: rate])\n    }\n\n    public func update(count: Int) {\n        update([MPNowPlayingInfoPropertyPlaybackQueueCount: count])\n    }\n\n    public func update(playingIndex: Int) {\n        update([MPNowPlayingInfoPropertyPlaybackQueueIndex: playingIndex])\n    }\n\n    // MARK: Private\n\n    private let center: MPNowPlayingInfoCenter\n\n    private var nowPlayingInfo: [String: Any]? {\n        didSet {\n            center.nowPlayingInfo = nowPlayingInfo\n        }\n    }\n\n    private func update(_ values: [String: Any]) {\n        var info = nowPlayingInfo ?? [:]\n        for (key, value) in values {\n            info[key] = value\n        }\n        nowPlayingInfo = info\n    }\n}\n"
  },
  {
    "path": "Core/QueuePlayer/Player.swift",
    "content": "//\n//  Player.swift\n//  QueuePlayer\n//\n//  Created by Afifi, Mohamed on 5/4/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AVFoundation\n\n@MainActor\nfinal class Player {\n    // MARK: Lifecycle\n\n    deinit {\n        rateObservation?.invalidate()\n    }\n\n    init(url: URL) {\n        asset = AVURLAsset(url: url, options: [AVURLAssetPreferPreciseDurationAndTimingKey: true])\n        playerItem = AVPlayerItem(asset: asset)\n        playerItem.audioTimePitchAlgorithm = .spectral\n        player = AVPlayer(playerItem: playerItem)\n        player.automaticallyWaitsToMinimizeStalling = false\n\n        rateObservation = player.observe(\\AVPlayer.rate, options: [.new]) { [weak self] _, change in\n            if let rate = change.newValue {\n                guard let self else { return }\n                Task {\n                    await self.onRateChanged?(rate)\n                }\n            }\n        }\n    }\n\n    // MARK: Internal\n\n    var onRateChanged: (@Sendable @MainActor (Float) -> Void)?\n\n    let playerItem: AVPlayerItem\n\n    var currentTime: TimeInterval {\n        player.currentTime().seconds\n    }\n\n    var duration: TimeInterval {\n        asset.duration.seconds\n    }\n\n    // MARK: Internal helpers (read-only)\n\n    var isPlaying: Bool {\n        player.rate != 0\n    }\n\n    func play(rate: Float) {\n        player.playImmediately(atRate: rate)\n    }\n\n    func pause() {\n        player.pause()\n    }\n\n    func stop() {\n        player.pause()\n    }\n\n    func setRate(_ rate: Float) {\n        player.rate = rate\n    }\n\n    func seek(to timeInSeconds: TimeInterval, rate: Float) {\n        pause()\n        player.seek(to: timeInSeconds)\n        play(rate: rate)\n    }\n\n    // MARK: Private\n\n    private let asset: AVURLAsset\n    private let player: AVPlayer\n\n    private var rateObservation: NSKeyValueObservation? {\n        didSet { oldValue?.invalidate() }\n    }\n}\n\nprivate extension AVPlayer {\n    func seek(to timeInSeconds: TimeInterval) {\n        let time = CMTime(seconds: timeInSeconds, preferredTimescale: 1000)\n        seek(to: time)\n    }\n}\n"
  },
  {
    "path": "Core/QueuePlayer/PlayerItemInfo.swift",
    "content": "//\n//  PlayerItemInfo.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 2018-04-04.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2018  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\nimport MediaPlayer\n\npublic struct PlayerItemInfo {\n    // MARK: Lifecycle\n\n    public init(title: String, artist: String, image: UIImage?) {\n        self.title = title\n        self.artist = artist\n        artwork = (image ?? UIImage(named: \"app-image\")).map { image in\n            MPMediaItemArtwork(boundsSize: image.size) { _ in image }\n        }\n    }\n\n    // MARK: Public\n\n    public let title: String\n    public let artist: String\n    public let artwork: MPMediaItemArtwork?\n}\n"
  },
  {
    "path": "Core/QueuePlayer/QueuePlayer.swift",
    "content": "//\n//  QueuePlayer.swift\n//  QueuePlayer\n//\n//  Created by Afifi, Mohamed on 4/23/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AVFoundation\n\npublic struct QueuePlayerActions: Sendable {\n    // MARK: Lifecycle\n\n    public init(\n        playbackEnded: @Sendable @MainActor @escaping () -> Void,\n        playbackRateChanged: @Sendable @MainActor @escaping (Float) -> Void,\n        audioFrameChanged: @Sendable @MainActor @escaping (Int, Int, AVPlayerItem) -> Void\n    ) {\n        self.playbackEnded = playbackEnded\n        self.playbackRateChanged = playbackRateChanged\n        self.audioFrameChanged = audioFrameChanged\n    }\n\n    // MARK: Internal\n\n    let playbackEnded: @Sendable @MainActor () -> Void\n    let playbackRateChanged: @Sendable @MainActor (Float) -> Void\n    let audioFrameChanged: @Sendable @MainActor (Int, Int, AVPlayerItem) -> Void\n}\n\n@MainActor\npublic class QueuePlayer {\n    // MARK: Lifecycle\n\n    public init() {\n        try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.defaultToSpeaker, .allowBluetoothHFP])\n    }\n\n    // MARK: Open\n\n    open func play(request: AudioRequest, rate: Float) {\n        player = AudioPlayer(request: request, rate: rate)\n        player?.actions = newPlayerActions()\n        player?.startPlaying()\n    }\n\n    // MARK: Public\n\n    public var actions: QueuePlayerActions?\n\n    public func pause() {\n        player?.pause()\n    }\n\n    public func setRate(_ rate: Float) {\n        player?.setRate(rate)\n    }\n\n    public func resume() {\n        player?.resume()\n    }\n\n    public func stop() {\n        player?.stop()\n    }\n\n    public func stepForward() {\n        player?.stepForward()\n    }\n\n    public func stepBackward() {\n        player?.stepBackgward()\n    }\n\n    // MARK: Private\n\n    private var player: AudioPlayer? {\n        didSet {\n            oldValue?.actions = nil\n        }\n    }\n\n    private func playbackEnded() {\n        player = nil\n        actions?.playbackEnded()\n    }\n\n    private func newPlayerActions() -> QueuePlayerActions {\n        QueuePlayerActions(\n            playbackEnded: { [weak self] in\n                self?.playbackEnded()\n            },\n            playbackRateChanged: { [weak self] in\n                self?.actions?.playbackRateChanged($0)\n            },\n            audioFrameChanged: { [weak self] in\n                self?.actions?.audioFrameChanged($0, $1, $2)\n            }\n        )\n    }\n}\n"
  },
  {
    "path": "Core/QueuePlayer/Runs.swift",
    "content": "//\n//  Runs.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 2018-04-04.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2018  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\npublic enum Runs: Hashable, Sendable {\n    case one\n    case two\n    case three\n    case four\n    case indefinite\n\n    // MARK: Internal\n\n    var maxRuns: Int {\n        switch self {\n        case .one: return 1\n        case .two: return 2\n        case .three: return 3\n        case .four: return 4\n        case .indefinite: return .max\n        }\n    }\n}\n"
  },
  {
    "path": "Core/SecurePersistence/SecurePersistence.swift",
    "content": "//\n//  SecurePersistence.swift\n//  QuranEngine\n//\n//  Created by Mohannad Hassan on 28/12/2024.\n//\n\nimport Foundation\nimport SystemDependencies\nimport VLogging\n\npublic enum PersistenceError: Error {\n    case persistenceFailed\n    case retrievalFailed\n}\n\n/// An abstraction for secure persistence of data.\n///\n/// Currently, only supports `Data` as the data type of the saved objects.\npublic protocol SecurePersistence {\n    func set(data: Data, forKey key: String) throws\n\n    func getData(forKey key: String) throws -> Data?\n\n    func clearData(forKey key: String) throws\n}\n\npublic final class KeychainPersistence: SecurePersistence {\n    // MARK: Lifecycle\n\n    public init(keychainAccess: KeychainAccess = DefaultKeychainAccess()) {\n        self.keychainAccess = keychainAccess\n    }\n\n    // MARK: Public\n\n    public func set(data: Data, forKey key: String) throws {\n        let addquery: [String: Any] = [\n            kSecClass as String: kSecClassGenericPassword,\n            kSecAttrAccount as String: key,\n            kSecValueData as String: data,\n        ]\n        let status = keychainAccess.addItem(query: addquery)\n        if status == errSecDuplicateItem {\n            logger.info(\"[KeychainPersistence] Data already exists, updating\")\n            try update(dat: data, forKey: key)\n        } else if status != errSecSuccess {\n            logger.error(\"[KeychainPersistence] Failed to persist data -- \\(status) status\")\n            throw PersistenceError.persistenceFailed\n        }\n        logger.info(\"[KeychainPersistence] Data persisted successfully\")\n    }\n\n    public func getData(forKey key: String) throws -> Data? {\n        let query: [String: Any] = [\n            kSecClass as String: kSecClassGenericPassword,\n            kSecAttrAccount as String: key,\n            kSecReturnData as String: true,\n            kSecMatchLimit as String: kSecMatchLimitOne,\n        ]\n        var result: CFTypeRef?\n        let status = keychainAccess.copyItem(query: query, result: &result)\n        if status == errSecItemNotFound {\n            logger.info(\"[KeychainPersistence] No data found\")\n            return nil\n        } else if status != errSecSuccess {\n            logger.error(\"[KeychainPersistence] Failed to retrieve data -- \\(status) status\")\n            throw PersistenceError.retrievalFailed\n        }\n        guard let data = result as? Data else {\n            logger.error(\"[KeychainPersistence] Invalid data type found\")\n            throw PersistenceError.retrievalFailed\n        }\n\n        return data\n    }\n\n    public func clearData(forKey key: String) throws {\n        let query: [String: Any] = [\n            kSecClass as String: kSecClassGenericPassword,\n            kSecAttrAccount as String: key,\n        ]\n\n        let status = keychainAccess.deleteItem(query: query)\n        if status != errSecSuccess && status != errSecItemNotFound {\n            logger.error(\"[KeychainPersistence] Failed to clear data -- \\(status) status\")\n            throw PersistenceError.persistenceFailed\n        }\n    }\n\n    // MARK: Private\n\n    private var keychainAccess: KeychainAccess\n\n    private func update(dat: Data, forKey key: String) throws {\n        let query: [String: Any] = [\n            kSecClass as String: kSecClassGenericPassword,\n            kSecAttrAccount as String: key,\n        ]\n        let attributes: [String: Any] = [\n            kSecValueData as String: dat,\n        ]\n        let status = keychainAccess.updateItem(query: query, attributes: attributes)\n        if status != errSecSuccess {\n            logger.error(\"[KeychainPersistence] Failed to update data -- \\(status) status\")\n            throw PersistenceError.persistenceFailed\n        }\n        logger.info(\"[KeychainPersistence] Data updated\")\n    }\n}\n"
  },
  {
    "path": "Core/SystemDependencies/EventObserver.swift",
    "content": "//\n//  EventObserver.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-11-05.\n//\n\npublic protocol EventObserver {\n    func notify() async\n    func waitForNextEvent() async\n}\n\nextension EventObserver {\n    public func callAsFunction() async {\n        await notify()\n    }\n}\n"
  },
  {
    "path": "Core/SystemDependencies/FileSystem.swift",
    "content": "//\n//  FileSystem.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-02-08.\n//\n\nimport Foundation\nimport Utilities\n\npublic protocol FileSystem: Sendable {\n    func fileExists(at url: URL) -> Bool\n    func createDirectory(at url: URL, withIntermediateDirectories createIntermediates: Bool) throws\n    func copyItem(at srcURL: URL, to dstURL: URL) throws\n    func removeItem(at url: URL) throws\n    func moveItem(at src: URL, to dst: URL) throws\n    func contentsOfDirectory(at url: URL, includingPropertiesForKeys keys: [URLResourceKey]?) throws -> [URL]\n    func resourceValues(at url: URL, forKeys keys: Set<URLResourceKey>) throws -> ResourceValues\n\n    func writeToFile(at path: URL, content: String) throws\n}\n\npublic struct DefaultFileSystem: FileSystem {\n    // MARK: Lifecycle\n\n    public init() { }\n\n    // MARK: Public\n\n    public func fileExists(at url: URL) -> Bool {\n        (try? url.checkResourceIsReachable()) ?? false\n    }\n\n    public func removeItem(at url: URL) throws {\n        try FileManager.default.removeItem(at: url)\n    }\n\n    public func moveItem(at src: URL, to dst: URL) throws {\n        try FileManager.default.moveItem(at: src, to: dst)\n    }\n\n    public func contentsOfDirectory(at url: URL, includingPropertiesForKeys keys: [URLResourceKey]?) throws -> [URL] {\n        try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys: nil)\n    }\n\n    public func resourceValues(at url: URL, forKeys keys: Set<URLResourceKey>) throws -> ResourceValues {\n        try url.resourceValues(forKeys: keys)\n    }\n\n    public func createDirectory(at url: URL, withIntermediateDirectories createIntermediates: Bool) throws {\n        try FileManager.default.createDirectory(at: url, withIntermediateDirectories: createIntermediates)\n    }\n\n    public func copyItem(at srcURL: URL, to dstURL: URL) throws {\n        try FileManager.default.copyItem(at: srcURL, to: dstURL)\n    }\n\n    public func writeToFile(at path: URL, content: String) throws {\n        try \"Success\".write(to: path, atomically: true, encoding: .utf8)\n    }\n}\n\npublic protocol ResourceValues {\n    var fileSize: Int? { get }\n}\n\nextension URLResourceValues: ResourceValues { }\n\npublic extension FileSystem {\n    func contentsOfDirectory(at path: RelativeFilePath, includingPropertiesForKeys keys: [URLResourceKey]?) throws -> [URL] {\n        try contentsOfDirectory(at: path.url, includingPropertiesForKeys: keys)\n    }\n\n    func fileExists(at path: RelativeFilePath) -> Bool {\n        fileExists(at: path.url)\n    }\n\n    func removeItem(at path: RelativeFilePath) throws {\n        try removeItem(at: path.url)\n    }\n\n    func createDirectory(at path: RelativeFilePath, withIntermediateDirectories: Bool) throws {\n        try createDirectory(at: path.url, withIntermediateDirectories: withIntermediateDirectories)\n    }\n\n    func moveItem(at src: URL, to dst: RelativeFilePath) throws {\n        try moveItem(at: src, to: dst.url)\n    }\n}\n"
  },
  {
    "path": "Core/SystemDependencies/KeychainAccess.swift",
    "content": "//\n//  KeychainAccess.swift\n//  QuranEngine\n//\n//  Created by Mohannad Hassan on 21/01/2025.\n//\n\nimport Foundation\n\npublic protocol KeychainAccess {\n    func addItem(query: [String: Any]) -> OSStatus\n    func updateItem(query: [String: Any], attributes: [String: Any]) -> OSStatus\n    func deleteItem(query: [String: Any]) -> OSStatus\n    func copyItem(query: [String: Any], result: UnsafeMutablePointer<CFTypeRef?>) -> OSStatus\n}\n\npublic struct DefaultKeychainAccess: KeychainAccess {\n    public init() { }\n\n    public func addItem(query: [String: Any]) -> OSStatus {\n        SecItemAdd(query as CFDictionary, nil)\n    }\n\n    public func updateItem(query: [String: Any], attributes: [String: Any]) -> OSStatus {\n        SecItemUpdate(query as CFDictionary, attributes as CFDictionary)\n    }\n\n    public func deleteItem(query: [String: Any]) -> OSStatus {\n        SecItemDelete(query as CFDictionary)\n    }\n\n    public func copyItem(query: [String: Any], result: UnsafeMutablePointer<CFTypeRef?>) -> OSStatus {\n        SecItemCopyMatching(query as CFDictionary, result)\n    }\n}\n"
  },
  {
    "path": "Core/SystemDependencies/PersistentHistoryTransaction.swift",
    "content": "//\n//  PersistentHistoryTransaction.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-28.\n//\n\nimport CoreData\n\npublic protocol PersistentHistoryChange {\n    var changedObjectID: NSManagedObjectID { get }\n    var changeType: NSPersistentHistoryChangeType { get }\n}\n\npublic protocol PersistentHistoryTransaction {\n    func changes() -> [PersistentHistoryChange]\n}\n\nextension NSPersistentHistoryChange: PersistentHistoryChange {}\nextension NSPersistentHistoryTransaction: PersistentHistoryTransaction {\n    public func changes() -> [PersistentHistoryChange] {\n        changes ?? []\n    }\n}\n"
  },
  {
    "path": "Core/SystemDependencies/SystemBundle.swift",
    "content": "//\n//  SystemBundle.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-07.\n//\n\nimport Foundation\n\npublic protocol SystemBundle: Sendable {\n    func readArray(resource: String, withExtension: String) -> NSArray\n    func infoValue(forKey key: String) -> Any?\n    func url(forResource name: String?, withExtension ext: String?) -> URL?\n}\n\npublic struct DefaultSystemBundle: SystemBundle {\n    // MARK: Lifecycle\n\n    public init() { }\n\n    // MARK: Public\n\n    public func readArray(resource: String, withExtension: String) -> NSArray {\n        let url = Bundle.main.url(forResource: resource, withExtension: withExtension)!\n        return NSArray(contentsOf: url)!\n    }\n\n    public func infoValue(forKey key: String) -> Any? {\n        Bundle.main.object(forInfoDictionaryKey: key)\n    }\n\n    public func url(forResource name: String?, withExtension ext: String?) -> URL? {\n        Bundle.main.url(forResource: name, withExtension: ext)\n    }\n}\n"
  },
  {
    "path": "Core/SystemDependencies/SystemTime.swift",
    "content": "//\n//  SystemTime.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-07.\n//\n\nimport Foundation\n\npublic protocol SystemTime {\n    var now: Date { get }\n}\n\npublic struct DefaultSystemTime: SystemTime {\n    // MARK: Lifecycle\n\n    public init() { }\n\n    // MARK: Public\n\n    public var now: Date {\n        Date()\n    }\n}\n"
  },
  {
    "path": "Core/SystemDependencies/Zipper.swift",
    "content": "//\n//  Zipper.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-11-22.\n//\n\nimport Foundation\nimport Zip\n\npublic protocol Zipper {\n    func unzipFile(_ zipFile: URL, destination: URL, overwrite: Bool, password: String?) throws\n}\n\npublic struct DefaultZipper: Zipper {\n    // MARK: Lifecycle\n\n    public init() { }\n\n    // MARK: Public\n\n    public func unzipFile(_ zipFile: URL, destination: URL, overwrite: Bool, password: String?) throws {\n        try Zip.unzipFile(zipFile, destination: destination, overwrite: overwrite, password: password)\n    }\n}\n"
  },
  {
    "path": "Core/SystemDependenciesFake/AsyncChannelEventObserver.swift",
    "content": "//\n//  AsyncChannelEventObserver.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-11-05.\n//\n\nimport AsyncAlgorithms\nimport SystemDependencies\n\npublic struct AsyncChannelEventObserver: EventObserver {\n    // MARK: Lifecycle\n\n    public init() {}\n\n    // MARK: Public\n\n    public func notify() async {\n        await channel.send(())\n    }\n\n    public func waitForNextEvent() async {\n        var iterator = channel.makeAsyncIterator()\n        await iterator.next()\n    }\n\n    // MARK: Private\n\n    private let channel = AsyncChannel<Void>()\n}\n"
  },
  {
    "path": "Core/SystemDependenciesFake/FileSystemFake.swift",
    "content": "//\n//  FileSystemFake.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-02-08.\n//\n\nimport Foundation\nimport SystemDependencies\nimport Utilities\n\npublic struct ResourceValuesFake: ResourceValues, Sendable {\n    public let fileSize: Int?\n}\n\npublic final class FileSystemFake: FileSystem, Sendable {\n    private struct State: Sendable {\n        var files: Set<URL> = []\n        var checkedFiles: Set<URL> = []\n        var removedItems: [URL] = []\n        var filesInDirectory: [URL: [URL]] = [:]\n        var resourceValuesByURL: [URL: ResourceValuesFake] = [:]\n    }\n\n    // MARK: Lifecycle\n\n    public init() {}\n\n    // MARK: Public\n\n    public var files: Set<URL> {\n        get { state.withCriticalRegion { $0.files } }\n        set { state.withCriticalRegion { $0.files = newValue } }\n    }\n\n    public var checkedFiles: Set<URL> {\n        get { state.withCriticalRegion { $0.checkedFiles } }\n        set { state.withCriticalRegion { $0.checkedFiles = newValue } }\n    }\n\n    public var removedItems: [URL] {\n        get { state.withCriticalRegion { $0.removedItems } }\n        set { state.withCriticalRegion { $0.removedItems = newValue } }\n    }\n\n    public var filesInDirectory: [URL: [URL]] {\n        get { state.withCriticalRegion { $0.filesInDirectory } }\n        set { state.withCriticalRegion { $0.filesInDirectory = newValue } }\n    }\n\n    public var resourceValuesByURL: [URL: ResourceValuesFake] {\n        get { state.withCriticalRegion { $0.resourceValuesByURL } }\n        set { state.withCriticalRegion { $0.resourceValuesByURL = newValue } }\n    }\n\n    public func fileExists(at url: URL) -> Bool {\n        checkedFiles.insert(url)\n        return files.contains(url)\n    }\n\n    public func removeItem(at url: URL) throws {\n        removedItems.append(url)\n        for file in files {\n            if url.isParent(of: file) {\n                files.remove(file)\n            }\n        }\n    }\n\n    public func moveItem(at src: URL, to dst: URL) throws {\n        if !files.contains(src) {\n            throw FileSystemError.general(\"Source file doesn't exist: \\(src)\")\n        }\n        if files.contains(dst) {\n            throw FileSystemError.general(\"Destination file exists: \\(src)\")\n        }\n        files.remove(src)\n        files.insert(dst)\n    }\n\n    public func contentsOfDirectory(at url: URL, includingPropertiesForKeys keys: [URLResourceKey]?) throws -> [URL] {\n        filesInDirectory[url] ?? []\n    }\n\n    public func createDirectory(at url: URL, withIntermediateDirectories createIntermediates: Bool) throws {\n        files.insert(url)\n    }\n\n    public func copyItem(at srcURL: URL, to dstURL: URL) throws {\n        files.insert(dstURL)\n        let parent = dstURL.deletingLastPathComponent()\n        var contents = filesInDirectory[parent] ?? []\n        contents.append(dstURL)\n        filesInDirectory[parent] = contents\n    }\n\n    public func resourceValues(at url: URL, forKeys keys: Set<URLResourceKey>) throws -> ResourceValues {\n        if let values = resourceValuesByURL[url] {\n            return values\n        }\n        throw FileSystemError.noResourceValues\n    }\n\n    public func setResourceValues(_ url: URL, fileSize: Int?) {\n        resourceValuesByURL[url] = ResourceValuesFake(fileSize: fileSize)\n    }\n\n    public func writeToFile(at path: URL, content: String) throws {\n        if files.contains(path) {\n            throw FileSystemError.general(\"Cannot overwrite file at \\(path)\")\n        }\n        files.insert(path)\n    }\n\n    // MARK: Internal\n\n    enum FileSystemError: Error {\n        case noResourceValues\n        case general(String)\n    }\n\n    // MARK: Private\n\n    private let state = ManagedCriticalState(State())\n}\n"
  },
  {
    "path": "Core/SystemDependenciesFake/KeychainAccessFake.swift",
    "content": "//\n//  KeychainAccessFake.swift\n//  QuranEngine\n//\n//  Created by Mohannad Hassan on 21/01/2025.\n//\n\nimport Foundation\nimport SystemDependencies\n\npublic class KeychainAccessFake: KeychainAccess {\n    private var items: [String: [String: Any]] = [:]\n\n    public init() { }\n\n    public func addItem(query: [String: Any]) -> OSStatus {\n        guard let key = query[kSecAttrAccount as String] as? String else {\n            return errSecParam\n        }\n        items[key] = query\n        return errSecSuccess\n    }\n\n    public func updateItem(query: [String: Any], attributes: [String: Any]) -> OSStatus {\n        guard let key = query[kSecAttrAccount as String] as? String else {\n            return errSecItemNotFound\n        }\n        items[key] = attributes\n        return errSecSuccess\n    }\n\n    public func deleteItem(query: [String: Any]) -> OSStatus {\n        guard let key = query[kSecAttrAccount as String] as? String else {\n            return errSecParam\n        }\n        items[key] = nil\n        return errSecSuccess\n    }\n\n    public func copyItem(query: [String: Any], result: UnsafeMutablePointer<CFTypeRef?>) -> OSStatus {\n        guard let key = query[kSecAttrAccount as String] as? String else {\n            return errSecItemNotFound\n        }\n        guard let item = items[key] else {\n            return errSecItemNotFound\n        }\n        guard let value = item[kSecValueData as String] as? Data else {\n            return errSecParam\n        }\n        result.pointee = value as CFData\n        return errSecSuccess\n    }\n}\n"
  },
  {
    "path": "Core/SystemDependenciesFake/PersistentHistoryTransactionFake.swift",
    "content": "//\n//  PersistentHistoryTransactionFake.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-28.\n//\n\nimport CoreData\nimport SystemDependencies\n\npublic struct PersistentHistoryChangeFake: PersistentHistoryChange {\n    // MARK: Lifecycle\n\n    public init(changedObjectID: NSManagedObjectID, changeType: NSPersistentHistoryChangeType) {\n        self.changedObjectID = changedObjectID\n        self.changeType = changeType\n    }\n\n    // MARK: Public\n\n    public var changedObjectID: NSManagedObjectID\n    public var changeType: NSPersistentHistoryChangeType\n}\n\npublic struct PersistentHistoryTransactionFake: PersistentHistoryTransaction {\n    // MARK: Lifecycle\n\n    public init(historyChanges: [PersistentHistoryChange]) {\n        self.historyChanges = historyChanges\n    }\n\n    // MARK: Public\n\n    public var historyChanges: [PersistentHistoryChange]\n\n    public func changes() -> [PersistentHistoryChange] {\n        historyChanges\n    }\n}\n"
  },
  {
    "path": "Core/SystemDependenciesFake/SystemBundleFake.swift",
    "content": "//\n//  SystemBundleFake.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-07.\n//\n\nimport Foundation\nimport SystemDependencies\n\npublic final class SystemBundleFake: SystemBundle, @unchecked Sendable {\n    // MARK: Lifecycle\n\n    public init() {}\n\n    // MARK: Public\n\n    public var arrays: [String: NSArray] = [:]\n    public var info: [String: Any] = [:]\n    public var urls: [String: URL] = [:]\n\n    public func readArray(resource: String, withExtension: String) -> NSArray {\n        arrays[resource + \".\" + withExtension]!\n    }\n\n    public func infoValue(forKey key: String) -> Any? {\n        info[key]\n    }\n\n    public func url(forResource name: String?, withExtension ext: String?) -> URL? {\n        urls[[name, ext].compactMap { $0 }.joined(separator: \".\")]\n    }\n}\n"
  },
  {
    "path": "Core/SystemDependenciesFake/SystemTimeFake.swift",
    "content": "//\n//  SystemTimeFake.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-07.\n//\n\nimport Foundation\nimport SystemDependencies\n\npublic final class SystemTimeFake: SystemTime {\n    // MARK: Lifecycle\n\n    public init() {}\n\n    // MARK: Public\n\n    public var now = Date(timeIntervalSinceReferenceDate: 0)\n}\n"
  },
  {
    "path": "Core/SystemDependenciesFake/ZipperFake.swift",
    "content": "//\n//  ZipperFake.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-11-22.\n//\n\nimport Foundation\nimport SystemDependencies\n\npublic final class ZipperFake: Zipper {\n    // MARK: Lifecycle\n\n    public init(fileManager: FileSystem) {\n        self.fileManager = fileManager\n    }\n\n    // MARK: Public\n\n    public var failures: [Error] = []\n    public var unzippedFiles: [URL] = []\n\n    public func unzipFile(_ zipFile: URL, destination: URL, overwrite: Bool, password: String?) throws {\n        if let failure = failures.first {\n            failures.remove(at: 0)\n            throw failure\n        }\n\n        for file in zipContents(zipFile) {\n            try fileManager.writeToFile(at: file, content: \"unzipped\")\n        }\n        unzippedFiles.append(zipFile)\n    }\n\n    public func zipContents(_ zipFile: URL) -> Set<URL> {\n        let directory = zipFile.deletingPathExtension()\n        return [\n            directory.appendingPathComponent(\"text.txt\"),\n            directory.appendingPathComponent(\"database.db\"),\n            directory.appendingPathComponent(\"image.png\"),\n        ]\n    }\n\n    // MARK: Private\n\n    private let fileManager: FileSystem\n}\n"
  },
  {
    "path": "Core/Timing/Timer.swift",
    "content": "//\n//  Timer.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/2/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\nimport Locking\n\nopen class Timer {\n    // MARK: Lifecycle\n\n    public init(\n        interval: TimeInterval,\n        repeated: Bool = false,\n        startNow: Bool = false,\n        queue: DispatchQueue = .main,\n        handler: @escaping () -> Void\n    ) {\n        self.repeated = repeated\n\n        timer = DispatchSource.makeTimerSource(flags: DispatchSource.TimerFlags(rawValue: UInt(0)), queue: queue)\n        let dispatchInterval = UInt64(interval * Double(NSEC_PER_SEC))\n        let startTime = DispatchTime.now() + Double(startNow ? 0 : Int64(dispatchInterval)) / Double(NSEC_PER_SEC)\n        timer.schedule(deadline: startTime, repeating: DispatchTimeInterval.seconds(Int(interval)))\n\n        eventHandler = handler\n        timer.setEventHandler { [weak self] in\n            self?.fired()\n        }\n        timer.resume()\n    }\n\n    deinit {\n        timer.setEventHandler {}\n        timer.cancel()\n        // If the timer is suspended, calling cancel without resuming\n        // triggers a crash. This is documented here https://forums.developer.apple.com/thread/15902\n        resume()\n        eventHandler = nil\n    }\n\n    // MARK: Open\n\n    open var isCancelled: Bool {\n        cancelled.value\n    }\n\n    // MARK: Public\n\n    public func cancel() {\n        cancelled.value = true\n        timer.cancel()\n    }\n\n    public func pause() {\n        state.sync { state in\n            guard state == .resumed else {\n                return\n            }\n            state = .paused\n            timer.suspend()\n        }\n    }\n\n    public func resume() {\n        state.sync { state in\n            guard state == .paused else {\n                return\n            }\n            state = .resumed\n            timer.resume()\n        }\n    }\n\n    // MARK: Private\n\n    // MARK: - Pause/Resume\n\n    private enum State {\n        case paused\n        case resumed\n    }\n\n    private let repeated: Bool\n\n    private let timer: DispatchSourceTimer\n\n    private var cancelled = Protected(false)\n\n    private var eventHandler: (() -> Void)?\n\n    private var state = Protected(State.resumed)\n\n    private func fired() {\n        if !cancelled.value {\n            eventHandler?()\n        }\n\n        // cancel next ones if not repeated\n        if !repeated {\n            cancel()\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Extensions/Array+Extension.swift",
    "content": "//\n//  Array+Extension.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-04-29.\n//\n\nextension Array where Element: Hashable {\n    public func removingNeighboringDuplicates() -> [Element] {\n        var uniqueList: [Element] = []\n        for value in self {\n            if value != uniqueList.last {\n                uniqueList.append(value)\n            }\n        }\n        return uniqueList\n    }\n}\n\nextension Array {\n    public func sortedAs<T: Hashable>(_ other: [T], by keyPath: KeyPath<Element, T>) -> [Element] {\n        let indices = [T: Int](\n            uniqueKeysWithValues: other.enumerated().map { ($0.element, $0.offset) })\n        return sorted { (lhs: Element, rhs: Element) in\n            indices[lhs[keyPath: keyPath]]! < indices[rhs[keyPath: keyPath]]!\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Extensions/Error+Extension.swift",
    "content": "//\n//  Error+Extension.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-19.\n//\n\nimport Foundation\n\nextension Error {\n    public var isCancelled: Bool {\n        if self is CancellationError {\n            return true\n        }\n\n        do {\n            throw self\n        } catch URLError.cancelled {\n            return true\n        } catch CocoaError.userCancelled {\n            return true\n        } catch {\n            return false\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Extensions/FileManager+Extension.swift",
    "content": "//\n//  FileManager+Extension.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 10/29/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\n\nextension FileManager {\n    public static let documentsPath: String = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]\n    public static let documentsURL: URL = `default`.urls(for: .documentDirectory, in: .userDomainMask)[0]\n    public static let applicationSupport = `default`.urls(for: .applicationSupportDirectory, in: .userDomainMask)[0]\n\n    public func removeDirectoryContents(at directory: URL) {\n        let files = (try? contentsOfDirectory(atPath: directory.path)) ?? []\n        for fileName in files {\n            let filePath = directory.appendingPathComponent(fileName)\n            try? removeItem(atPath: filePath.path)\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Extensions/Int+Extension.swift",
    "content": "//\n//  Int+Extension.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/23/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nextension Int {\n    // Better in performance more than 50% faster than String(format: \"%03d\", sura)\n    public func as3DigitString() -> String {\n        let v3 = self / 100\n        let m2 = self - v3 * 100\n\n        let v2 = m2 / 10\n        let m1 = m2 - v2 * 10\n\n        return v3.description + v2.description + m1.description\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Extensions/Result+Extension.swift",
    "content": "//\n//  Result+Extension.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-27.\n//\n\nextension Swift.Result where Failure == Error {\n    public init(_ body: () async throws -> Success) async {\n        do {\n            self = .success(try await body())\n        } catch {\n            self = .failure(error)\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Extensions/Sequence+Extension.swift",
    "content": "//\n//  Sequence+Extension.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2/19/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nextension Sequence {\n    public func flatGroup<U: Hashable>(by key: (Iterator.Element) -> U) -> [U: Iterator.Element] {\n        var categories: [U: Iterator.Element] = [:]\n        for element in self {\n            let key = key(element)\n            categories[key] = element\n        }\n        return categories\n    }\n}\n\nextension Sequence where Iterator.Element: Hashable {\n    public func orderedUnique() -> [Iterator.Element] {\n        var buffer: [Iterator.Element] = []\n        var added: Set<Iterator.Element> = []\n        for elem in self {\n            if !added.contains(elem) {\n                buffer.append(elem)\n                added.insert(elem)\n            }\n        }\n        return buffer\n    }\n}\n\nextension Sequence {\n    public func asyncMap<T>(_ transform: @Sendable (Element) async throws -> T) async rethrows -> [T] {\n        var values = [T]()\n        for element in self {\n            try await values.append(transform(element))\n        }\n        return values\n    }\n\n    public func asyncFilter(_ isIncluded: @Sendable (Element) async throws -> Bool) async rethrows -> [Element] {\n        var filtered = [Element]()\n        for element in self {\n            if try await isIncluded(element) {\n                filtered.append(element)\n            }\n        }\n        return filtered\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Extensions/String+Chunking.swift",
    "content": "//\n//  String+Chunking.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-31.\n//\n\nimport Foundation\n\nextension String {\n    public func chunk(maxChunkSize: Int) -> [Substring] {\n        chunkRanges(maxChunkSize: maxChunkSize).map { self[$0] }\n    }\n\n    public func chunkRanges(maxChunkSize: Int) -> [Range<String.Index>] {\n        chunkRanges(range: startIndex ..< endIndex, maxChunkSize: maxChunkSize)\n    }\n\n    public func chunkRanges(range: Range<String.Index>, maxChunkSize: Int) -> [Range<String.Index>] {\n        var chunks: [Range<String.Index>] = []\n        chunkText(self, range: range, maxChunkSize: maxChunkSize, strategy: .paragraph, chunks: &chunks)\n        return chunks\n    }\n}\n\nprivate func chunkText(_ text: String, range: Range<String.Index>, maxChunkSize: Int, strategy: ChunkingStrategy, chunks: inout [Range<String.Index>]) {\n    let blocks = text.split(in: range, on: strategy.enumerationOptions)\n\n    var accumlatedChunkStartIndex = range.lowerBound\n    var accumlatedBlocks = 0\n\n    func addAccumlatedChunk(to upperBound: String.Index, next: String.Index) {\n        if accumlatedBlocks > 0 && accumlatedChunkStartIndex < range.upperBound {\n            chunks.append(accumlatedChunkStartIndex ..< upperBound)\n            accumlatedBlocks = 0\n        }\n        accumlatedChunkStartIndex = next\n    }\n\n    for block in blocks {\n        let blockLength = text.distance(from: block.lowerBound, to: block.upperBound)\n        if blockLength > maxChunkSize {\n            // Add accumlated chunks.\n            addAccumlatedChunk(to: block.lowerBound, next: block.upperBound)\n\n            if let nextStrategy = strategy.nextStrategy() {\n                // Try a finer strategy\n                chunkText(text, range: block, maxChunkSize: maxChunkSize, strategy: nextStrategy, chunks: &chunks)\n            } else {\n                // No finer strategy, add the long block as a separate chunk.\n                chunks.append(block)\n            }\n        } else {\n            // Try to extend current chunk.\n            let extendedCurrentChunkLength = text.distance(from: accumlatedChunkStartIndex, to: block.upperBound)\n\n            if extendedCurrentChunkLength > maxChunkSize {\n                // Add the current chunk and start a new one from the current block.\n                addAccumlatedChunk(to: block.lowerBound, next: block.lowerBound)\n                accumlatedBlocks = 1\n            } else {\n                // Continue to accumlate blocks.\n                accumlatedBlocks += 1\n            }\n        }\n    }\n\n    if accumlatedChunkStartIndex < range.upperBound {\n        addAccumlatedChunk(to: range.upperBound, next: range.upperBound)\n    }\n}\n\nprivate extension String {\n    func split(in range: Range<Index>, on: EnumerationOptions) -> [Range<Index>] {\n        var subranges: [Range<Index>] = []\n\n        enumerateSubstrings(in: range, options: [on, .substringNotRequired]) { _, subrange, _, _ in\n            let modifiedSubrange: Range<Index>\n            if let lastRangeIndex = subranges.indices.last {\n                // Update last range to end at the new subrange.\n                subranges[lastRangeIndex] = subranges[lastRangeIndex].lowerBound ..< subrange.lowerBound\n                modifiedSubrange = subrange\n            } else {\n                modifiedSubrange = range.lowerBound ..< subrange.upperBound\n            }\n            subranges.append(modifiedSubrange)\n        }\n\n        // Check if there's any remaining text after the last subrange\n        if let lastRangeIndex = subranges.indices.last {\n            // Merge any remaining text with the last subrange\n            subranges[lastRangeIndex] = subranges[lastRangeIndex].lowerBound ..< range.upperBound\n        }\n\n        if subranges.isEmpty {\n            subranges.append(range)\n        }\n\n        return subranges\n    }\n}\n\nprivate enum ChunkingStrategy {\n    case paragraph, sentence, word\n\n    // MARK: Internal\n\n    var enumerationOptions: String.EnumerationOptions {\n        switch self {\n        case .paragraph: return .byParagraphs\n        case .sentence: return .bySentences\n        case .word: return .byWords\n        }\n    }\n\n    func nextStrategy() -> ChunkingStrategy? {\n        switch self {\n        case .paragraph: return .sentence\n        case .sentence: return .word\n        case .word: return nil\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Extensions/String+Extension.swift",
    "content": "//\n//  String+Extension.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2/25/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\n\nextension String {\n    public var lastPathComponent: String {\n        (self as NSString).lastPathComponent\n    }\n\n    public var pathExtension: String {\n        (self as NSString).pathExtension\n    }\n\n    public var stringByDeletingLastPathComponent: String {\n        (self as NSString).deletingLastPathComponent\n    }\n\n    public var stringByDeletingPathExtension: String {\n        (self as NSString).deletingPathExtension\n    }\n\n    public var pathComponents: [String] {\n        (self as NSString).pathComponents\n    }\n\n    public func stringByAppendingPath(_ path: String) -> String {\n        (self as NSString).appendingPathComponent(path)\n    }\n\n    public func stringByAppendingExtension(_ pathExtension: String) -> String {\n        (self as NSString).appendingPathExtension(pathExtension) ?? (self + \".\" + pathExtension)\n    }\n\n    public func byteOffsetToStringIndex(_ byteOffset: Int) -> String.Index? {\n        let index = utf8.index(utf8.startIndex, offsetBy: byteOffset)\n        return index.samePosition(in: self)\n    }\n}\n\nextension String {\n    public func ranges(of regex: NSRegularExpression) -> [Range<String.Index>] {\n        let range = NSRange(startIndex ..< endIndex, in: self)\n        let matches = regex.matches(in: self, range: range)\n        return matches.compactMap { Range($0.range, in: self) }\n    }\n\n    public func replacingOccurrences(matchingPattern pattern: String, replacementProvider: (String) -> String?) -> String {\n        let expression = try! NSRegularExpression(pattern: pattern, options: []) // swiftlint:disable:this force_try\n        let matches = expression.matches(in: self, options: [], range: NSRange(startIndex ..< endIndex, in: self))\n        return matches.reversed().reduce(into: self) { current, result in\n            let range = Range(result.range, in: current)!\n            let token = String(current[range])\n            guard let replacement = replacementProvider(token) else { return }\n            current.replaceSubrange(range, with: replacement)\n        }\n    }\n\n    public func replaceMatches(\n        of regex: NSRegularExpression,\n        replace: (Substring, Int) -> String\n    ) -> (String, [Range<String.Index>]) {\n        let ranges = ranges(of: regex)\n        return replacing(sortedRanges: ranges, body: replace)\n    }\n}\n\nextension String {\n    public func replacing(\n        sortedRanges: [Range<String.Index>],\n        body: (Substring, Int) -> String\n    ) -> (String, [Range<String.Index>]) {\n        var newText = self\n        var offsets = [(start: Int, length: Int, offset: Int)]()\n        var replacementIndex = sortedRanges.count - 1\n\n        for matchRange in sortedRanges.reversed() {\n            let match = self[matchRange]\n\n            let replacement = body(match, replacementIndex)\n            newText.replaceSubrange(matchRange, with: replacement)\n\n            let replacementStart = newText.distance(from: newText.startIndex, to: matchRange.lowerBound)\n            offsets.append((\n                start: replacementStart,\n                length: replacement.count,\n                offset: match.count - replacement.count\n            ))\n\n            replacementIndex -= 1\n        }\n\n        var accumlatedOffset = 0\n        let ranges = offsets.reversed().map { data -> Range<String.Index> in\n            let start = newText.index(newText.startIndex, offsetBy: data.start - accumlatedOffset)\n            let end = newText.index(start, offsetBy: data.length)\n            accumlatedOffset += data.offset\n            return start ..< end\n        }\n        return (newText, ranges)\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Extensions/Task+Extension.swift",
    "content": "//\n//  Task+Extension.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-02.\n//\n\nimport Combine\n\npublic final class CancellableTask: Hashable {\n    // MARK: Lifecycle\n\n    init(task: Task<some Any, some Any>) {\n        cancel = { task.cancel() }\n    }\n\n    deinit {\n        cancel()\n    }\n\n    // MARK: Public\n\n    public static func == (lhs: CancellableTask, rhs: CancellableTask) -> Bool {\n        lhs === rhs\n    }\n\n    public func hash(into hasher: inout Hasher) {\n        hasher.combine(ObjectIdentifier(self))\n    }\n\n    // MARK: Private\n\n    private let cancel: () -> Void\n}\n\nextension Set<CancellableTask> {\n    public mutating func task(_ operation: @escaping () async -> Void) {\n        insert(\n            Task {\n                await operation()\n            }.asCancellableTask()\n        )\n    }\n}\n\nextension Task {\n    public func asCancellableTask() -> CancellableTask {\n        CancellableTask(task: self)\n    }\n}\n\nextension AsyncSequence {\n    public func collect() async rethrows -> [Element] {\n        try await reduce(into: [Element]()) { $0.append($1) }\n    }\n}\n\nextension Publisher {\n    public func asyncMap<T>(\n        _ transform: @escaping (Output) async -> T\n    ) -> some Publisher<T, Failure> {\n        map { value in\n            Future { promise in\n                Task {\n                    let output = await transform(value)\n                    promise(.success(output))\n                }\n            }\n        }\n        .switchToLatest()\n        .eraseToAnyPublisher()\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Extensions/URL+Extension.swift",
    "content": "//\n//  URL+Extension.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/7/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\n\nextension URL {\n    public init(validURL: String) {\n        self.init(string: validURL)!\n    }\n\n    public var isReachable: Bool {\n        (try? checkResourceIsReachable()) ?? false\n    }\n\n    public func isParent(of child: URL) -> Bool {\n        child.path.hasPrefix(path)\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Features/Address.swift",
    "content": "//\n//  Address.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-27.\n//\n\nimport Foundation\n\npublic func address(of o: some AnyObject) -> String {\n    let add = unsafeBitCast(o, to: Int.self)\n    return NSString(format: \"%p\", add) as String\n}\n\npublic func nameAndAddress(of o: some AnyObject) -> String {\n    \"<\\(type(of: o)): \\(address(of: o))>\"\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Features/AsyncInitializer.swift",
    "content": "//\n//  AsyncInitializer.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-11-26.\n//\n\npublic struct AsyncInitializer {\n    // MARK: Lifecycle\n\n    public init() {\n        var continuation: AsyncStream<Void>.Continuation!\n        let stream = AsyncStream<Void> { continuation = $0 }\n        self.continuation = continuation\n        self.stream = stream\n    }\n\n    // MARK: Public\n\n    public private(set) var initialized = false\n\n    public mutating func initialize() {\n        initialized = true\n        continuation.finish()\n    }\n\n    public func awaitInitialization() async {\n        if initialized {\n            return\n        }\n        // Wait until the stream finishes\n        for await _ in stream {}\n    }\n\n    // MARK: Private\n\n    private let continuation: AsyncStream<Void>.Continuation\n    private let stream: AsyncStream<Void>\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Features/AsyncPublisher.swift",
    "content": "//\n//  AsyncPublisher.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-28.\n//\n\nimport Combine\n\n// Inspired by: https://github.com/groue/GRDB.swift/blob/0a92a99223c30dc959d4fee13e2806ff4f242473/GRDB/ValueObservation/ValueObservation.swift#L335\n\npublic struct AsyncPublisher<Element>: AsyncSequence {\n    public typealias BufferingPolicy = AsyncStream<Element>.Continuation.BufferingPolicy\n    public typealias AsyncIterator = Iterator\n\n    public struct Iterator: AsyncIteratorProtocol {\n        // MARK: Public\n\n        public mutating func next() async -> Element? {\n            await iterator.next()\n        }\n\n        // MARK: Internal\n\n        var iterator: AsyncStream<Element>.AsyncIterator\n        let cancellable: AnyCancellable\n    }\n\n    // MARK: Public\n\n    public func makeAsyncIterator() -> Iterator {\n        // This cancellable will be retained by the Iterator, which itself will\n        // be retained by the Swift async runtime.\n        //\n        // We must not retain this cancellable in any other way, in order to\n        // cancel the observation when the Swift async runtime releases\n        // the iterator.\n        var cancellable: AnyCancellable?\n        let stream = AsyncStream(Element.self, bufferingPolicy: bufferingPolicy) { continuation in\n\n            cancellable = publisher.sink { completion in\n                continuation.finish()\n            } receiveValue: { [weak cancellable] value in\n                if case .terminated = continuation.yield(value) {\n                    // TODO: I could never see this code running. Is it needed?\n                    cancellable?.cancel()\n                }\n            }\n\n            continuation.onTermination = { @Sendable [weak cancellable] _ in\n                cancellable?.cancel()\n            }\n        }\n\n        let iterator = stream.makeAsyncIterator()\n        if let cancellable {\n            return Iterator(\n                iterator: iterator,\n                cancellable: cancellable\n            )\n        } else {\n            // Bug: there is no point throwing any error.\n            fatalError(\"Expected AsyncStream to have started the observation already\")\n        }\n    }\n\n    // MARK: Internal\n\n    var bufferingPolicy: BufferingPolicy\n    var publisher: AnyPublisher<Element, Never>\n}\n\npublic extension Publisher where Failure == Never {\n    func values(bufferingPolicy: AsyncPublisher<Output>.BufferingPolicy = .unbounded) -> AsyncPublisher<Output> {\n        AsyncPublisher(bufferingPolicy: bufferingPolicy, publisher: eraseToAnyPublisher())\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Features/AsyncThrowingPublisher.swift",
    "content": "//\n//  AsyncThrowingPublisher.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-11.\n//\n\nimport Combine\n\n// Inspired by: https://github.com/groue/GRDB.swift/blob/0a92a99223c30dc959d4fee13e2806ff4f242473/GRDB/ValueObservation/ValueObservation.swift#L335\n\npublic struct AsyncThrowingPublisher<Element>: AsyncSequence {\n    public typealias BufferingPolicy = AsyncThrowingStream<Element, Error>.Continuation.BufferingPolicy\n    public typealias AsyncIterator = Iterator\n\n    public struct Iterator: AsyncIteratorProtocol {\n        // MARK: Public\n\n        public mutating func next() async throws -> Element? {\n            try await iterator.next()\n        }\n\n        // MARK: Internal\n\n        var iterator: AsyncThrowingStream<Element, Error>.AsyncIterator\n        let cancellable: AnyCancellable\n    }\n\n    // MARK: Public\n\n    public func makeAsyncIterator() -> Iterator {\n        // This cancellable will be retained by the Iterator, which itself will\n        // be retained by the Swift async runtime.\n        //\n        // We must not retain this cancellable in any other way, in order to\n        // cancel the observation when the Swift async runtime releases\n        // the iterator.\n        var cancellable: AnyCancellable?\n        let stream = AsyncThrowingStream(Element.self, bufferingPolicy: bufferingPolicy) { continuation in\n\n            cancellable = publisher.sink { completion in\n                switch completion {\n                case .finished:\n                    continuation.finish()\n                case .failure(let error):\n                    continuation.finish(throwing: error)\n                }\n\n            } receiveValue: { [weak cancellable] value in\n                if case .terminated = continuation.yield(value) {\n                    // TODO: I could never see this code running. Is it needed?\n                    cancellable?.cancel()\n                }\n            }\n\n            continuation.onTermination = { @Sendable [weak cancellable] _ in\n                cancellable?.cancel()\n            }\n        }\n\n        let iterator = stream.makeAsyncIterator()\n        if let cancellable {\n            return Iterator(\n                iterator: iterator,\n                cancellable: cancellable\n            )\n        } else {\n            // Bug: there is no point throwing any error.\n            fatalError(\"Expected AsyncThrowingStream to have started the observation already\")\n        }\n    }\n\n    // MARK: Internal\n\n    var bufferingPolicy: BufferingPolicy\n    var publisher: AnyPublisher<Element, Error>\n}\n\npublic extension Publisher {\n    func values(\n        bufferingPolicy: AsyncThrowingPublisher<Output>.BufferingPolicy = .unbounded)\n        -> AsyncThrowingPublisher<Output>\n    {\n        AsyncThrowingPublisher(\n            bufferingPolicy: bufferingPolicy,\n            publisher: mapError { $0 }.eraseToAnyPublisher()\n        )\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Features/Attempt.swift",
    "content": "//\n//  Attempt.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 3/12/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\npublic func attempt<T>(times: UInt, _ body: () throws -> T) throws -> T {\n    precondition(times > 0, \"cannot execute something 0 times\")\n    var lastError: Error?\n    for _ in 0 ..< times {\n        do {\n            return try body()\n        } catch {\n            lastError = error\n        }\n    }\n    throw lastError!\n}\n\npublic func attempt<T>(times: UInt, _ body: () async throws -> T) async throws -> T {\n    precondition(times > 0, \"cannot execute something 0 times\")\n    var lastError: Error?\n    for _ in 0 ..< times {\n        do {\n            return try await body()\n        } catch {\n            lastError = error\n        }\n    }\n    throw lastError!\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Features/Locking.swift",
    "content": "// From: https://github.com/apple/swift-async-algorithms/blob/e6b21d2a6d6cf8c886a97fba489563fd885937d4/Sources/AsyncAlgorithms/Locking.swift\n\n//===----------------------------------------------------------------------===//\n//\n// This source file is part of the Swift Async Algorithms open source project\n//\n// Copyright (c) 2022 Apple Inc. and the Swift project authors\n// Licensed under Apache License v2.0 with Runtime Library Exception\n//\n// See https://swift.org/LICENSE.txt for license information\n//\n//===----------------------------------------------------------------------===//\n\n#if canImport(Darwin)\n    import Darwin\n#elseif canImport(Glibc)\n    import Glibc\n#elseif canImport(WinSDK)\n    import WinSDK\n#endif\n\nstruct Lock {\n    #if canImport(Darwin)\n        typealias Primitive = os_unfair_lock\n    #elseif canImport(Glibc)\n        typealias Primitive = pthread_mutex_t\n    #elseif canImport(WinSDK)\n        typealias Primitive = SRWLOCK\n    #endif\n\n    typealias PlatformLock = UnsafeMutablePointer<Primitive>\n\n    // MARK: Lifecycle\n\n    private init(_ platformLock: PlatformLock) {\n        self.platformLock = platformLock\n    }\n\n    // MARK: Internal\n\n    let platformLock: PlatformLock\n\n    static func allocate() -> Lock {\n        let platformLock = PlatformLock.allocate(capacity: 1)\n        initialize(platformLock)\n        return Lock(platformLock)\n    }\n\n    func deinitialize() {\n        Lock.deinitialize(platformLock)\n    }\n\n    func lock() {\n        Lock.lock(platformLock)\n    }\n\n    func unlock() {\n        Lock.unlock(platformLock)\n    }\n\n    /// Acquire the lock for the duration of the given block.\n    ///\n    /// This convenience method should be preferred to `lock` and `unlock` in\n    /// most situations, as it ensures that the lock will be released regardless\n    /// of how `body` exits.\n    ///\n    /// - Parameter body: The block to execute while holding the lock.\n    /// - Returns: The value returned by the block.\n    func withLock<T>(_ body: () throws -> T) rethrows -> T {\n        lock()\n        defer {\n            self.unlock()\n        }\n        return try body()\n    }\n\n    // specialise Void return (for performance)\n    func withLockVoid(_ body: () throws -> Void) rethrows {\n        try withLock(body)\n    }\n\n    // MARK: Fileprivate\n\n    fileprivate static func initialize(_ platformLock: PlatformLock) {\n        #if canImport(Darwin)\n            platformLock.initialize(to: os_unfair_lock())\n        #elseif canImport(Glibc)\n            let result = pthread_mutex_init(platformLock, nil)\n            precondition(result == 0, \"pthread_mutex_init failed\")\n        #elseif canImport(WinSDK)\n            InitializeSRWLock(platformLock)\n        #endif\n    }\n\n    fileprivate static func deinitialize(_ platformLock: PlatformLock) {\n        #if canImport(Glibc)\n            let result = pthread_mutex_destroy(platformLock)\n            precondition(result == 0, \"pthread_mutex_destroy failed\")\n        #endif\n        platformLock.deinitialize(count: 1)\n    }\n\n    fileprivate static func lock(_ platformLock: PlatformLock) {\n        #if canImport(Darwin)\n            os_unfair_lock_lock(platformLock)\n        #elseif canImport(Glibc)\n            pthread_mutex_lock(platformLock)\n        #elseif canImport(WinSDK)\n            AcquireSRWLockExclusive(platformLock)\n        #endif\n    }\n\n    fileprivate static func unlock(_ platformLock: PlatformLock) {\n        #if canImport(Darwin)\n            os_unfair_lock_unlock(platformLock)\n        #elseif canImport(Glibc)\n            let result = pthread_mutex_unlock(platformLock)\n            precondition(result == 0, \"pthread_mutex_unlock failed\")\n        #elseif canImport(WinSDK)\n            ReleaseSRWLockExclusive(platformLock)\n        #endif\n    }\n}\n\npublic struct ManagedCriticalState<State> {\n    // MARK: Lifecycle\n\n    public init(_ initial: State) {\n        buffer = LockedBuffer.create(minimumCapacity: 1) { buffer in\n            buffer.withUnsafeMutablePointerToElements { Lock.initialize($0) }\n            return initial\n        }\n    }\n\n    // MARK: Public\n\n    public func withCriticalRegion<R>(_ critical: (inout State) throws -> R) rethrows -> R {\n        try buffer.withUnsafeMutablePointers { header, lock in\n            Lock.lock(lock)\n            defer { Lock.unlock(lock) }\n            return try critical(&header.pointee)\n        }\n    }\n\n    // MARK: Private\n\n    private final class LockedBuffer: ManagedBuffer<State, Lock.Primitive> {\n        deinit {\n            withUnsafeMutablePointerToElements { Lock.deinitialize($0) }\n        }\n    }\n\n    private let buffer: ManagedBuffer<State, Lock.Primitive>\n}\n\nextension ManagedCriticalState: @unchecked Sendable where State: Sendable { }\n"
  },
  {
    "path": "Core/Utilities/Sources/Features/MultiPredicateComparer.swift",
    "content": "//\n//  MultiPredicateComparer.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-09.\n//\n\npublic struct MultiPredicateComparer<T> {\n    public typealias Predicate = (T, T) -> Bool\n\n    // MARK: Lifecycle\n\n    public init(increasingOrderPredicates: [Predicate]) {\n        self.increasingOrderPredicates = increasingOrderPredicates\n    }\n\n    // MARK: Public\n\n    public func areInIncreasingOrder(lhs: T, rhs: T) -> Bool {\n        for predicate in increasingOrderPredicates {\n            if predicate(lhs, rhs) != predicate(rhs, lhs) {\n                return predicate(lhs, rhs)\n            }\n        }\n        return false\n    }\n\n    // MARK: Private\n\n    private let increasingOrderPredicates: [Predicate]\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Features/MulticastContinuation.swift",
    "content": "//\n//  MulticastContinuation.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-04-30.\n//\n\npublic struct MulticastContinuation<T, E: Error>: Sendable {\n    private struct State {\n        var continuations: [CheckedContinuation<T, E>] = []\n        var result: Result<T, E>?\n    }\n\n    // MARK: Lifecycle\n\n    public init() { }\n\n    // MARK: Public\n\n    public var isPending: Bool {\n        state.withCriticalRegion { state in\n            state.result == nil\n        }\n    }\n\n    public func addContinuation(_ continuation: CheckedContinuation<T, E>) {\n        state.withCriticalRegion { state in\n            if let result = state.result {\n                continuation.resume(with: result)\n            } else {\n                state.continuations.append(continuation)\n            }\n        }\n    }\n\n    public func resume(with result: Result<T, E>) {\n        state.withCriticalRegion { state in\n            state.result = result\n            for continuation in state.continuations {\n                continuation.resume(with: result)\n            }\n            state.continuations.removeAll()\n        }\n    }\n\n    public func resume(returning value: T) {\n        resume(with: .success(value))\n    }\n\n    public func resume(throwing error: E) {\n        resume(with: .failure(error))\n    }\n\n    // MARK: Private\n\n    private let state = ManagedCriticalState(State())\n}\n"
  },
  {
    "path": "Core/Utilities/Sources/Features/Pair.swift",
    "content": "//\n//  Pair.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-02-02.\n//\n\npublic struct Pair<First, Second> {\n    public var first: First\n    public var second: Second\n\n    public init(_ first: First, _ second: Second) {\n        self.first = first\n        self.second = second\n    }\n}\n\nextension Pair: Equatable where First: Equatable, Second: Equatable { }\nextension Pair: Hashable where First: Hashable, Second: Hashable { }\n"
  },
  {
    "path": "Core/Utilities/Sources/Features/RelativeFilePath.swift",
    "content": "//\n//  RelativeFilePath.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-09.\n//\n\nimport Foundation\n\npublic struct RelativeFilePath: Hashable, Sendable {\n    // MARK: Lifecycle\n\n    public init(_ path: String, isDirectory: Bool) {\n        self.path = path\n        self.isDirectory = isDirectory\n    }\n\n    // MARK: Public\n\n    public let path: String\n\n    public var url: URL { FileManager.documentsURL.appendingPathComponent(path, isDirectory: isDirectory) }\n\n    // MARK: Private\n\n    private let isDirectory: Bool\n}\n\npublic extension RelativeFilePath {\n    var isReachable: Bool { url.isReachable }\n\n    func isParent(of child: RelativeFilePath) -> Bool {\n        child.path.hasPrefix(path)\n    }\n\n    var lastPathComponent: String { url.lastPathComponent }\n\n    func appendingPathComponent(_ pathComponent: String, isDirectory: Bool) -> RelativeFilePath {\n        RelativeFilePath(path.stringByAppendingPath(pathComponent), isDirectory: isDirectory)\n    }\n\n    func appendingPathExtension(_ pathExtension: String) -> RelativeFilePath {\n        RelativeFilePath(path.appending(\".\" + pathExtension), isDirectory: false)\n    }\n\n    func deletingLastPathComponent() -> RelativeFilePath {\n        RelativeFilePath(path.stringByDeletingLastPathComponent, isDirectory: true)\n    }\n\n    func deletingPathExtension() -> RelativeFilePath {\n        RelativeFilePath(path.stringByDeletingPathExtension, isDirectory: true)\n    }\n}\n\npublic extension FileManager {\n    func removeItem(at path: RelativeFilePath) throws {\n        try removeItem(at: path.url)\n    }\n\n    func copyItem(at src: URL, to dst: RelativeFilePath) throws {\n        try copyItem(at: src, to: dst.url)\n    }\n}\n\npublic extension Data {\n    init(contentsOf path: RelativeFilePath, options: Data.ReadingOptions = []) throws {\n        try self.init(contentsOf: path.url, options: options)\n    }\n\n    func write(to path: RelativeFilePath, options: Data.WritingOptions = []) throws {\n        try write(to: path.url, options: options)\n    }\n}\n\npublic extension String {\n    init(contentsOf path: RelativeFilePath) throws {\n        try self.init(contentsOf: path.url)\n    }\n\n    func write(to path: RelativeFilePath, atomically: Bool, encoding: String.Encoding) throws {\n        try write(to: path.url, atomically: atomically, encoding: encoding)\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Tests/AsyncPublisherTests.swift",
    "content": "//\n//  AsyncPublisherTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-28.\n//\n\nimport AsyncAlgorithms\nimport AsyncUtilitiesForTesting\nimport Combine\nimport Utilities\nimport XCTest\n\nclass AsyncPublisherTests: XCTestCase {\n    actor Values {\n        var results: [Int] = []\n\n        func append(_ number: Int) {\n            results.append(number)\n        }\n    }\n\n    let numbers = [1, 2, 3]\n    var subject: PassthroughSubject<Int, Never>!\n    var channel: AsyncChannel<Void>!\n    var values: Values!\n\n    override func setUp() {\n        subject = PassthroughSubject()\n        channel = AsyncChannel()\n        values = Values()\n    }\n\n    func test_passThroughSubject_subjectCancellation() async {\n        let prefix = 2\n        let asyncPublisher = subject.values(bufferingPolicy: .unbounded)\n\n        Task {\n            for await number in asyncPublisher {\n                await values.append(number)\n                if await values.results.count == prefix {\n                    break\n                }\n            }\n            await channel.send(())\n        }\n\n        // Wait until loop starts.\n        await Task.megaYield()\n\n        for number in numbers {\n            subject.send(number)\n        }\n\n        // Wait until the break\n        await channel.next()\n\n        await AsyncAssertEqual(await values.results, Array(numbers.prefix(2)))\n    }\n\n    func test_passThroughSubject_taskCancellation() async {\n        let asyncPublisher = subject.values(bufferingPolicy: .unbounded)\n\n        let task = Task {\n            for await number in asyncPublisher {\n                await values.append(number)\n            }\n            await values.append(1945)\n        }\n\n        // Wait until loop starts.\n        await Task.megaYield()\n\n        for number in numbers {\n            subject.send(number)\n            await Task.megaYield()\n        }\n\n        // Cancel the task.\n        task.cancel()\n        // Wait for cancellation to happen.\n        await Task.megaYield()\n\n        await AsyncAssertEqual(await values.results, numbers + [1945])\n    }\n\n    func test_unbounded() async {\n        let numbersPublisher = numbers.publisher\n        let asyncPublisher = numbersPublisher.values(bufferingPolicy: .unbounded)\n\n        var results = [Int]()\n        for await number in asyncPublisher {\n            results.append(number)\n        }\n\n        XCTAssertEqual(results, [1, 2, 3])\n    }\n\n    func test_bufferingNewest() async {\n        let numbersPublisher = numbers.publisher\n        let asyncPublisher = numbersPublisher.values(bufferingPolicy: .bufferingNewest(2))\n\n        var results = [Int]()\n        for await number in asyncPublisher {\n            results.append(number)\n        }\n\n        // Only the last 2 values should be preserved\n        XCTAssertEqual(results, [2, 3])\n    }\n\n    func test_bufferingOldest() async {\n        let numbersPublisher = numbers.publisher\n        let asyncPublisher = numbersPublisher.values(bufferingPolicy: .bufferingOldest(2))\n\n        var results = [Int]()\n        for await number in asyncPublisher {\n            results.append(number)\n        }\n\n        // Only the first 2 values should be preserved\n        XCTAssertEqual(results, [1, 2])\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Tests/AsyncThrowingPublisherTests.swift",
    "content": "//\n//  AsyncThrowingPublisherTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-11.\n//\n\nimport AsyncAlgorithms\nimport AsyncUtilitiesForTesting\nimport Combine\nimport Utilities\nimport XCTest\n\nclass AsyncThrowingPublisherTests: XCTestCase {\n    enum PublishingError: Error {\n        case invalid\n    }\n\n    actor Values {\n        var error: Error?\n        var results: [Int] = []\n\n        func setError(_ error: Error) {\n            self.error = error\n        }\n\n        func append(_ number: Int) {\n            results.append(number)\n        }\n    }\n\n    let numbers = [1, 2, 3]\n    let numbersPublisher = [1, 2, 3].publisher.setFailureType(to: PublishingError.self)\n    var subject: PassthroughSubject<Int, PublishingError>!\n    var channel: AsyncChannel<Void>!\n    var values: Values!\n\n    override func setUp() {\n        subject = PassthroughSubject()\n        channel = AsyncChannel()\n        values = Values()\n    }\n\n    func test_passThroughSubject_failure() async throws {\n        let asyncPublisher = subject.values()\n\n        Task {\n            do {\n                for try await number in asyncPublisher {\n                    await values.append(number)\n                }\n            } catch {\n                await values.setError(error)\n            }\n            await channel.send(())\n        }\n\n        // Wait until loop starts.\n        await Task.megaYield()\n\n        // Send failure\n        subject.send(completion: .failure(.invalid))\n\n        // Wait until the task completes.\n        await channel.next()\n\n        await AsyncAssertEqual(await values.error as? PublishingError, PublishingError.invalid)\n    }\n\n    func test_passThroughSubject_subjectCancellation() async throws {\n        let prefix = 2\n        let asyncPublisher = subject.values(bufferingPolicy: .unbounded)\n\n        Task {\n            for try await number in asyncPublisher {\n                await values.append(number)\n                if await values.results.count == prefix {\n                    break\n                }\n            }\n            await channel.send(())\n        }\n\n        // Wait until loop starts.\n        await Task.megaYield()\n\n        for number in numbers {\n            subject.send(number)\n        }\n\n        // Wait until the break\n        await channel.next()\n\n        await AsyncAssertEqual(await values.results, Array(numbers.prefix(2)))\n    }\n\n    func test_passThroughSubject_taskCancellation() async throws {\n        let asyncPublisher = subject.values(bufferingPolicy: .unbounded)\n\n        let task = Task {\n            for try await number in asyncPublisher {\n                await values.append(number)\n            }\n            await values.append(1945)\n        }\n\n        // Wait until loop starts.\n        await Task.megaYield()\n\n        for number in numbers {\n            subject.send(number)\n            await Task.megaYield()\n        }\n\n        // Cancel the task.\n        task.cancel()\n        // Wait for cancellation to happen.\n        await Task.megaYield()\n\n        await AsyncAssertEqual(await values.results, numbers + [1945])\n    }\n\n    func test_unbounded() async throws {\n        let asyncPublisher = numbersPublisher.values(bufferingPolicy: .unbounded)\n\n        var results = [Int]()\n        for try await number in asyncPublisher {\n            results.append(number)\n        }\n\n        XCTAssertEqual(results, [1, 2, 3])\n    }\n\n    func test_bufferingNewest() async throws {\n        let asyncPublisher = numbersPublisher.values(bufferingPolicy: .bufferingNewest(2))\n\n        var results = [Int]()\n        for try await number in asyncPublisher {\n            results.append(number)\n        }\n\n        // Only the last 2 values should be preserved\n        XCTAssertEqual(results, [2, 3])\n    }\n\n    func test_bufferingOldest() async throws {\n        let asyncPublisher = numbersPublisher.values(bufferingPolicy: .bufferingOldest(2))\n\n        var results = [Int]()\n        for try await number in asyncPublisher {\n            results.append(number)\n        }\n\n        // Only the first 2 values should be preserved\n        XCTAssertEqual(results, [1, 2])\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Tests/String+ChunkingTests.swift",
    "content": "//\n//  String+ChunkingTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-31.\n//\n\nimport Utilities\nimport XCTest\n\nclass StringChunkingTests: XCTestCase {\n    func test_shortText() {\n        let text = \"Short text.\"\n        let chunks = text.chunkIntoStrings(maxChunkSize: 50)\n        XCTAssertEqual(chunks, [text])\n        XCTAssertEqual(chunks.joined(separator: \"\"), text)\n    }\n\n    func test_longParagraph_manySmallSentences() {\n        let text = String(repeating: \"A long paragraph. \", count: 1000)\n        let chunks = text.chunkIntoStrings(maxChunkSize: 1500)\n        XCTAssertTrue(chunks.allSatisfy { $0.count <= 1500 })\n        XCTAssertEqual(chunks.joined(separator: \"\"), text)\n    }\n\n    func test_longSentence_manySmallWords() {\n        let text = String(repeating: \"Morning \", count: 1500)\n        let chunks = text.chunkIntoStrings(maxChunkSize: 1500)\n        XCTAssertTrue(chunks.allSatisfy { $0.count <= 1500 })\n        XCTAssertEqual(chunks.joined(separator: \"\"), text)\n    }\n\n    func test_separateParagraphs() {\n        let paragraphs = [\n            \"First paragraph.\",\n            \"Second paragraph.\",\n            \"Third paragraph.\",\n        ]\n        let expectedChunks = [\n            \"First paragraph.\\n\",\n            \"Second paragraph.\\n\",\n            \"Third paragraph.\",\n        ]\n\n        let text = paragraphs.joined(separator: \"\\n\")\n        let maxChunkSize = (paragraphs.map(\\.count).max() ?? 1) + 1\n        let chunks = text.chunkIntoStrings(maxChunkSize: maxChunkSize)\n\n        XCTAssertEqual(chunks, expectedChunks)\n        XCTAssertEqual(chunks.joined(separator: \"\"), text)\n    }\n\n    func test_longParagraphs_singleSentence() {\n        let paragraphs = [\n            \"First paragraph.\",\n            \"Second paragraph.\",\n            \"Third paragraph.\",\n        ]\n        let expectedChunks = [\n            \"First \", \"paragraph.\\n\",\n            \"Second \", \"paragraph.\\n\",\n            \"Third \", \"paragraph.\",\n        ]\n        let text = paragraphs.joined(separator: \"\\n\")\n        let chunks = text.chunkIntoStrings(maxChunkSize: 1)\n\n        XCTAssertEqual(chunks, expectedChunks)\n        XCTAssertEqual(chunks.joined(separator: \"\"), text)\n    }\n\n    func test_longFirstParagraph_singleSentence() {\n        let paragraphs = [\n            \"Long first paragraph.\",\n            \"Abbreviations.\",\n            \"Small.\",\n        ]\n        let expectedChunks = [\n            \"Long first \", \"paragraph.\\n\",\n            \"Abbreviations.\\n\",\n            \"Small.\",\n        ]\n        let text = paragraphs.joined(separator: \"\\n\")\n        let maxChunkSize = \"Long first \".count\n        let chunks = text.chunkIntoStrings(maxChunkSize: maxChunkSize)\n\n        XCTAssertEqual(chunks, expectedChunks)\n        XCTAssertEqual(chunks.joined(separator: \"\"), text)\n    }\n\n    func test_longMiddlParagraph_singleSentence() {\n        let paragraphs = [\n            \"Abbreviations.\",\n            \"Long first paragraph.\",\n            \"Small.\",\n        ]\n        let expectedChunks = [\n            \"Abbreviations.\\n\",\n            \"Long first \", \"paragraph.\\n\",\n            \"Small.\",\n        ]\n        let text = paragraphs.joined(separator: \"\\n\")\n        let maxChunkSize = \"Long first \".count\n        let chunks = text.chunkIntoStrings(maxChunkSize: maxChunkSize)\n\n        XCTAssertEqual(chunks, expectedChunks)\n        XCTAssertEqual(chunks.joined(separator: \"\"), text)\n    }\n\n    func test_longLastParagraph_singleSentence() {\n        let paragraphs = [\n            \"Long first paragraph.\",\n            \"Abbreviations.\",\n            \"Small.\",\n        ]\n        let expectedChunks = [\n            \"Long first \", \"paragraph. \",\n            \"Abbreviations. \",\n            \"Small.\",\n        ]\n        let text = paragraphs.joined(separator: \" \")\n        let maxChunkSize = \"Long first \".count\n        let chunks = text.chunkIntoStrings(maxChunkSize: maxChunkSize)\n\n        XCTAssertEqual(chunks, expectedChunks)\n        XCTAssertEqual(chunks.joined(separator: \"\"), text)\n    }\n\n    func test_emptyParagraphs() {\n        let paragraphs = [\n            \"\",\n            \"Word.\",\n            \"\",\n            \" \",\n            \"Something.\",\n            \"\",\n        ]\n        let expectedChunks = [\n            \"\\n\",\n            \"Word.\\n\",\n            \"\\n\",\n            \" \\n\",\n            \"Something.\\n\",\n        ]\n        let text = paragraphs.joined(separator: \"\\n\")\n        let chunks = text.chunkIntoStrings(maxChunkSize: 1)\n\n        XCTAssertEqual(chunks, expectedChunks)\n        XCTAssertEqual(chunks.joined(separator: \"\"), text)\n    }\n\n    func test_longFirstSentence() {\n        let text = \"Abbreviations. Long first paragraph. Small.\"\n        let expectedChunks = [\n            \"Abbreviations. \",\n            \"Long first \", \"paragraph. \",\n            \"Small.\",\n        ]\n        let maxChunkSize = \"Long first \".count\n        let chunks = text.chunkIntoStrings(maxChunkSize: maxChunkSize)\n\n        XCTAssertEqual(chunks, expectedChunks)\n        XCTAssertEqual(chunks.joined(separator: \"\"), text)\n    }\n\n    func test_emptySentences() {\n        let text = \". Word. .   . Something. ..\"\n        let expectedChunks = [\n            \". \",\n            \"Word. .   . \",\n            \"Something. ..\",\n        ]\n        let chunks = text.chunkIntoStrings(maxChunkSize: 1)\n\n        XCTAssertEqual(chunks, expectedChunks)\n        XCTAssertEqual(chunks.joined(separator: \"\"), text)\n    }\n\n    func test_longWord_noChunking() {\n        let text = String(repeating: \"a\", count: 1600)\n        let chunks = text.chunkIntoStrings(maxChunkSize: 1500)\n        XCTAssertEqual(chunks, [text])\n        XCTAssertEqual(chunks.joined(separator: \"\"), text)\n    }\n\n    func test_exactChunkSize() {\n        let charCount = 5\n        let wordsCount = 1000\n        let chunkSize = charCount * wordsCount\n        let word = String(repeating: \"a\", count: charCount - 1) + \" \"\n        let text = String(repeating: word, count: wordsCount)\n        let chunks = text.chunkIntoStrings(maxChunkSize: chunkSize)\n        XCTAssertTrue(chunks.allSatisfy { $0.count == chunkSize })\n        XCTAssertEqual(chunks.joined(separator: \"\"), text)\n    }\n}\n\nprivate extension String {\n    func chunkIntoStrings(maxChunkSize: Int) -> [String] {\n        chunk(maxChunkSize: maxChunkSize).map { String($0) }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Tests/String+ExtensionTests.swift",
    "content": "//\n//  String+ExtensionTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-01.\n//\n\nimport Foundation\nimport Utilities\nimport XCTest\n\nclass StringExtensionTests: XCTestCase {\n    let regex = try! NSRegularExpression(pattern: #\"\\{\\{.*?\\}\\}\"#)\n\n    var incrementReplace: (Substring, Int) -> String {\n        { _, index in \"(\\(index + 1))\" }\n    }\n\n    func test_replaceMatches_english() {\n        let text = \"Hello world{{some reference}}! Good morning{{another reference}}{{reference}}\"\n        let (modifiedText, ranges) = text.replaceMatches(of: regex, replace: incrementReplace)\n\n        let expectedText = \"Hello world(1)! Good morning(2)(3)\"\n        XCTAssertEqual(modifiedText, expectedText)\n        assertRanges(text: modifiedText, ranges: ranges, values: [\"(1)\", \"(2)\", \"(3)\"])\n    }\n\n    func test_replaceMatches_emojis() {\n        let text = \"Hello world{{some reference}}! ✔️ Good morning{{another reference}}{{reference}}\"\n        let (modifiedText, ranges) = text.replaceMatches(of: regex, replace: incrementReplace)\n\n        let expectedText = \"Hello world(1)! ✔️ Good morning(2)(3)\"\n        XCTAssertEqual(modifiedText, expectedText)\n        assertRanges(text: modifiedText, ranges: ranges, values: [\"(1)\", \"(2)\", \"(3)\"])\n    }\n\n    func test_replaceMatches_noMatches() {\n        let text = \"Hello world!\"\n        let (modifiedText, ranges) = text.replaceMatches(of: regex, replace: incrementReplace)\n\n        let expectedText = \"Hello world!\"\n        XCTAssertEqual(modifiedText, expectedText)\n        XCTAssertEqual(ranges.count, 0)\n    }\n\n    func test_replaceMatches_emojiInMatch() {\n        let text = \"{{a🛑🛑}}Hello {{🛑b🛑}}world!{{🛑🛑c🛑}}\"\n        let (modifiedText, ranges) = text.replaceMatches(of: regex, replace: incrementReplace)\n\n        let expectedText = \"(1)Hello (2)world!(3)\"\n        XCTAssertEqual(modifiedText, expectedText)\n        assertRanges(text: modifiedText, ranges: ranges, values: [\"(1)\", \"(2)\", \"(3)\"])\n    }\n\n    func test_replaceMatches_onlyMatches() {\n        let text = \"{{a🛑🛑}}\"\n        let (modifiedText, ranges) = text.replaceMatches(of: regex, replace: incrementReplace)\n\n        let expectedText = \"(1)\"\n        XCTAssertEqual(modifiedText, expectedText)\n        assertRanges(text: modifiedText, ranges: ranges, values: [\"(1)\"])\n    }\n\n    func assertRanges(text: String, ranges: [Range<String.Index>], values: [String], file: StaticString = #file, line: UInt = #line) {\n        XCTAssertEqual(ranges.map { String(text[$0]) }, values, file: file, line: line)\n    }\n}\n"
  },
  {
    "path": "Core/VLogging/Logger.swift",
    "content": "//\n//  Logger.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-28.\n//\n\nimport Logging\n\npublic let logger = Logger(label: \"quran-ios\")\n"
  },
  {
    "path": "Core/WeakSet/UnsafeWeakSet.swift",
    "content": "//\n//  UnsafeWeakSet.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-31.\n//\n\nimport Foundation\n\nopen class UnsafeWeakSet<Element>: Sequence {\n    public typealias Iterator = AnyIterator<Element>\n\n    // MARK: Lifecycle\n\n    public init() {}\n\n    // MARK: Open\n\n    open var count: Int { storage.count }\n\n    open func insert(_ object: Element) {\n        storage.add(object as AnyObject)\n    }\n\n    open func remove(_ object: Element) {\n        storage.remove(object as AnyObject)\n    }\n\n    open func removeAllObjects() {\n        storage.removeAllObjects()\n    }\n\n    open func contains(_ object: Element) -> Bool {\n        storage.contains(object as AnyObject)\n    }\n\n    open func makeIterator() -> Iterator {\n        var arrayIterator = storage.allObjects.makeIterator()\n        return AnyIterator {\n            arrayIterator.next() as? Element\n        }\n    }\n\n    // MARK: Private\n\n    private var storage = NSHashTable<AnyObject>.weakObjects()\n}\n"
  },
  {
    "path": "Core/WeakSet/WeakSet.swift",
    "content": "//\n//  WeakSet.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-31.\n//\n\nimport Foundation\nimport Locking\n\n/// Thread safe set holding weak references to its elements.\n///\n/// While the `Element` can be any type including structs, enums. It only works with classes\n/// This is because if we constrained `Element` to be `AnyObject`, we have to include a type-erasure for every protocol.\n/// For example:\n///\n///     protocol Delegate: class {\n///     }\n///\n///     // with WeakSet<Element>\n///     // we can have\n///     let delegates = WeakSet<Delegate>()\n///\n///     // with WeakSet<Element: AnyObject>\n///     // we get the error, Using 'Delegate' as a concrete type conforming to protocol 'AnyObject' is not supported.\n///     let delegates = WeakSet<Delegate>()\nopen class WeakSet<Element>: Sequence {\n    public typealias Iterator = AnyIterator<Element>\n\n    // MARK: Lifecycle\n\n    public init() {}\n\n    // MARK: Open\n\n    open var count: Int { storage.value.count }\n\n    open func insert(_ object: Element) {\n        storage.sync { (s: inout NSHashTable<AnyObject>) in\n            s.add(object as AnyObject)\n        }\n    }\n\n    open func remove(_ object: Element) {\n        storage.sync { (s: inout NSHashTable<AnyObject>) in\n            s.remove(object as AnyObject)\n        }\n    }\n\n    open func removeAllObjects() {\n        storage.sync { (s: inout NSHashTable<AnyObject>) in\n            s.removeAllObjects()\n        }\n    }\n\n    open func contains(_ object: Element) -> Bool {\n        storage.sync { (s: inout NSHashTable<AnyObject>) in\n            s.contains(object as AnyObject)\n        }\n    }\n\n    open func makeIterator() -> Iterator {\n        storage.sync { (s: inout NSHashTable<AnyObject>) in\n            var arrayIterator = s.allObjects.makeIterator()\n            return AnyIterator {\n                arrayIterator.next() as? Element\n            }\n        }\n    }\n\n    // MARK: Private\n\n    private var storage = Protected<NSHashTable<AnyObject>>(.weakObjects())\n}\n"
  },
  {
    "path": "Data/AudioTimingPersistence/AyahTimingPersistence.swift",
    "content": "//\n//  AyahTimingPersistence.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/20/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport QuranAudio\nimport QuranKit\n\npublic protocol AyahTimingPersistence {\n    func getVersion() async throws -> Int\n    func getOrderedTimingForSura(startAyah: AyahNumber) async throws -> SuraTiming\n}\n"
  },
  {
    "path": "Data/AudioTimingPersistence/GRDBAyahTimingPersistence.swift",
    "content": "//\n//  GRDBAyahTimingPersistence.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-22.\n//\n\nimport Foundation\nimport GRDB\nimport QuranAudio\nimport QuranKit\nimport SQLitePersistence\n\npublic struct GRDBAyahTimingPersistence: AyahTimingPersistence {\n    // MARK: Lifecycle\n\n    init(db: DatabaseConnection) {\n        self.db = db\n    }\n\n    public init(fileURL: URL) {\n        self.init(db: DatabaseConnection(url: fileURL))\n    }\n\n    // MARK: Public\n\n    public func getVersion() async throws -> Int {\n        try await db.read { db in\n            let property = try GRDBProperty\n                .filter(GRDBProperty.Columns.property == \"version\")\n                .fetchOne(db)\n            let version = property.flatMap { Int($0.value) }\n            return version ?? 1\n        }\n    }\n\n    public func getOrderedTimingForSura(startAyah: QuranKit.AyahNumber) async throws -> SuraTiming {\n        try await db.read { db in\n            let query = GRDBTiming.filter(GRDBTiming.Columns.sura == startAyah.sura.suraNumber\n                && GRDBTiming.Columns.ayah >= startAyah.ayah)\n                .order(GRDBTiming.Columns.ayah)\n            var timings: [AyahTiming] = []\n            var endTime: Timing?\n            let rows = try query.fetchAll(db)\n            for row in rows {\n                let ayah = row.ayah\n                let time = Timing(time: row.time)\n                if ayah == 999 {\n                    endTime = time\n                } else {\n                    let verse = AyahNumber(quran: startAyah.quran, sura: row.sura, ayah: ayah)!\n                    let timing = AyahTiming(ayah: verse, time: time)\n                    timings.append(timing)\n                }\n            }\n            return SuraTiming(verses: timings, endTime: endTime)\n        }\n    }\n\n    // MARK: Internal\n\n    let db: DatabaseConnection\n}\n\nprivate struct GRDBTiming: Decodable, FetchableRecord, TableRecord {\n    enum Columns {\n        static let sura = Column(CodingKeys.sura)\n        static let ayah = Column(CodingKeys.ayah)\n        static let time = Column(CodingKeys.time)\n    }\n\n    static var databaseTableName: String {\n        \"timings\"\n    }\n\n    var sura: Int\n    var ayah: Int\n    var time: Int\n}\n\nprivate struct GRDBProperty: Decodable, FetchableRecord, TableRecord {\n    enum Columns {\n        static let property = Column(CodingKeys.property)\n        static let value = Column(CodingKeys.value)\n    }\n\n    static var databaseTableName: String {\n        \"properties\"\n    }\n\n    var property: String\n    var value: String\n}\n"
  },
  {
    "path": "Data/AuthenticationClient/Sources/AuthenticationClient.swift",
    "content": "//\n//  AuthenticationClient.swift\n//  QuranEngine\n//\n//  Created by Mohannad Hassan on 19/12/2024.\n//\n\nimport Foundation\nimport MobileSync\nimport UIKit\n\npublic enum AuthenticationClientError: Error {\n    case errorAuthenticating(Error?)\n\n    /// Thrown when an operation, that needs authentication, is attempted while the client\n    /// hasn't been authenticated or if the client's access has been revoked.\n    case clientIsNotAuthenticated(Error?)\n}\n\npublic enum AuthenticationState: Equatable {\n    /// No user is currently authenticated, or access has been revoked or is expired.\n    /// Logging in is availble and is required for further APIs.\n    case notAuthenticated\n\n    case authenticated\n}\n\npublic struct AuthenticationClientConfiguration {\n    public let clientID: String\n    public let clientSecret: String\n    public let redirectURL: URL\n    /// Indicates the Quran.com specific scopes to be requested by the app.\n    /// The client requests the `offline` and `openid` scopes by default.\n    public let scopes: [String]\n    /// Quran.com relies on dicovering the service configuration from the issuer,\n    /// and not using a static configuration.\n    public let authorizationIssuerURL: URL\n\n    public init(clientID: String, clientSecret: String, redirectURL: URL, scopes: [String], authorizationIssuerURL: URL) {\n        self.clientID = clientID\n        self.clientSecret = clientSecret\n        self.redirectURL = redirectURL\n        self.scopes = scopes\n        self.authorizationIssuerURL = authorizationIssuerURL\n    }\n}\n\n/// Handles the OAuth flow to Quran.com\n///\n/// Expected to be configuered with the host app's OAuth configuration before further operations are attempted.\npublic protocol AuthenticationClient {\n    /// Performs the login flow to Quran.com\n    ///\n    /// - Parameter viewController: The view controller to be used as base for presenting the login flow.\n    /// - Returns: Nothing is returned for now. The client may return the profile infromation in the future.\n    func login(on viewController: UIViewController) async throws\n\n    func restoreState() async throws -> AuthenticationState\n\n    func logout() async throws\n\n    func authenticate(request: URLRequest) async throws -> URLRequest\n\n    func getAuthenticationHeaders() async throws -> [String: String]\n\n    var authenticationState: AuthenticationState { get async }\n    var loggedInUser: UserInfo? { get async }\n}\n\npublic extension AuthenticationClient {\n    func safelyRestoreState() async -> AuthenticationState {\n        do {\n            return try await restoreState()\n        } catch {\n            return await authenticationState\n        }\n    }\n}\n"
  },
  {
    "path": "Data/AuthenticationClient/Sources/AuthenticationClientMobileSyncImpl.swift",
    "content": "import Foundation\nimport MobileSync\nimport UIKit\nimport VLogging\n\npublic final actor AuthenticationClientMobileSyncImpl: AuthenticationClient {\n    // MARK: Lifecycle\n\n    public init(authService: AuthService) {\n        self.authService = authService\n    }\n\n    // MARK: Public\n\n    public var authenticationState: AuthenticationState {\n        authService.isLoggedIn() ? .authenticated : .notAuthenticated\n    }\n\n    public var loggedInUser: UserInfo? {\n        authService.loggedInUser\n    }\n\n    public func login(on _: UIViewController) async throws {\n        do {\n            try await authService.signIn()\n        } catch {\n            logger.error(\"Failed to login via mobile sync: \\(error)\")\n            throw AuthenticationClientError.errorAuthenticating(error)\n        }\n    }\n\n    public func restoreState() async throws -> AuthenticationState {\n        do {\n            _ = try await authService.refreshAuthentication()\n            return authenticationState\n        } catch {\n            logger.error(\"Failed to restore mobile sync auth state: \\(error)\")\n            throw AuthenticationClientError.clientIsNotAuthenticated(error)\n        }\n    }\n\n    public func logout() async throws {\n        do {\n            try await authService.signOut()\n        } catch {\n            logger.error(\"Failed to logout via mobile sync: \\(error)\")\n            throw AuthenticationClientError.errorAuthenticating(error)\n        }\n    }\n\n    public func authenticate(request: URLRequest) async throws -> URLRequest {\n        let headers = try await getAuthenticationHeaders()\n        var request = request\n        for (field, value) in headers {\n            request.setValue(value, forHTTPHeaderField: field)\n        }\n        return request\n    }\n\n    public func getAuthenticationHeaders() async throws -> [String: String] {\n        do {\n            return try await authService.authenticationHeaders()\n        } catch {\n            throw AuthenticationClientError.clientIsNotAuthenticated(error)\n        }\n    }\n\n    // MARK: Private\n\n    private let authService: AuthService\n}\n"
  },
  {
    "path": "Data/AuthenticationClient/Sources/AuthentincationClientImpl.swift",
    "content": "//\n//  AuthentincationClientImpl.swift\n//  QuranEngine\n//\n//  Created by Mohannad Hassan on 23/12/2024.\n//\n\nimport AppAuth\nimport Combine\nimport Foundation\nimport MobileSync\nimport OAuthService\nimport OAuthServiceAppAuthImpl\nimport SecurePersistence\nimport UIKit\nimport VLogging\n\npublic final actor AuthenticationClientImpl: AuthenticationClient {\n    // MARK: Lifecycle\n\n    init(\n        configurations: AuthenticationClientConfiguration,\n        oauthService: OAuthService,\n        encoder: OAuthStateDataEncoder,\n        persistence: SecurePersistence\n    ) {\n        self.oauthService = oauthService\n        self.persistence = persistence\n        self.encoder = encoder\n        appConfiguration = configurations\n    }\n\n    // MARK: Public\n\n    public var authenticationState: AuthenticationState {\n        stateData?.isAuthorized == true ? .authenticated : .notAuthenticated\n    }\n\n    public var loggedInUser: UserInfo? {\n        nil\n    }\n\n    public func login(on viewController: UIViewController) async throws {\n        do {\n            try persistence.clearData(forKey: Self.persistenceKey)\n            logger.info(\"Cleared previous authentication state before login\")\n        } catch {\n            // If persisting the new state works, this error should be of little concern.\n            logger.warning(\"Failed to clear previous authentication state before login: \\(error)\")\n        }\n\n        let data: OAuthStateData\n        do {\n            data = try await oauthService.login(on: viewController)\n            stateData = data\n            logger.info(\"login succeeded with state. isAuthorized: \\(data.isAuthorized)\")\n            persist(data: data)\n        } catch {\n            logger.error(\"Failed to login: \\(error)\")\n            throw AuthenticationClientError.errorAuthenticating(error)\n        }\n    }\n\n    public func restoreState() async throws -> AuthenticationState {\n        let persistedData: OAuthStateData\n        do {\n            if let data = try persistence.getData(forKey: Self.persistenceKey) {\n                persistedData = try encoder.decode(data)\n            } else {\n                logger.info(\"No previous authentication state found\")\n                return authenticationState\n            }\n        } catch {\n            // Aside from requesting the user to share the diagnostic logs, there's no workaround for this.\n            logger.error(\"Failed to refresh the authentication state. Will default to unauthenticated: \\(error)\")\n            return authenticationState\n        }\n\n        let newData: OAuthStateData\n        do {\n            newData = try await oauthService.refreshAccessTokenIfNeeded(data: persistedData)\n        } catch {\n            // We'll need to differentiate between two sets of errors here:\n            // - Connectivity and server errors. These should not change the authentication\n            //   state. Instead, the clients of `AuthenticationClient` should retry.\n            // - Client errors. These should nullify the authentication state.\n            //\n            // For time sakes, we'll treat all errors as the latter.\n            logger.error(\"Failed to refresh the authentication state: \\(error)\")\n            throw AuthenticationClientError.clientIsNotAuthenticated(error)\n        }\n        stateData = newData\n        persist(data: newData)\n        return authenticationState\n    }\n\n    public func logout() async throws {\n        stateData = nil\n        do {\n            try persistence.clearData(forKey: Self.persistenceKey)\n        } catch {\n            logger.error(\"Failed to clear authentication state on logout: \\(error)\")\n            throw AuthenticationClientError.errorAuthenticating(error)\n        }\n    }\n\n    public func authenticate(request: URLRequest) async throws -> URLRequest {\n        guard authenticationState == .authenticated, let stateData else {\n            logger.error(\"authenticate invoked without client being authenticated\")\n            throw AuthenticationClientError.clientIsNotAuthenticated(nil)\n        }\n        let token: String\n        let data: OAuthStateData\n        do {\n            (token, data) = try await oauthService.getAccessToken(using: stateData)\n        } catch {\n            logger.error(\"Failed to get access token. Resetting to non-authenticated state: \\(error)\")\n            self.stateData = nil\n            throw AuthenticationClientError.clientIsNotAuthenticated(error)\n        }\n\n        persist(data: data)\n        var request = request\n        request.setValue(token, forHTTPHeaderField: \"x-auth-token\")\n        request.setValue(appConfiguration.clientID, forHTTPHeaderField: \"x-client-id\")\n        return request\n    }\n\n    public func getAuthenticationHeaders() async throws -> [String: String] {\n        guard authenticationState == .authenticated, let stateData else {\n            logger.error(\"getAuthenticationHeaders called without being authenticated\")\n            throw AuthenticationClientError.clientIsNotAuthenticated(nil)\n        }\n        let token: String\n        let data: OAuthStateData\n        do {\n            (token, data) = try await oauthService.getAccessToken(using: stateData)\n        } catch {\n            logger.error(\"Failed to get access token. Resetting to non-authenticated state: \\(error)\")\n            self.stateData = nil\n            throw AuthenticationClientError.clientIsNotAuthenticated(error)\n        }\n\n        persist(data: data)\n\n        return [\"x-auth-token\": token, \"x-client-id\": appConfiguration.clientID]\n    }\n\n    // MARK: Internal\n\n    static let persistenceKey: String = \"com.quran.oauth.state\"\n\n    // MARK: Private\n\n    private let oauthService: OAuthService\n    private let encoder: OAuthStateDataEncoder\n    private let persistence: SecurePersistence\n\n    private var stateChangedCancellable: AnyCancellable?\n\n    private var appConfiguration: AuthenticationClientConfiguration\n\n    private var stateData: OAuthStateData?\n\n    private func persist(data: OAuthStateData) {\n        do {\n            let data = try encoder.encode(data)\n            try persistence.set(data: data, forKey: Self.persistenceKey)\n        } catch {\n            // If this happens, the state will not nullified so to keep the current session usable\n            // for the user. As for now, no workaround is in hand.\n            logger.error(\"Failed to persist authentication state. No workaround in hand.: \\(error)\")\n        }\n    }\n}\n\nextension AuthenticationClientImpl {\n    public init(configurations: AuthenticationClientConfiguration) {\n        let service = OAuthServiceAppAuthImpl(configurations: configurations.oAuthServiceConfiguration)\n        let encoder = OAuthStateEncoderAppAuthImpl()\n        self.init(\n            configurations: configurations,\n            oauthService: service,\n            encoder: encoder,\n            persistence: KeychainPersistence()\n        )\n    }\n}\n\nprivate extension AuthenticationClientConfiguration {\n    // The interfaces for the configurations of both modules will change.\n    // Noticeably, AuthenticationClient may accept an enum defining the available\n    // services. The client may request offline access and profile scopes by default.\n    // The OAuth service would still only accept String scopes.\n    // On another hand, the issuer host is probably going to be the API host. We\n    // may see how the relationship pans out.\n    var oAuthServiceConfiguration: AppAuthConfiguration {\n        AppAuthConfiguration(\n            clientID: clientID,\n            clientSecret: clientSecret,\n            redirectURL: redirectURL,\n            scopes: scopes,\n            authorizationIssuerURL: authorizationIssuerURL\n        )\n    }\n}\n"
  },
  {
    "path": "Data/AuthenticationClient/Tests/AuthenticationClientTests.swift",
    "content": "//\n//  AuthenticationClientTests.swift\n//  QuranEngine\n//\n//  Created by Mohannad Hassan on 26/12/2024.\n//\n\nimport AppAuth\nimport AsyncUtilitiesForTesting\nimport Combine\nimport Foundation\nimport OAuthService\nimport OAuthServiceFake\nimport SecurePersistence\nimport SystemDependencies\nimport SystemDependenciesFake\nimport XCTest\n@testable import AuthenticationClient\n\nfinal class AuthenticationClientTests: XCTestCase {\n    // MARK: Internal\n\n    let configuration = AuthenticationClientConfiguration(\n        clientID: \"client-id\",\n        clientSecret: \"client-secret\",\n        redirectURL: URL(string: \"callback://\")!,\n        scopes: [],\n        authorizationIssuerURL: URL(string: \"https://example.com\")!\n    )\n\n    override func setUp() {\n        encoder = OAuthStateEncoderFake()\n        oauthService = OAuthServiceFake()\n        persistence = KeychainPersistence(keychainAccess: KeychainAccessFake())\n        sut = AuthenticationClientImpl(\n            configurations: configuration,\n            oauthService: oauthService,\n            encoder: encoder,\n            persistence: persistence\n        )\n    }\n\n    func testLoginSuccessful() async throws {\n        let state = OAuthStateDataFake()\n        state.accessToken = \"abcd\"\n        oauthService.loginResult = .success(state)\n        oauthService.accessTokenRefreshBehavior = .success(\"abcd\")\n\n        try await sut.login(on: UIViewController())\n\n        await AsyncAssertEqual(\n            await sut.authenticationState,\n            .authenticated,\n            \"Expected the auth manager to be in authenticated state\"\n        )\n        XCTAssertEqual(\n            try persistence.getData(forKey: AuthenticationClientImpl.persistenceKey)\n                .map(encoder.decode(_:)) as? OAuthStateDataFake,\n            state,\n            \"Expected to persist the new state\"\n        )\n    }\n\n    func testLoginFails() async throws {\n        oauthService.loginResult = .failure(OAuthServiceError.failedToAuthenticate(nil))\n\n        await AsyncAssertThrows(\n            try await sut.login(on: UIViewController()),\n            nil,\n            \"Expected to throw an error\"\n        )\n        await AsyncAssertEqual(await sut.authenticationState, .notAuthenticated, \"Expected to not be authenticated\")\n    }\n\n    func testRestorationSuccessful() async throws {\n        let state = OAuthStateDataFake()\n        state.accessToken = \"abcd\"\n        try persistence.set(\n            data: try encoder.encode(state),\n            forKey: AuthenticationClientImpl.persistenceKey\n        )\n        oauthService.accessTokenRefreshBehavior = .success(state.accessToken!)\n\n        try await AsyncAssertEqual(try await sut.restoreState(), .authenticated, \"Expected to be signed in successfully\")\n        await AsyncAssertEqual(\n            await sut.authenticationState,\n            .authenticated,\n            \"Expected the auth manager to be in authenticated state\"\n        )\n    }\n\n    func testRestorationButNotAuthenticated() async throws {\n        try await AsyncAssertEqual(try await sut.restoreState(), .notAuthenticated, \"Expected to not be signed in\")\n        await AsyncAssertEqual(await sut.authenticationState, .notAuthenticated, \"Should be reflected in state property\")\n    }\n\n    func testRestorationFailsWithEmptyData() async throws {\n        // Persistance starts with empty data.\n        try await AsyncAssertEqual(try await sut.restoreState(), .notAuthenticated, \"Expected not to be signed in\")\n    }\n\n    func testRestorationFailsRefreshingSession() async throws {\n        let state = OAuthStateDataFake()\n        state.accessToken = \"abcd\"\n        try persistence.set(\n            data: try encoder.encode(state),\n            forKey: AuthenticationClientImpl.persistenceKey\n        )\n        oauthService.accessTokenRefreshBehavior = .failure(OAuthServiceError.failedToRefreshTokens(nil))\n\n        try await AsyncAssertThrows(await { _ = try await sut.restoreState() }(), nil, \"Expected to throw an error\")\n    }\n\n    func testAuthenticatingRequestsWithValidState() async throws {\n        let state = OAuthStateDataFake()\n        state.accessToken = \"abcd\"\n        try persistence.set(data: try encoder.encode(state), forKey: AuthenticationClientImpl.persistenceKey)\n\n        oauthService.accessTokenRefreshBehavior = .success(\"abcd\")\n        _ = try await sut.restoreState()\n        let inputRequest = URLRequest(url: URL(string: \"https://example.com\")!)\n\n        let result = try await sut.authenticate(request: inputRequest)\n\n        let authHeader = result.allHTTPHeaderFields?.first { $0.key.contains(\"auth-token\") }\n        XCTAssertNotNil(authHeader, \"Expected to return the access token\")\n        XCTAssertTrue(authHeader?.value.contains(state.accessToken!) ?? false, \"Expeccted to use the access token\")\n\n        let clientIDHeader = result.allHTTPHeaderFields?.first { $0.key.contains(\"client-id\") }\n        XCTAssertNotNil(clientIDHeader, \"Expected to return the client id\")\n        XCTAssertTrue(clientIDHeader?.value.contains(configuration.clientID) ?? false, \"Expeccted to use the client id\")\n    }\n\n    func testAuthenticatingRequestFailsGettingToken() async throws {\n        let state = OAuthStateDataFake()\n        state.accessToken = \"abcd\"\n        try persistence.set(data: try encoder.encode(state), forKey: AuthenticationClientImpl.persistenceKey)\n\n        oauthService.accessTokenRefreshBehavior = .success(state.accessToken!)\n        _ = try await sut.restoreState()\n\n        let inputRequest = URLRequest(url: URL(string: \"https://example.com\")!)\n\n        oauthService.accessTokenRefreshBehavior = .failure(OAuthServiceError.failedToRefreshTokens(nil))\n\n        try await AsyncAssertThrows(\n            await { _ = try await sut.authenticate(request: inputRequest) }(),\n            nil,\n            \"Expected to throw an error as well.\"\n        )\n        await AsyncAssertEqual(\n            await sut.authenticationState,\n            .notAuthenticated,\n            \"Expected to signal not authenticated state\"\n        )\n    }\n\n    func testRefreshedTokens() async throws {\n        let state = OAuthStateDataFake()\n        state.accessToken = \"abcd\"\n        try persistence.set(\n            data: try encoder.encode(state),\n            forKey: AuthenticationClientImpl.persistenceKey\n        )\n\n        let newState = OAuthStateDataFake()\n        newState.accessToken = \"xyz\"\n        oauthService.accessTokenRefreshBehavior = .successWithNewData(\"xyz\", newState)\n        _ = try await sut.restoreState()\n\n        let decoded = try persistence.getData(forKey: AuthenticationClientImpl.persistenceKey)\n            .map(encoder.decode(_:)) as? OAuthStateDataFake\n        XCTAssertEqual(\n            decoded?.accessToken,\n            \"xyz\",\n            \"Expected to persist the refreshed state\"\n        )\n\n        let inputRequest = URLRequest(url: URL(string: \"https://example.com\")!)\n        let resultRequest = try await sut.authenticate(request: inputRequest)\n        let authHeader = resultRequest.allHTTPHeaderFields?.first { $0.key.contains(\"auth-token\") }\n        XCTAssertEqual(authHeader?.value, \"xyz\", \"Expected to use the refreshed access token for the request\")\n    }\n\n    // MARK: Private\n\n    private var sut: AuthenticationClientImpl!\n    private var oauthService: OAuthServiceFake!\n    private var encoder: OAuthStateDataEncoder!\n    private var persistence: SecurePersistence!\n}\n"
  },
  {
    "path": "Data/BatchDownloader/Sources/DownloadProgress.swift",
    "content": "//\n//  DownloadProgress.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/21/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\npublic struct DownloadProgress: Sendable {\n    public var total: Double\n    public var completed: Double = 0\n\n    public var progress: Double {\n        Double(completed) / Double(total)\n    }\n}\n"
  },
  {
    "path": "Data/BatchDownloader/Sources/Downloader/DownloadBatchDataController.swift",
    "content": "//\n//  DownloadBatchDataController.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/29/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Crashing\nimport Foundation\nimport NetworkSupport\nimport Utilities\nimport VLogging\n\nfunc describe(_ task: NetworkSessionTask) -> String {\n    \"\\(type(of: task))(\\(task.taskIdentifier): \" + ((task.originalRequest?.url?.absoluteString ?? task.currentRequest?.url?.absoluteString) ?? \"\") + \")\"\n}\n\nstruct SingleTaskResponse {\n    let request: DownloadRequest\n    let response: DownloadBatchResponse\n}\n\nactor DownloadBatchDataController {\n    // MARK: Lifecycle\n\n    init(maxSimultaneousDownloads: Int, persistence: DownloadsPersistence) {\n        self.maxSimultaneousDownloads = maxSimultaneousDownloads\n        self.persistence = persistence\n    }\n\n    // MARK: Internal\n\n    func start(with session: NetworkSession) async {\n        await bootstrapPersistence()\n\n        self.session = session\n        let (_, _, downloadTasks) = await session.tasks()\n        for batch in batches {\n            await batch.associateTasks(downloadTasks)\n        }\n\n        initialRunningTasks.initialize()\n\n        // start pending tasks if needed\n        await startPendingTasksIfNeeded()\n    }\n\n    func getOnGoingDownloads() async -> [DownloadBatchResponse] {\n        await initialRunningTasks.awaitInitialization()\n        return Array(batches)\n    }\n\n    func downloadRequestResponse(for task: NetworkSessionTask) async -> SingleTaskResponse? {\n        for batch in batches {\n            if let request = await batch.downloadRequest(for: task) {\n                return SingleTaskResponse(request: request, response: batch)\n            }\n        }\n        return nil\n    }\n\n    func download(_ batchRequest: DownloadBatchRequest) async throws -> DownloadBatchResponse {\n        logger.info(\"Batching \\(batchRequest.requests.count) to download.\")\n        // save to persistence\n        let batch = try await persistence.insert(batch: batchRequest)\n        logger.info(\"Batch assigned Id = \\(batch.id).\")\n\n        // create the response\n        let response = await createResponse(forBatch: batch)\n\n        // start pending downloads if needed\n        await startPendingTasksIfNeeded()\n\n        return response\n    }\n\n    func downloadCompleted(_ response: SingleTaskResponse) async {\n        await response.response.complete(response.request, result: .success(()))\n        await updateDownloadPersistence(response)\n\n        // start pending tasks if needed\n        await startPendingTasksIfNeeded()\n    }\n\n    func downloadFailed(_ response: SingleTaskResponse, with error: Error) async {\n        await response.response.complete(response.request, result: .failure(error))\n\n        // start pending tasks if needed\n        await startPendingTasksIfNeeded()\n    }\n\n    func waitUntilBatchesRemoved(batchIds: Set<Int64>) async {\n        guard !batchIds.isEmpty else {\n            return\n        }\n\n        while batches.contains(where: { batchIds.contains($0.batchId) }) {\n            try? await Task.sleep(nanoseconds: 50_000_000)\n        }\n    }\n\n    // MARK: Private\n\n    private let maxSimultaneousDownloads: Int\n    private let persistence: DownloadsPersistence\n    private weak var session: NetworkSession?\n\n    private var batches: Set<DownloadBatchResponse> = []\n\n    private var initialRunningTasks = AsyncInitializer()\n\n    private var runningTasks: Int {\n        get async {\n            var count = 0\n            for batch in batches {\n                count += await batch.runningTasks\n            }\n            return count\n        }\n    }\n\n    private static func completeBatch(_ response: DownloadBatchResponse) async {\n        do {\n            // Wait until sequence completes\n            for try await _ in response.progress { }\n        } catch {\n            logger.error(\"Batch \\(response.batchId) failed to download with error: \\(error)\")\n        }\n    }\n\n    private func bootstrapPersistence() async {\n        do {\n            try await attempt(times: 3) {\n                try await loadBatchesFromPersistence()\n            }\n        } catch {\n            crasher.recordError(error, reason: \"Failed to retrieve initial download batches from persistence.\")\n        }\n    }\n\n    private func loadBatchesFromPersistence() async throws {\n        let batches = try await persistence.retrieveAll()\n        logger.info(\"Loading \\(batches.count) from persistence\")\n        for batch in batches {\n            _ = await createResponse(forBatch: batch)\n        }\n    }\n\n    private func createResponse(forBatch batch: DownloadBatch) async -> DownloadBatchResponse {\n        let response = await DownloadBatchResponse(batch: batch)\n        batches.insert(response)\n\n        Task { [weak self] in\n            await Self.completeBatch(response)\n            guard let self else {\n                return\n            }\n            await cleanUpForCompletedBatch(response)\n        }\n\n        return response\n    }\n\n    private func cleanUpForCompletedBatch(_ response: DownloadBatchResponse) async {\n        // delete the completed response\n        batches.remove(response)\n        await run(\"DeleteBatch\") { try await $0.delete(batchIds: [response.batchId]) }\n\n        // Start pending tasks\n        await startPendingTasksIfNeeded()\n    }\n\n    private func startPendingTasksIfNeeded() async {\n        if !initialRunningTasks.initialized {\n            logger.warning(\"startPendingTasksIfNeeded not initialized\")\n            return\n        }\n\n        // if we have a session\n        guard let session else {\n            logger.warning(\"startPendingTasksIfNeeded no session\")\n            return\n        }\n        // and there are empty slots to use for downloading\n        let runningTasks = await runningTasks\n        guard runningTasks < maxSimultaneousDownloads else {\n            logger.info(\"startPendingTasksIfNeeded no empty slots for download\")\n            return\n        }\n        // and there are things to download\n        guard !batches.isEmpty else {\n            logger.info(\"startPendingTasksIfNeeded no batches to download\")\n            return\n        }\n\n        await startDownloadTasks(\n            session: session,\n            maxNumberOfDownloads: maxSimultaneousDownloads - runningTasks\n        )\n    }\n\n    private func startDownloadTasks(session: NetworkSession, maxNumberOfDownloads: Int) async {\n        // Sort the batches by id.\n        let batches = batches.sorted { $0.batchId < $1.batchId }\n\n        var downloadTasks: [(task: NetworkSessionDownloadTask, response: SingleTaskResponse)] = []\n        for batch in batches {\n            while downloadTasks.count < maxNumberOfDownloads { // Max download channels?\n                guard let (request, task) = await batch.startDownloadIfNeeded(session: session) else {\n                    break\n                }\n\n                let response = SingleTaskResponse(request: request, response: batch)\n                await updateDownloadPersistence(response)\n                downloadTasks.append((task, response))\n            }\n        }\n\n        logger.info(\"startDownloadTasks \\(downloadTasks.count) to download on empty channels.\")\n\n        // start the tasks\n        for download in downloadTasks {\n            download.task.resume()\n        }\n    }\n\n    private func updateDownloadPersistence(_ response: SingleTaskResponse) async {\n        await run(\"UpdateDownload\") {\n            try await $0.update(downloads: [await response.response.download(of: response.request)])\n        }\n    }\n\n    private func run(_ operation: String, _ body: (DownloadsPersistence) async throws -> Void) async {\n        do {\n            try await body(persistence)\n        } catch {\n            crasher.recordError(error, reason: \"DownloadPersistence.\" + operation)\n        }\n    }\n}\n"
  },
  {
    "path": "Data/BatchDownloader/Sources/Downloader/DownloadBatchResponse.swift",
    "content": "//\n//  DownloadBatchResponse.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/14/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n\nimport Combine\nimport Crashing\nimport NetworkSupport\nimport Utilities\nimport VLogging\n\npublic typealias AsyncThrowingPublisher = Utilities.AsyncThrowingPublisher\n\nprivate struct ResponseData {\n    enum State {\n        case finished\n        case failed(Error)\n        case inProgress\n    }\n\n    // MARK: Internal\n\n    let progress = CurrentValueSubject<DownloadProgress, Error>(DownloadProgress(total: 1))\n    let request: DownloadRequest\n    var state: State\n\n    // taskId != nil && task == nil means the task was executing in the background.\n    // taskId == nil && task != nil cannot happen\n    var taskId: Int?\n    var task: NetworkSessionTask?\n\n    var isInProgress: Bool {\n        switch state {\n        case .inProgress: return true\n        case .finished, .failed: return false\n        }\n    }\n\n    var finished: Bool {\n        switch state {\n        case .finished: return true\n        case .inProgress, .failed: return false\n        }\n    }\n\n    var failed: Bool {\n        switch state {\n        case .failed: return true\n        case .inProgress, .finished: return false\n        }\n    }\n\n    func download(batchId: Int64) -> Download {\n        Download(taskId: taskId, request: request, status: isInProgress ? .downloading : .completed, batchId: batchId)\n    }\n}\n\npublic actor DownloadBatchResponse {\n    // MARK: Lifecycle\n\n    init(batch: DownloadBatch) async {\n        batchId = batch.id\n        requests = batch.downloads.map(\\.request)\n\n        for download in batch.downloads {\n            let request = download.request\n            let state: ResponseData.State = switch download.status {\n            case .completed:\n                .finished\n            case .downloading:\n                .inProgress\n            }\n            responses[request] = ResponseData(request: request, state: state, taskId: download.taskId, task: nil)\n        }\n\n        for download in batch.downloads {\n            // if it was saved as completed, then fulfill it\n            if download.status == .completed {\n                complete(download.request, result: .success(()))\n            }\n        }\n    }\n\n    // MARK: Public\n\n    public nonisolated let requests: [DownloadRequest]\n\n    public nonisolated var progress: AsyncThrowingPublisher<DownloadProgress> {\n        progressSubject.values(bufferingPolicy: .bufferingNewest(1))\n    }\n\n    // TODO: Remove\n    public nonisolated var currentProgress: DownloadProgress {\n        progressSubject.value\n    }\n\n    public func cancel() async {\n        await withTaskGroup(of: Void.self) { group in\n            for request in requests {\n                group.addTask {\n                    await self.cancel(request)\n                }\n            }\n        }\n    }\n\n    // MARK: Internal\n\n    nonisolated let batchId: Int64\n\n    var runningTasks: Int {\n        responses.values.filter { $0.isInProgress && $0.taskId != nil }.count\n    }\n\n    func associateTasks(_ tasks: [NetworkSessionDownloadTask]) {\n        let tasksById = Dictionary(uniqueKeysWithValues: tasks.map { ($0.taskIdentifier, $0) })\n        for request in responses.keys {\n            mutableResponse(of: request) { response in\n                if let savedTaskId = response.taskId {\n                    if let task = tasksById[savedTaskId] {\n                        logger.info(\"Associating download with a task: \\(describe(task))\")\n                        response.task = task\n                    } else {\n                        response.taskId = nil\n                        if !response.finished {\n                            logger.error(\"Couldn't find task with id \\(savedTaskId)\")\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    func downloadRequest(for task: NetworkSessionTask) -> DownloadRequest? {\n        if let request = responses.values.first(where: { $0.taskId == task.taskIdentifier })?.request {\n            mutableResponse(of: request) { response in\n                if response.task == nil {\n                    logger.info(\"Associating task \\(task.taskIdentifier) with DownloadResponse\")\n                    response.task = task\n                }\n            }\n            return request\n        }\n        return nil\n    }\n\n    func updateProgress(of request: DownloadRequest, _ progress: DownloadProgress) {\n        if completed {\n            return\n        }\n\n        mutableResponse(of: request) { response in\n            response.state = .inProgress\n            response.progress.send(progress)\n        }\n\n        let accumulated = responses.values.map(\\.progress.value.progress).reduce(0, +)\n        let overallProgress = DownloadProgress(total: 1, completed: accumulated / Double(responses.count))\n        progressSubject.send(overallProgress)\n    }\n\n    func complete(_ request: DownloadRequest, result: Result<Void, Error>) {\n        let completedPreviously = completed\n\n        let newState = { () -> ResponseData.State in\n            switch result {\n            case .success: return .finished\n            case .failure(let error): return .failed(error)\n            }\n        }\n\n        let completion = { () -> Subscribers.Completion<Error> in\n            switch result {\n            case .success: return .finished\n            case .failure(let error): return .failure(error)\n            }\n        }\n\n        mutableResponse(of: request) { response in\n            response.state = newState()\n            response.progress.send(DownloadProgress(total: 1, completed: 1))\n            response.progress.send(completion: completion())\n        }\n\n        // if the overall request was just completed now\n        guard completed && !completedPreviously else {\n            return\n        }\n\n        if let error = firstError {\n            crasher.recordError(error, reason: \"Download failed \\(batchId)\")\n\n            // Cancel other tasks if any has failed\n            for request in requests {\n                cancel(request)\n            }\n\n            progressSubject.send(completion: .failure(error))\n        } else {\n            progressSubject.send(completion: .finished)\n        }\n    }\n\n    func download(of request: DownloadRequest) -> Download {\n        let response = response(of: request)\n        return response.download(batchId: batchId)\n    }\n\n    func startDownloadIfNeeded(session: NetworkSession) -> (DownloadRequest, NetworkSessionDownloadTask)? {\n        guard let notStartedRequest = responses.values.first(where: { $0.isInProgress && $0.taskId == nil })?.request else {\n            return nil\n        }\n\n        let task = session.downloadTask(with: notStartedRequest)\n\n        mutableResponse(of: notStartedRequest) { response in\n            response.taskId = task.taskIdentifier\n            response.task = task\n        }\n\n        return (notStartedRequest, task)\n    }\n\n    // MARK: - Testing\n\n    func details(of request: DownloadRequest) -> (task: NetworkSessionTask?, progress: CurrentValueSubject<DownloadProgress, Error>) {\n        let response = response(of: request)\n        return (response.task, response.progress)\n    }\n\n    // MARK: Private\n\n    private nonisolated let progressSubject = CurrentValueSubject<DownloadProgress, Error>(DownloadProgress(total: 1))\n    private var responses: [DownloadRequest: ResponseData] = [:]\n\n    private var completed: Bool {\n        if responses.values.contains(where: \\.failed) {\n            return true\n        }\n        return responses.values.allSatisfy(\\.finished)\n    }\n\n    private var firstError: Error? {\n        for response in responses.values {\n            switch response.state {\n            case .failed(let error): return error\n            case .finished, .inProgress: continue\n            }\n        }\n        return nil\n    }\n\n    private func cancel(_ request: DownloadRequest) {\n        let response = response(of: request)\n        response.task?.cancel()\n        if let task = response.task {\n            print(\"Cancelling task \\(describe(task))\")\n        }\n        complete(request, result: .failure(CancellationError()))\n    }\n\n    private func response(of request: DownloadRequest) -> ResponseData {\n        if let response = responses[request] {\n            return response\n        } else {\n            fatalError(\"DownloadRequest \\(request) has no associated response\")\n        }\n    }\n\n    private func mutableResponse(of request: DownloadRequest, operation: (inout ResponseData) -> Void) {\n        var response = response(of: request)\n        operation(&response)\n        responses[request] = response\n    }\n}\n\nextension DownloadBatchResponse: Hashable {\n    public static func == (lhs: DownloadBatchResponse, rhs: DownloadBatchResponse) -> Bool {\n        lhs.batchId == rhs.batchId\n    }\n\n    public nonisolated func hash(into hasher: inout Hasher) {\n        hasher.combine(batchId)\n    }\n}\n"
  },
  {
    "path": "Data/BatchDownloader/Sources/Downloader/DownloadManager.swift",
    "content": "//\n//  DownloadManager.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/14/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\nimport NetworkSupport\nimport SystemDependencies\nimport VLogging\n\npublic final class DownloadManager: Sendable {\n    typealias SessionFactory = @Sendable (NetworkSessionDelegate, OperationQueue) -> NetworkSession\n\n    // MARK: Lifecycle\n\n    public convenience init(\n        maxSimultaneousDownloads: Int,\n        configuration: URLSessionConfiguration,\n        downloadsURL: URL\n    ) {\n        self.init(\n            maxSimultaneousDownloads: maxSimultaneousDownloads,\n            sessionFactory: {\n                URLSession(\n                    configuration: configuration,\n                    delegate: NetworkSessionToURLSessionDelegate(networkSessionDelegate: $0),\n                    delegateQueue: $1\n                )\n            },\n            persistence: GRDBDownloadsPersistence(fileURL: downloadsURL)\n        )\n    }\n\n    init(\n        maxSimultaneousDownloads: Int,\n        sessionFactory: @escaping SessionFactory,\n        persistence: DownloadsPersistence,\n        fileManager: FileSystem = DefaultFileSystem()\n    ) {\n        let dataController = DownloadBatchDataController(\n            maxSimultaneousDownloads: maxSimultaneousDownloads,\n            persistence: persistence\n        )\n        self.dataController = dataController\n        self.sessionFactory = sessionFactory\n        handler = DownloadSessionDelegate(dataController: dataController, fileManager: fileManager)\n    }\n\n    // MARK: Public\n\n    public func start() async {\n        logger.info(\"Starting download manager\")\n        let session = createSession()\n        await dataController.start(with: session)\n        logger.info(\"Download manager started\")\n    }\n\n    @MainActor\n    public func setBackgroundSessionCompletion(_ backgroundSessionCompletion: @MainActor @escaping () -> Void) {\n        handler.setBackgroundSessionCompletion(backgroundSessionCompletion)\n    }\n\n    public func getOnGoingDownloads() async -> [DownloadBatchResponse] {\n        logger.info(\"getOnGoingDownloads requested\")\n        let downloads = await dataController.getOnGoingDownloads()\n        logger.debug(\"Found \\(downloads.count) ongoing downloads\")\n        return downloads\n    }\n\n    public func download(_ batch: DownloadBatchRequest) async throws -> DownloadBatchResponse {\n        logger.debug(\"Requested to download \\(batch.requests.map(\\.url.absoluteString))\")\n        let result = try await dataController.download(batch)\n        return result\n    }\n\n    public func cancel(downloads: [DownloadBatchResponse]) async {\n        guard !downloads.isEmpty else {\n            return\n        }\n\n        await withTaskGroup(of: Void.self) { group in\n            for download in downloads {\n                group.addTask {\n                    await download.cancel()\n                    await Self.waitForCompletion(of: download)\n                }\n            }\n        }\n\n        let batchIds = Set(downloads.map(\\.batchId))\n        await dataController.waitUntilBatchesRemoved(batchIds: batchIds)\n    }\n\n    // MARK: Private\n\n    private let sessionFactory: SessionFactory\n    private nonisolated(unsafe) var session: NetworkSession?\n    private let handler: DownloadSessionDelegate\n    private let dataController: DownloadBatchDataController\n\n    private static func waitForCompletion(of download: DownloadBatchResponse) async {\n        do {\n            for try await _ in download.progress { }\n        } catch { }\n    }\n\n    private func createSession() -> NetworkSession {\n        let operationQueue = OperationQueue()\n        operationQueue.name = \"com.quran.downloads\"\n        operationQueue.maxConcurrentOperationCount = 1\n\n        let dispatchQueue = DispatchQueue(label: \"com.quran.downloads.dispatch\")\n        operationQueue.underlyingQueue = dispatchQueue\n\n        let session = sessionFactory(handler, operationQueue)\n        self.session = session\n\n        return session\n    }\n}\n"
  },
  {
    "path": "Data/BatchDownloader/Sources/Downloader/DownloadSessionDelegate.swift",
    "content": "//\n//  DownloadSessionDelegate.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/14/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Crashing\nimport Foundation\nimport NetworkSupport\nimport SystemDependencies\nimport Utilities\nimport VLogging\n\nactor DownloadSessionDelegate: NetworkSessionDelegate {\n    // MARK: Lifecycle\n\n    init(dataController: DownloadBatchDataController, fileManager: FileSystem) {\n        self.dataController = dataController\n        self.fileManager = fileManager\n    }\n\n    // MARK: Internal\n\n    @MainActor var backgroundSessionCompletion: (@MainActor () -> Void)?\n\n    @MainActor\n    func setBackgroundSessionCompletion(_ backgroundSessionCompletion: @MainActor @escaping () -> Void) {\n        self.backgroundSessionCompletion = backgroundSessionCompletion\n    }\n\n    func networkSession(\n        _ session: NetworkSession,\n        downloadTask: NetworkSessionDownloadTask,\n        didWriteData bytesWritten: Int64,\n        totalBytesWritten: Int64,\n        totalBytesExpectedToWrite: Int64\n    ) async {\n        guard let response = await dataController.downloadRequestResponse(for: downloadTask) else {\n            logger.warning(\"[networkSession:didWriteData] Cannot find onGoingDownloads for task \\(describe(downloadTask))\")\n            return\n        }\n        let progress = DownloadProgress(total: Double(totalBytesExpectedToWrite), completed: Double(totalBytesWritten))\n        await response.response.updateProgress(of: response.request, progress)\n    }\n\n    func networkSession(_ session: NetworkSession, downloadTask: NetworkSessionDownloadTask, didFinishDownloadingTo location: URL) async {\n        // validate task response\n        guard validate(task: downloadTask) == nil else {\n            logger.error(\"Invalid server response \\(downloadTask.taskIdentifier) - \\(String(describing: downloadTask.response))\")\n            return\n        }\n\n        guard let response = await dataController.downloadRequestResponse(for: downloadTask) else {\n            logger.warning(\"Missed saving task \\(describe(downloadTask))\")\n            return\n        }\n\n        let resumePath = response.request.resumePath\n        let destinationURL = response.request.destination\n\n        // remove the resume data\n        try? fileManager.removeItem(at: resumePath)\n        // remove the existing file if exist.\n        try? fileManager.removeItem(at: destinationURL)\n\n        // create directory if needed\n        let directory = destinationURL.deletingLastPathComponent()\n        try? fileManager.createDirectory(at: directory, withIntermediateDirectories: true)\n\n        // move the file to destination\n        do {\n            try fileManager.moveItem(at: location, to: destinationURL)\n\n        } catch {\n            crasher.recordError(\n                error,\n                reason: \"Problem with creating directory or copying item to the new location '\\(destinationURL)'\"\n            )\n            // fail the batch since we save the file\n            await dataController.downloadFailed(response, with: FileSystemError(error: error))\n        }\n    }\n\n    func networkSession(_ session: NetworkSession, task: NetworkSessionTask, didCompleteWithError sessionError: Error?) async {\n        logger.debug(\"Finished downloading \\(describe(task)). Error: \\(String(describing: sessionError))\")\n        guard let response = await dataController.downloadRequestResponse(for: task) else {\n            if let sessionError, !sessionError.isCancelled {\n                logger.warning(\"[networkSession:didCompleteWithError] Cannot find onGoingDownloads for task \\(describe(task))\")\n            }\n            return\n        }\n\n        let validationError = validate(task: task)\n        let theError = sessionError ?? validationError\n\n        // if success, early return\n        guard let error = theError else {\n            await dataController.downloadCompleted(response)\n            return\n        }\n\n        let finalError = wrap(error: error, resumePath: response.request.resumePath)\n        await dataController.downloadFailed(response, with: finalError)\n    }\n\n    @MainActor\n    func networkSessionDidFinishEvents(forBackgroundURLSession session: NetworkSession) {\n        backgroundSessionCompletion?()\n        backgroundSessionCompletion = nil\n    }\n\n    // MARK: Private\n\n    private let acceptableStatusCodes = 200 ..< 300\n\n    private let dataController: DownloadBatchDataController\n    private let fileManager: FileSystem\n\n    private func wrap(error theError: Error, resumePath: RelativeFilePath) -> Error {\n        var error = theError\n\n        // save resume data, if found\n        if let resumeData = error.resumeData {\n            do {\n                try resumeData.write(to: resumePath, options: [.atomic])\n            } catch {\n                crasher.recordError(error, reason: \"Error while saving resume data.\")\n            }\n            error = error.removeResumeData()\n        }\n\n        // not cancelled by user\n        guard !error.isCancelled else {\n            return error\n        }\n\n        crasher.recordError(error, reason: \"Download network error occurred\")\n\n        // check if no disk space\n        let finalError: Error = if let error = error as? POSIXError, error.code == .ENOENT {\n            FileSystemError.noDiskSpace\n        } else {\n            NetworkError(error: error)\n        }\n        return finalError\n    }\n\n    private func validate(task: NetworkSessionTask) -> Error? {\n        let httpResponse = task.response as? HTTPURLResponse\n        let statusCode = httpResponse?.statusCode ?? 0\n        if !acceptableStatusCodes.contains(statusCode) {\n            return NetworkError.serverError(\"Unacceptable status code: \\(statusCode)\")\n        } else {\n            return nil\n        }\n    }\n}\n\nprivate extension Error {\n    var resumeData: Data? {\n        (self as NSError).userInfo[NSURLSessionDownloadTaskResumeData] as? Data\n    }\n\n    func removeResumeData() -> Error {\n        let error = self as NSError\n        guard error.userInfo[NSURLSessionDownloadTaskResumeData] != nil else {\n            return self\n        }\n        var userInfo = error.userInfo\n        userInfo[NSURLSessionDownloadTaskResumeData] = nil\n        return NSError(domain: error.domain, code: error.code, userInfo: userInfo)\n    }\n}\n"
  },
  {
    "path": "Data/BatchDownloader/Sources/Downloader/DownloadsObserver.swift",
    "content": "//\n//  DownloadsObserver.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-02.\n//\n\nimport Combine\nimport Dispatch\nimport Utilities\nimport VLogging\n\n@MainActor\npublic final class DownloadsObserver<Key: Hashable> {\n    // MARK: Lifecycle\n\n    public init(extractKey: @escaping (DownloadBatchResponse) -> Key?, showError: @escaping @MainActor (Error) -> Void) {\n        self.extractKey = extractKey\n        self.showError = showError\n    }\n\n    // MARK: Public\n\n    public private(set) var runningDownloads: Set<DownloadBatchResponse> = []\n\n    public var progressPublisher: AnyPublisher<[Key: Double], Never> {\n        progress\n            .throttle(for: .seconds(0.1), scheduler: DispatchQueue.main, latest: true)\n            .eraseToAnyPublisher()\n    }\n\n    public func observe(_ downloads: Set<DownloadBatchResponse>) async {\n        runningDownloads.formUnion(downloads)\n\n        for download in downloads {\n            cancellableTasks.task { [weak self] in\n                do {\n                    for try await progress in download.progress {\n                        await self?.progressUpdated(of: download, progress: progress.progress)\n                    }\n                } catch {\n                    self?.showError(error)\n                }\n                self?.finish(download)\n            }\n        }\n    }\n\n    // MARK: Internal\n\n    let extractKey: (DownloadBatchResponse) -> Key?\n    let showError: @MainActor (Error) -> Void\n\n    // MARK: Private\n\n    private let progress = CurrentValueSubject<[Key: Double], Never>([:])\n    private var cancellableTasks = Set<CancellableTask>()\n\n    private func finish(_ download: DownloadBatchResponse) {\n        runningDownloads.remove(download)\n        if let key = extractKey(download) {\n            progress.value.removeValue(forKey: key)\n        }\n    }\n\n    private func progressUpdated(of batch: DownloadBatchResponse, progress newProgress: Double) async {\n        // Ignore if it's not running (e.g. cancelled).\n        guard runningDownloads.contains(batch) else {\n            return\n        }\n\n        guard let key = extractKey(batch) else {\n            logger.debug(\"Cannot find key \\(Key.self) for download \\(batch)\")\n            return\n        }\n        progress.value[key] = newProgress\n    }\n}\n"
  },
  {
    "path": "Data/BatchDownloader/Sources/Downloader/DownloadsPersistence.swift",
    "content": "//\n//  DownloadsPersistence.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2/14/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nprotocol DownloadsPersistence: Sendable {\n    func retrieveAll() async throws -> [DownloadBatch]\n    func insert(batch: DownloadBatchRequest) async throws -> DownloadBatch\n    func update(downloads: [Download]) async throws\n    func delete(batchIds: [Int64]) async throws\n}\n"
  },
  {
    "path": "Data/BatchDownloader/Sources/Downloader/GRDBDownloadsPersistence.swift",
    "content": "//\n//  GRDBDownloadsPersistence.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-22.\n//\n\nimport Foundation\nimport GRDB\nimport SQLitePersistence\nimport Utilities\nimport VLogging\n\nstruct GRDBDownloadsPersistence: DownloadsPersistence {\n    // MARK: Lifecycle\n\n    init(db: DatabaseConnection) {\n        self.db = db\n        do {\n            try migrator.migrate(db)\n        } catch {\n            logger.error(\"Error while performing Downloads migrations. Error: \\(error)\")\n        }\n    }\n\n    init(fileURL: URL) {\n        self.init(db: DatabaseConnection(url: fileURL, readonly: false))\n    }\n\n    // MARK: Internal\n\n    let db: DatabaseConnection\n\n    func retrieveAll() async throws -> [DownloadBatch] {\n        try await db.read { db in\n            let downloads = try GRDBDownload.fetchAll(db)\n            let batches = Dictionary(grouping: downloads, by: { $0.downloadBatchId })\n            return batches.map { DownloadBatch(id: $0, downloads: $1.map { $0.toDownload() }) }\n        }\n    }\n\n    func insert(batch: DownloadBatchRequest) async throws -> DownloadBatch {\n        try await db.write { db in\n            var grdbBatch = GRDBDownloadBatch(id: nil)\n            try grdbBatch.insert(db)\n            let downloads = try batch.requests.map {\n                var download = GRDBDownload(Download(taskId: nil, request: $0, status: .downloading, batchId: grdbBatch.id!))\n                try download.insert(db)\n                return download.toDownload()\n            }\n            return grdbBatch.toDownloadBatch(downloads: downloads)\n        }\n    }\n\n    func update(downloads: [Download]) async throws {\n        try await db.write { db in\n            for download in downloads {\n                let rows = GRDBDownload.filter(GRDBDownload.Columns.url == download.request.url)\n                try rows.updateAll(\n                    db,\n                    GRDBDownload.Columns.status.set(to: download.status.rawValue),\n                    GRDBDownload.Columns.taskId.set(to: download.taskId)\n                )\n            }\n        }\n    }\n\n    func delete(batchIds: [Int64]) async throws {\n        try await db.write { db in\n            for batchId in batchIds {\n                try GRDBDownloadBatch.filter(GRDBDownloadBatch.Columns.id == batchId).deleteAll(db)\n            }\n        }\n    }\n\n    // MARK: Private\n\n    private var migrator: DatabaseMigrator {\n        var migrator = DatabaseMigrator()\n        migrator.registerMigration(\"Download and DownloadBatches\") { db in\n            try db.create(table: \"grdbDownloadBatch\", options: .ifNotExists) { table in\n                table.autoIncrementedPrimaryKey(\"id\")\n            }\n\n            try db.create(table: \"grdbDownload\", options: .ifNotExists) { table in\n                table.autoIncrementedPrimaryKey(\"id\")\n                table.column(\"downloadBatchId\", .integer)\n                    .notNull()\n                    .indexed()\n                    .references(\"grdbDownloadBatch\", onDelete: .cascade)\n                table.column(\"url\", .text)\n                    .notNull()\n                    .indexed()\n                table.column(\"destination\", .text).notNull()\n                table.column(\"status\", .integer).notNull()\n                table.column(\"taskId\", .integer)\n            }\n        }\n        return migrator\n    }\n}\n\n// MARK: - Database Model\n\nprivate struct GRDBDownloadBatch: Identifiable, Codable, FetchableRecord, MutablePersistableRecord {\n    static let downloads = hasMany(GRDBDownload.self)\n\n    var id: Int64?\n\n    /// Updates the id after it has been inserted in the database.\n    mutating func didInsert(_ inserted: InsertionSuccess) {\n        id = inserted.rowID\n    }\n}\n\nextension GRDBDownloadBatch {\n    func toDownloadBatch(downloads: [Download]) -> DownloadBatch {\n        DownloadBatch(id: id!, downloads: downloads)\n    }\n\n    enum Columns {\n        static let id = Column(CodingKeys.id)\n    }\n}\n\nextension Download.Status: Codable, DatabaseValueConvertible { }\n\nprivate struct GRDBDownload: Identifiable, Codable, FetchableRecord, MutablePersistableRecord {\n    enum Columns {\n        static let url = Column(CodingKeys.url)\n        static let status = Column(CodingKeys.status)\n        static let taskId = Column(CodingKeys.taskId)\n    }\n\n    // MARK: Internal\n\n    static let downloadBatch = belongsTo(GRDBDownloadBatch.self)\n\n    var id: Int64?\n    var downloadBatchId: Int64\n    var url: URL\n    var destination: String\n    var status: Download.Status\n    var taskId: Int?\n\n    /// Updates the id after it has been inserted in the database.\n    mutating func didInsert(_ inserted: InsertionSuccess) {\n        id = inserted.rowID\n    }\n}\n\nextension GRDBDownload {\n    init(_ download: Download) {\n        downloadBatchId = download.batchId\n        url = download.request.url\n        destination = download.request.destination.path\n        status = download.status\n        taskId = download.taskId\n    }\n\n    func toDownload() -> Download {\n        Download(\n            taskId: taskId,\n            request: DownloadRequest(url: url, destination: RelativeFilePath(destination, isDirectory: false)),\n            status: status,\n            batchId: downloadBatchId\n        )\n    }\n}\n"
  },
  {
    "path": "Data/BatchDownloader/Sources/Entities/Download.swift",
    "content": "//\n//  Download.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2/14/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\npublic struct Download: Sendable {\n    public enum Status: Int, Sendable {\n        case downloading = 0 // Downloading or not started\n        case completed = 1\n    }\n\n    // MARK: Lifecycle\n\n    public init(taskId: Int? = nil, request: DownloadRequest, status: Status = .downloading, batchId: Int64) {\n        self.taskId = taskId\n        self.request = request\n        self.status = status\n        self.batchId = batchId\n    }\n\n    // MARK: Public\n\n    public let batchId: Int64\n    public let request: DownloadRequest\n\n    public var status: Status\n    public var taskId: Int?\n}\n\npublic struct DownloadBatch: Sendable {\n    // MARK: Lifecycle\n\n    public init(id: Int64, downloads: [Download]) {\n        self.id = id\n        self.downloads = downloads\n    }\n\n    // MARK: Public\n\n    public let id: Int64\n    public let downloads: [Download]\n}\n"
  },
  {
    "path": "Data/BatchDownloader/Sources/Entities/DownloadRequest.swift",
    "content": "//\n//  DownloadRequest.swift\n//  Quran\n//\n//  Created by Ahmed El-Helw on 2/11/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\nimport NetworkSupport\nimport Utilities\n\npublic struct DownloadRequest: Hashable, Sendable {\n    // MARK: Lifecycle\n\n    public init(url: URL, destination: RelativeFilePath) {\n        self.url = url\n        self.destination = destination\n    }\n\n    // MARK: Public\n\n    public let url: URL\n    public let destination: RelativeFilePath\n\n    public var resumePath: RelativeFilePath { destination.appendingPathExtension(Self.downloadResumeDataExtension) }\n\n    public var request: URLRequest {\n        URLRequest(url: url)\n    }\n\n    // MARK: Private\n\n    private static let downloadResumeDataExtension = \"resume\"\n}\n\npublic struct DownloadBatchRequest: Hashable, Sendable {\n    // MARK: Lifecycle\n\n    public init(requests: [DownloadRequest]) {\n        self.requests = requests\n    }\n\n    // MARK: Public\n\n    public let requests: [DownloadRequest]\n}\n\nextension NetworkSession {\n    func downloadTask(with request: DownloadRequest) -> NetworkSessionDownloadTask {\n        if let data = try? Data(contentsOf: request.resumePath) {\n            return downloadTask(withResumeData: data)\n        } else {\n            return downloadTask(with: URLRequest(url: request.url))\n        }\n    }\n}\n"
  },
  {
    "path": "Data/BatchDownloader/Sources/Errors/FileSystemError.swift",
    "content": "//\n//  FileSystemError.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/14/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\nimport Localization\n\npublic enum FileSystemError: Error {\n    case noDiskSpace\n    case unknown(Error)\n\n    // MARK: Lifecycle\n\n    public init(error: Error) {\n        if let error = error as? CocoaError {\n            if error.code == .fileWriteOutOfSpace {\n                self = .noDiskSpace\n            } else {\n                self = .unknown(error)\n            }\n        } else {\n            self = .unknown(error)\n        }\n    }\n}\n\nextension FileSystemError: LocalizedError {\n    public var errorDescription: String? {\n        let text: String = switch self {\n        case .unknown:\n            l(\"error.message.general\")\n        case .noDiskSpace:\n            l(\"error.message.no_disk_space\")\n        }\n        return text\n    }\n}\n"
  },
  {
    "path": "Data/BatchDownloader/Tests/DownloadManagerTests.swift",
    "content": "//\n//  DownloadManagerTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-01-22.\n//\n\nimport AsyncAlgorithms\nimport AsyncUtilitiesForTesting\nimport BatchDownloaderFake\nimport Combine\nimport NetworkSupport\nimport NetworkSupportFake\nimport Utilities\nimport XCTest\n@testable import BatchDownloader\n\nprivate typealias AsyncThrowingPublisher = Utilities.AsyncThrowingPublisher\n\nfinal class DownloadManagerTests: XCTestCase {\n    private struct CompletedTask {\n        let task: SessionTask\n        let text: String\n        let source: URL\n        let destination: RelativeFilePath\n        let progressLoops: Int\n        let listener: HistoryProgressListener\n        let progress: CurrentValueSubject<DownloadProgress, Error>\n    }\n\n    // MARK: Internal\n\n    override func setUp() async throws {\n        try await super.setUp()\n        testContext = BatchDownloaderFake.makeContext()\n        request1 = testContext.makeDownloadRequest(\"1\")\n        request2 = testContext.makeDownloadRequest(\"2\")\n        request3 = testContext.makeDownloadRequest(\"3\")\n        request4 = testContext.makeDownloadRequest(\"4\")\n        request5 = testContext.makeDownloadRequest(\"5\")\n        (downloader, session) = await testContext.makeDownloader()\n    }\n\n    override func tearDown() async throws {\n        try await super.tearDown()\n        downloader = nil\n        session = nil\n        request1 = nil\n        request2 = nil\n        request3 = nil\n        request4 = nil\n        request5 = nil\n        testContext.tearDown()\n        testContext = nil\n    }\n\n    @MainActor\n    func testBackgroundSessionCompletionHandler() async {\n        // assign a completion handler\n        @MainActor\n        class Calls {\n            var calls = 0\n            func increment() {\n                calls += 1\n            }\n        }\n        let calls = Calls()\n        downloader.setBackgroundSessionCompletion { @Sendable @MainActor in\n            XCTAssertTrue(Thread.isMainThread)\n            calls.increment()\n        }\n\n        // finish background events\n        let channel = AsyncChannel<Void>()\n        session?.finishBackgroundEvents(channel: channel)\n        await channel.next()\n\n        // verify completion handler called\n        XCTAssertEqual(calls.calls, 1)\n    }\n\n    func test_onGoingDownloads_whileStartNotFinished() async throws {\n        // Load a single batch\n        let batch = DownloadBatchRequest(requests: [request1])\n        _ = try await downloader.download(batch)\n\n        // Deallocate downloader & create new one\n        downloader = nil\n        downloader = await testContext.makeDownloaderDontWaitForSession()\n\n        // Test calling getOnGoingDownloads and start at the same time.\n        async let startTask: () = await downloader.start()\n        async let downloadsTask = await downloader.getOnGoingDownloads()\n        let (downloads, _) = await (downloadsTask, startTask)\n\n        // Verify\n        XCTAssertEqual(downloads.count, 1)\n    }\n\n    func testLoadingOnGoingDownload() async throws {\n        let emptyDownloads = await downloader.getOnGoingDownloads()\n        XCTAssertEqual(emptyDownloads.count, 0)\n\n        let batch = DownloadBatchRequest(requests: [request1, request2])\n        _ = try await downloader.download(batch)\n\n        // keeping downloads in memory\n        let memoryDownloads = await downloader.getOnGoingDownloads()\n        let downloads = await downloadTasks(from: memoryDownloads)\n        XCTAssertEqual(memoryDownloads.count, 1)\n        XCTAssertEqual(downloads.count, 2)\n\n        // deallocate downloader & create new one\n        downloader = nil\n        (downloader, session) = await testContext.makeDownloader(downloads: downloads)\n\n        // loaded downlodas from disk\n        let diskDownloads = await downloader.getOnGoingDownloads()\n        XCTAssertEqual(diskDownloads.count, 1)\n        await AsyncAssertEqual(await downloadTasks(from: diskDownloads).count, 2)\n    }\n\n    func testDownloadBatchCompleted() async throws {\n        // download a batch of 2 requests\n        let batch = DownloadBatchRequest(requests: [request1, request2])\n        let response = try await downloader.download(batch)\n        let requests = response.requests\n        XCTAssertEqual(requests, [request1, request2])\n\n        let batchListener = await HistoryProgressListener(response.progress)\n\n        // complete the downloads\n        let task1 = try await completeTask(response, i: 0)\n        let task2 = try await completeTask(response, i: 1, totalBytes: 100, progressLoops: 2)\n\n        // verify progress and promise result\n        try await verifyCompletedTask(task: task1)\n        try await verifyCompletedTask(task: task2)\n        await AsyncAssertEqual(1.0, await batchListener.values.last)\n\n        for try await _ in response.progress { }\n    }\n\n    func testCancelDownloadsRemovesBatches() async throws {\n        let batch = DownloadBatchRequest(requests: [request1, request2])\n        _ = try await downloader.download(batch)\n\n        let downloads = await downloader.getOnGoingDownloads()\n        XCTAssertEqual(downloads.count, 1)\n\n        await downloader.cancel(downloads: downloads)\n\n        let remaining = await downloader.getOnGoingDownloads()\n        XCTAssertEqual(remaining.count, 0)\n    }\n\n    @MainActor\n    func testDownloadBatch1Success1Error1CancelOthers() async throws {\n        // download a batch of 2 requests\n        let batchRequest = DownloadBatchRequest(requests: [request1, request2, request3, request4, request5])\n        let batch = try await downloader.download(batchRequest)\n        let startedRequests = await batch.requests.asyncFilter { await batch.details(of: $0).task != nil }\n        let requestToComplete = startedRequests[0]\n        let requestToFail = startedRequests[1]\n        let responseToFail = await batch.details(of: requestToFail)\n\n        // complete 1st download\n        let task1 = try await completeTask(batch, request: requestToComplete)\n\n        // fail 2nd download with no resume data\n        let task2 = try XCTUnwrap(responseToFail.task as? SessionTask)\n        session?.failDownloadTask(task2, error: URLError(.timedOut))\n\n        // verify overall result\n        await assertThrows(batch.progress, NetworkError.serverNotReachable)\n\n        // 1st task\n        try await verifyCompletedTask(task: task1)\n\n        // 2nd task\n        await assertThrows(responseToFail.progress.values(), NetworkError.serverNotReachable)\n        await AsyncAssertEqual(requestToFail.resumePath.isReachable, false)\n        await AsyncAssertEqual(requestToFail.destination.isReachable, false)\n\n        // other tasks should be cancelled\n        for request in batch.requests.filter({ !startedRequests.contains($0) }) {\n            let progress = await batch.details(of: request).progress.values()\n            await assertThrows(progress, CancellationError())\n        }\n    }\n\n    func testDownloadFailWithResumeData() async throws {\n        // download a batch of 2 requests\n        let batch = DownloadBatchRequest(requests: [request1])\n        let response = try await downloader.download(batch)\n        let details = await response.details(of: request1)\n\n        // fail download with resume data\n        let task = try XCTUnwrap(details.task as? SessionTask)\n        let resumeText = \"some data\"\n        let error = URLError(.networkConnectionLost, userInfo: [\n            NSURLSessionDownloadTaskResumeData: resumeText.data(using: .utf8) as Any,\n        ])\n        session?.failDownloadTask(task, error: error)\n\n        // verify promise result\n        await assertThrows(response.progress, NetworkError.connectionLost)\n\n        // verify task\n        await assertThrows(details.progress.values(), NetworkError.connectionLost)\n        try await AsyncAssertEqual(try String(contentsOf: request1.resumePath), resumeText)\n    }\n\n    func testDownloadBatchAfterEnquingThem() async throws {\n        // download a batch of 2 requests\n        let request = DownloadBatchRequest(requests: [request1, request2, request3, request4])\n        let response = try await downloader.download(request)\n\n        actor BatchCompletion {\n            var completed = false\n            func complete() {\n                completed = true\n            }\n        }\n\n        let batchCompletion = BatchCompletion()\n        Task {\n            for try await _ in response.progress { }\n            await batchCompletion.complete()\n        }\n\n        var notStartedRequests: [DownloadRequest] = []\n        for request in request.requests {\n            if await response.details(of: request).task == nil {\n                notStartedRequests.append(request)\n            }\n        }\n\n        XCTAssertEqual(notStartedRequests.count, 1)\n\n        // complete in progress tasks\n        var tasks: [CompletedTask] = []\n        let startedRequests = request.requests.filter { !notStartedRequests.contains($0) }\n        for startedRequest in startedRequests {\n            tasks.append(try await completeTask(response, request: startedRequest))\n        }\n\n        // Assert first 3 tasks completed but the overall batch not completed.\n        for startedRequest in startedRequests {\n            for try await _ in await response.details(of: startedRequest).progress.values() { }\n        }\n        await AsyncAssertEqual(await batchCompletion.completed, false)\n\n        for task in tasks {\n            try await verifyCompletedTask(task: task)\n        }\n\n        // Assert task started and complete them.\n        for notStartedRequest in notStartedRequests {\n            await AsyncAssertEqual(await response.details(of: notStartedRequest).task != nil, true)\n\n            let lastTask = try await completeTask(response, request: notStartedRequest)\n            try await verifyCompletedTask(task: lastTask)\n        }\n\n        // assert the overall  tasks completed\n        for try await _ in response.progress { }\n    }\n\n    func testDownloadBatchAfterEnquingThemInWithDifferentSession() async throws {\n        // start first session\n        let batch = DownloadBatchRequest(requests: [request1, request2, request3])\n        let memoryResponse = try await downloader.download(batch)\n\n        // get the tasks to pass them to the next session\n        let memoryDownloads = await downloader.getOnGoingDownloads()\n        let downloads = await downloadTasks(from: memoryDownloads)\n\n        // complete first task in the first session\n        let task1 = try await completeTask(memoryResponse, i: 0)\n\n        // deallocate downloader & create new one\n        downloader = nil\n        session = nil\n        (downloader, session) = await testContext.makeDownloader(downloads: downloads)\n\n        let diskDownloads = await downloader.getOnGoingDownloads()\n        let diskResponse = try XCTUnwrap(diskDownloads.first)\n\n        // wait for the queue to finish so the session is initialized\n        wait(for: try XCTUnwrap(session?.delegateQueue.underlyingQueue))\n\n        let task2 = try await completeTask(diskResponse, i: 1)\n        let task3 = try await completeTask(diskResponse, i: 2)\n\n        // assert the response & tasks completed\n        for try await _ in diskResponse.progress { }\n\n        try await verifyCompletedTask(task: task1)\n        try await verifyCompletedTask(task: task2)\n        try await verifyCompletedTask(task: task3)\n    }\n\n    func testDownloadBatchCancelled() async throws {\n        // download a batch of 2 requests, then cancel it\n        let batch = DownloadBatchRequest(requests: [request1, request2])\n        let response = try await downloader.download(batch)\n        // cancel\n        await response.cancel()\n\n        // wait until response is cancelled\n        await assertThrows(response.progress, CancellationError())\n\n        // TODO: Use deterministic solution.\n        for _ in 0 ..< 10 {\n            await Task.megaYield()\n        }\n\n        // verify response is cancelled\n        let downloads = await downloader.getOnGoingDownloads()\n        XCTAssertEqual(downloads.count, 0)\n\n        // other tasks should be cancelled as well\n        for request in response.requests {\n            let details = await response.details(of: request)\n            await assertThrows(details.progress.values(), CancellationError())\n        }\n    }\n\n    // MARK: Private\n\n    private var downloader: DownloadManager!\n    private var session: NetworkSessionFake?\n    private var testContext: BatchDownloaderTestContext!\n    private var request1: DownloadRequest!\n    private var request2: DownloadRequest!\n    private var request3: DownloadRequest!\n    private var request4: DownloadRequest!\n    private var request5: DownloadRequest!\n\n    private func completeTask(\n        _ batch: DownloadBatchResponse,\n        i: Int,\n        totalBytes: Int = 100,\n        progressLoops: Int = 4,\n        file: StaticString = #filePath,\n        line: UInt = #line\n    ) async throws -> CompletedTask {\n        try await completeTask(\n            batch,\n            request: batch.requests[i],\n            totalBytes: totalBytes,\n            progressLoops: progressLoops,\n            file: file,\n            line: line\n        )\n    }\n\n    private func completeTask(\n        _ batch: DownloadBatchResponse,\n        request: DownloadRequest,\n        totalBytes: Int = 100,\n        progressLoops: Int = 4,\n        file: StaticString = #filePath,\n        line: UInt = #line\n    ) async throws -> CompletedTask {\n        let details = await batch.details(of: request)\n        let task = try XCTUnwrap(details.task as? SessionTask, file: file, line: line)\n        let text = Int.random(in: 0 ..< Int.max).description\n        let source = try testContext.createTextFile(at: \"loc-\\(request.url.lastPathComponent).txt\", content: text)\n        XCTAssertTrue(source.isReachable, file: file, line: line)\n        let listener = await HistoryProgressListener(details.progress.values())\n        await session?.completeDownloadTask(task, location: source, totalBytes: totalBytes, progressLoops: progressLoops)\n        return CompletedTask(\n            task: task,\n            text: text,\n            source: source,\n            destination: request.destination,\n            progressLoops: progressLoops,\n            listener: listener,\n            progress: details.progress\n        )\n    }\n\n    private func verifyCompletedTask(task: CompletedTask, file: StaticString = #filePath, line: UInt = #line) async throws {\n        var progressValues: [Double] = []\n        for i in 0 ..< (task.progressLoops + 1) {\n            progressValues.append(1 / Double(task.progressLoops) * Double(i))\n        }\n        await AsyncAssertEqual(progressValues, await task.listener.values, file: file, line: line)\n\n        // Await completion\n        for try await _ in task.progress.values() { }\n\n        // verify downloads saved\n        XCTAssertFalse(task.source.isReachable, file: file, line: line)\n        XCTAssertEqual(try String(contentsOf: task.destination), task.text, file: file, line: line)\n    }\n\n    private func downloadTasks(from batches: [DownloadBatchResponse]) async -> [SessionTask] {\n        var tasks = [SessionTask]()\n        for batch in batches {\n            for request in batch.requests {\n                if let task = await batch.details(of: request).task as? SessionTask {\n                    tasks.append(task)\n                }\n            }\n        }\n        return tasks\n    }\n\n    private func assertThrows(\n        _ progress: AsyncThrowingPublisher<DownloadProgress>,\n        _ expectedError: (some Error)?,\n        _ message: @autoclosure () -> String = \"Didn't throw\",\n        file: StaticString = #filePath,\n        line: UInt = #line\n    ) async {\n        await AsyncAssertThrows(\n            try await { for try await _ in progress { } }(),\n            expectedError as NSError?,\n            message(),\n            file: file,\n            line: line\n        )\n    }\n}\n"
  },
  {
    "path": "Data/BatchDownloader/Tests/HistoryProgressListener.swift",
    "content": "//\n//  HistoryProgressListener.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-01-23.\n//\n\nimport AsyncAlgorithms\nimport BatchDownloader\nimport Utilities\n\nactor HistoryProgressListener {\n    // MARK: Lifecycle\n\n    init(_ subject: AsyncThrowingPublisher<DownloadProgress>) async {\n        let taskStarted = AsyncChannel<Void>()\n        cancellable = Task {\n            await taskStarted.send(())\n            for try await progress in subject {\n                if progress.progress != values.last {\n                    values.append(progress.progress)\n                }\n            }\n        }\n        .asCancellableTask()\n        await taskStarted.next()\n    }\n\n    // MARK: Internal\n\n    var values: [Double] = []\n    var cancellable: CancellableTask?\n}\n"
  },
  {
    "path": "Data/BatchDownloaderFake/BatchDownloaderFake.swift",
    "content": "//\n//  BatchDownloaderFake.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-03.\n//\n\nimport AsyncAlgorithms\nimport Foundation\nimport NetworkSupportFake\nimport SystemDependencies\nimport Utilities\nimport XCTest\n@testable import BatchDownloader\n\npublic final class BatchDownloaderTestContext: Sendable {\n    // MARK: Lifecycle\n\n    init(downloadsURL: RelativeFilePath) {\n        self.downloadsURL = downloadsURL\n    }\n\n    // MARK: Public\n\n    public let downloadsURL: RelativeFilePath\n\n    public func makeDownloader(downloads: [SessionTask] = [], fileManager: FileSystem = DefaultFileSystem()) async -> (DownloadManager, NetworkSessionFake) {\n        let persistence = makeDownloadsPersistence()\n        actor SessionActor {\n            var session: NetworkSessionFake!\n            let channel = AsyncChannel<Void>()\n            func setSession(_ session: NetworkSessionFake) async {\n                self.session = session\n                await channel.send()\n            }\n        }\n        let sessionActor = SessionActor()\n        let downloader = DownloadManager(\n            maxSimultaneousDownloads: BatchDownloaderFake.maxSimultaneousDownloads,\n            sessionFactory: { delegate, queue in\n                let session = NetworkSessionFake(queue: queue, delegate: delegate, downloads: downloads)\n                Task {\n                    await sessionActor.setSession(session)\n                }\n                return session\n            },\n            persistence: persistence,\n            fileManager: fileManager\n        )\n        await downloader.start()\n        await sessionActor.channel.next()\n        return (downloader, await sessionActor.session)\n    }\n\n    public func makeDownloaderDontWaitForSession(downloads: [SessionTask] = [], fileManager: FileSystem = DefaultFileSystem()) async -> DownloadManager {\n        let persistence = makeDownloadsPersistence()\n        let downloader = DownloadManager(\n            maxSimultaneousDownloads: BatchDownloaderFake.maxSimultaneousDownloads,\n            sessionFactory: { delegate, queue in\n                let session = NetworkSessionFake(queue: queue, delegate: delegate, downloads: downloads)\n                return session\n            },\n            persistence: persistence,\n            fileManager: fileManager\n        )\n        return downloader\n    }\n\n    public func tearDown() {\n        // Tests may still hold sqlite file descriptors briefly after assertions complete.\n        // Keep the per-test sandbox in place to avoid unlinking a live database.\n    }\n\n    public func makeDownloadRequest(_ id: String) -> DownloadRequest {\n        DownloadRequest(\n            url: URL(validURL: \"http://request/\\(id)\"),\n            destination: downloadsURL.appendingPathComponent(\"/\\(id).txt\", isDirectory: false)\n        )\n    }\n\n    public func createTextFile(at path: String, content: String) throws -> URL {\n        let directory = downloadsURL.appendingPathComponent(\"temp\", isDirectory: true).url\n        try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true)\n        let url = directory.appendingPathComponent(path)\n        let data = try XCTUnwrap(content.data(using: .utf8))\n        try data.write(to: url)\n        return url\n    }\n\n    // MARK: Private\n\n    private func makeDownloadsPersistence() -> GRDBDownloadsPersistence {\n        try? DefaultFileSystem().createDirectory(at: downloadsURL, withIntermediateDirectories: true)\n        let downloadsDBPath = downloadsURL.appendingPathComponent(\"ongoing-downloads.db\", isDirectory: false)\n        let persistence = GRDBDownloadsPersistence(fileURL: downloadsDBPath.url)\n        return persistence\n    }\n}\n\npublic enum BatchDownloaderFake {\n    // MARK: Public\n\n    public static let maxSimultaneousDownloads = 3\n\n    public static func makeContext() -> BatchDownloaderTestContext {\n        BatchDownloaderTestContext(\n            downloadsURL: RelativeFilePath(\"\\(downloads)/\\(UUID().uuidString)\", isDirectory: true)\n        )\n    }\n\n    // MARK: Private\n\n    private static let downloads = \"downloads\"\n}\n"
  },
  {
    "path": "Data/CoreDataModel/Quran.xcdatamodeld/Quran.xcdatamodel/contents",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<model type=\"com.apple.IDECoreDataModeler.DataModel\" documentVersion=\"1.0\" lastSavedToolsVersion=\"17192\" systemVersion=\"19H15\" minimumToolsVersion=\"Automatic\" sourceLanguage=\"Swift\" usedWithCloudKit=\"YES\" userDefinedModelVersionIdentifier=\"\">\n    <entity name=\"MO_LastPage\" representedClassName=\"MO_LastPage\" syncable=\"YES\" codeGenerationType=\"class\">\n        <attribute name=\"createdOn\" optional=\"YES\" attributeType=\"Date\" usesScalarValueType=\"NO\"/>\n        <attribute name=\"modifiedOn\" optional=\"YES\" attributeType=\"Date\" usesScalarValueType=\"NO\"/>\n        <attribute name=\"page\" optional=\"YES\" attributeType=\"Integer 32\" usesScalarValueType=\"YES\"/>\n    </entity>\n    <entity name=\"MO_Note\" representedClassName=\"MO_Note\" syncable=\"YES\" codeGenerationType=\"class\">\n        <attribute name=\"color\" optional=\"YES\" attributeType=\"Integer 32\" defaultValueString=\"0\" usesScalarValueType=\"YES\"/>\n        <attribute name=\"createdOn\" optional=\"YES\" attributeType=\"Date\" usesScalarValueType=\"NO\"/>\n        <attribute name=\"modifiedOn\" optional=\"YES\" attributeType=\"Date\" usesScalarValueType=\"NO\"/>\n        <attribute name=\"note\" optional=\"YES\" attributeType=\"String\"/>\n        <relationship name=\"verses\" optional=\"YES\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"MO_Verse\" inverseName=\"note\" inverseEntity=\"MO_Verse\"/>\n    </entity>\n    <entity name=\"MO_PageBookmark\" representedClassName=\"MO_PageBookmark\" syncable=\"YES\" codeGenerationType=\"class\">\n        <attribute name=\"color\" optional=\"YES\" attributeType=\"Integer 32\" defaultValueString=\"0\" usesScalarValueType=\"YES\"/>\n        <attribute name=\"createdOn\" optional=\"YES\" attributeType=\"Date\" usesScalarValueType=\"NO\"/>\n        <attribute name=\"modifiedOn\" optional=\"YES\" attributeType=\"Date\" usesScalarValueType=\"NO\"/>\n        <attribute name=\"page\" optional=\"YES\" attributeType=\"Integer 32\" usesScalarValueType=\"YES\"/>\n    </entity>\n    <entity name=\"MO_Verse\" representedClassName=\"MO_Verse\" syncable=\"YES\" codeGenerationType=\"class\">\n        <attribute name=\"ayah\" optional=\"YES\" attributeType=\"Integer 32\" usesScalarValueType=\"YES\"/>\n        <attribute name=\"sura\" optional=\"YES\" attributeType=\"Integer 32\" usesScalarValueType=\"YES\"/>\n        <relationship name=\"note\" optional=\"YES\" maxCount=\"1\" deletionRule=\"Nullify\" destinationEntity=\"MO_Note\" inverseName=\"verses\" inverseEntity=\"MO_Note\"/>\n    </entity>\n    <elements>\n        <element name=\"MO_LastPage\" positionX=\"-63\" positionY=\"-18\" width=\"128\" height=\"88\"/>\n        <element name=\"MO_Note\" positionX=\"163.96484375\" positionY=\"-12.609375\" width=\"128\" height=\"118\"/>\n        <element name=\"MO_PageBookmark\" positionX=\"-63.015625\" positionY=\"135.2890625\" width=\"128\" height=\"103\"/>\n        <element name=\"MO_Verse\" positionX=\"145.265625\" positionY=\"200.94921875\" width=\"128\" height=\"88\"/>\n    </elements>\n</model>"
  },
  {
    "path": "Data/CoreDataModel/Resources.swift",
    "content": "//\n//  Resources.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-28.\n//\n\nimport Foundation\n\npublic enum CoreDataModelResources {\n    public static let quranModel = Bundle.module.url(forResource: \"Quran\", withExtension: \"momd\")!\n}\n"
  },
  {
    "path": "Data/CoreDataModel/Schema.swift",
    "content": "//\n//  Schema.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-28.\n//\n\nimport CoreDataPersistence\n\npublic enum Schema {\n    public enum Note: String, CoreDataKey {\n        case color, createdOn, modifiedOn, note, verses\n    }\n\n    public enum Verse: String, CoreDataKey {\n        case ayah, sura, note\n    }\n\n    public enum PageBookmark: String, CoreDataKey {\n        case color, createdOn, modifiedOn, page\n    }\n\n    public enum LastPage: String, CoreDataKey {\n        case createdOn, modifiedOn, page\n    }\n}\n"
  },
  {
    "path": "Data/CoreDataPersistence/Sources/CoreDataPersistentHistoryProcessor.swift",
    "content": "//\n//  CoreDataPersistentHistoryProcessor.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/5/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport CoreData\nimport VLogging\n\nclass CoreDataPersistentHistoryProcessor {\n    // MARK: Lifecycle\n\n    init(name: String, uniquifiers: [CoreDataEntityUniquifier]) {\n        self.name = name\n        trasactionsMerger = CoreDataPersistentHistoryTransactionsMerger(uniquifiers: uniquifiers)\n    }\n\n    // MARK: Internal\n\n    /// Process persistent history, posting any relevant transactions to the current view.\n    func processNewHistory(using taskContext: NSManagedObjectContext) {\n        // Fetch history received from outside the app since the last token\n        let historyFetchRequest = NSPersistentHistoryTransaction.fetchRequest!\n        historyFetchRequest.predicate = NSPredicate(format: \"author != %@\", taskContext.transactionAuthor!)\n        let request = NSPersistentHistoryChangeRequest.fetchHistory(after: lastHistoryToken)\n        request.fetchRequest = historyFetchRequest\n\n        do {\n            let result = try taskContext.execute(request) as? NSPersistentHistoryResult\n            guard let transactions = result?.result as? [NSPersistentHistoryTransaction] else { return }\n            guard !transactions.isEmpty else { return }\n\n            trasactionsMerger.merge(transactions: transactions, using: taskContext)\n\n            // Update the history token using the last transaction.\n            lastHistoryToken = transactions.last!.token\n        } catch {\n            logger.error(\"Failed to retrieve history with error '\\(error)'\")\n        }\n    }\n\n    // MARK: Private\n\n    private let name: String\n    private let trasactionsMerger: CoreDataPersistentHistoryTransactionsMerger\n\n    /// The file URL for persisting the persistent history token.\n    private lazy var tokenFile: URL = {\n        let url = NSPersistentContainer.defaultDirectoryURL().appendingPathComponent(name, isDirectory: true)\n        if !FileManager.default.fileExists(atPath: url.path) {\n            do {\n                try FileManager.default.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil)\n            } catch {\n                logger.error(\"###\\(#function): Failed to create persistent container URL. Error = \\(error)\")\n            }\n        }\n        return url.appendingPathComponent(\"token.data\", isDirectory: false)\n    }()\n\n    /// Track the last history token processed for a store, and write its value to file.\n    ///\n    /// The historyQueue reads the token when executing operations, and updates it after processing is complete.\n    private lazy var lastHistoryToken: NSPersistentHistoryToken? = initialLastHistoryToken() {\n        didSet {\n            guard let token = lastHistoryToken,\n                  let data = try? NSKeyedArchiver.archivedData(withRootObject: token, requiringSecureCoding: true) else { return }\n\n            do {\n                try data.write(to: tokenFile)\n            } catch {\n                logger.error(\"###\\(#function): Failed to write token data. Error = \\(error)\")\n            }\n        }\n    }\n\n    private func initialLastHistoryToken() -> NSPersistentHistoryToken? {\n        // Load the last token from the token file.\n        if let tokenData = try? Data(contentsOf: tokenFile) {\n            do {\n                return try NSKeyedUnarchiver.unarchivedObject(ofClass: NSPersistentHistoryToken.self, from: tokenData)\n            } catch {\n                logger.error(\"###\\(#function): Failed to unarchive NSPersistentHistoryToken. Error = \\(error)\")\n            }\n        }\n        return nil\n    }\n}\n"
  },
  {
    "path": "Data/CoreDataPersistence/Sources/CoreDataPublisher.swift",
    "content": "//\n//  CoreDataPublisher.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-02-26.\n//\n\nimport Combine\nimport CoreData\nimport Crashing\n\n// Inspired by: https://gist.github.com/darrarski/28d2f5a28ef2c5669d199069c30d3d52\n\npublic final class CoreDataPublisher<Result>: Publisher where Result: NSFetchRequestResult {\n    // MARK: - Publisher\n\n    public typealias Output = [Result]\n    public typealias Failure = Never\n\n    // MARK: Lifecycle\n\n    public init(request: NSFetchRequest<Result>, context: NSManagedObjectContext) {\n        self.request = request\n        self.context = context\n    }\n\n    public convenience init(request: NSFetchRequest<Result>, stack: CoreDataStack) {\n        self.init(request: request, context: stack.viewContext)\n    }\n\n    // MARK: Public\n\n    public func receive<S>(subscriber: S) where S: Subscriber, S.Failure == Failure, S.Input == Output {\n        subscriber.receive(subscription: FetchedResultsSubscription(\n            subscriber: subscriber,\n            request: request,\n            context: context\n        ))\n    }\n\n    // MARK: Internal\n\n    let request: NSFetchRequest<Result>\n    let context: NSManagedObjectContext\n}\n\nfinal class FetchedResultsSubscription<SubscriberType, ResultType>: NSObject, Subscription, NSFetchedResultsControllerDelegate\n    where\n    SubscriberType: Subscriber,\n    SubscriberType.Input == [ResultType],\n    SubscriberType.Failure == Never,\n    ResultType: NSFetchRequestResult\n{\n    // MARK: Lifecycle\n\n    init(\n        subscriber: SubscriberType,\n        request: NSFetchRequest<ResultType>,\n        context: NSManagedObjectContext\n    ) {\n        self.subscriber = subscriber\n        self.request = request\n        self.context = context\n    }\n\n    // MARK: Internal\n\n    private(set) var subscriber: SubscriberType?\n    private(set) var request: NSFetchRequest<ResultType>?\n    private(set) var context: NSManagedObjectContext?\n    private(set) var controller: NSFetchedResultsController<ResultType>?\n\n    // MARK: - Subscription\n\n    func request(_ demand: Subscribers.Demand) {\n        guard demand > 0,\n              let subscriber,\n              let request,\n              let context else { return }\n\n        controller = NSFetchedResultsController(\n            fetchRequest: request,\n            managedObjectContext: context,\n            sectionNameKeyPath: nil,\n            cacheName: nil\n        )\n        controller?.delegate = self\n\n        do {\n            try controller?.performFetch()\n            if let fetchedObjects = controller?.fetchedObjects {\n                _ = subscriber.receive(fetchedObjects)\n            }\n        } catch {\n            crasher.recordError(error, reason: \"Error retrieving core data entities. Request: \\(request)\")\n        }\n    }\n\n    // MARK: - Cancellable\n\n    func cancel() {\n        subscriber = nil\n        controller = nil\n        request = nil\n        context = nil\n    }\n\n    // MARK: - NSFetchedResultsControllerDelegate\n\n    func controllerDidChangeContent(\n        _ controller: NSFetchedResultsController<NSFetchRequestResult>\n    ) {\n        guard let subscriber,\n              controller == self.controller else { return }\n\n        if let fetchedObjects = self.controller?.fetchedObjects {\n            _ = subscriber.receive(fetchedObjects)\n        }\n    }\n}\n"
  },
  {
    "path": "Data/CoreDataPersistence/Sources/CoreDataStack.swift",
    "content": "//\n//  CoreDataStack.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/1/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport CoreData\nimport Foundation\nimport Utilities\nimport VLogging\n\n/// Core Data stack setup including history processing.\npublic class CoreDataStack {\n    // MARK: Lifecycle\n\n    public init(name: String, modelUrl: URL, lazyUniquifiers: @escaping () -> [CoreDataEntityUniquifier]) {\n        self.name = name\n        self.modelUrl = modelUrl\n        self.lazyUniquifiers = lazyUniquifiers\n    }\n\n    // MARK: Public\n\n    public var viewContext: NSManagedObjectContext {\n        persistentContainer.viewContext\n    }\n\n    public class func removePersistentFiles() {\n        let dataDirectory = NSPersistentContainer.defaultDirectoryURL()\n        FileManager.default.removeDirectoryContents(at: dataDirectory)\n    }\n\n    public func newBackgroundContext() -> NSManagedObjectContext {\n        let context = persistentContainer.newBackgroundContext()\n        context.transactionAuthor = appTransactionAuthorName\n        context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy\n        return context\n    }\n\n    // MARK: Internal\n\n    /// A persistent container that can load cloud-backed and non-cloud stores.\n    lazy var persistentContainer: NSPersistentContainer = {\n        let container = newPersistenceContainer()\n\n        // Enable history tracking and remote notifications\n        guard let description = container.persistentStoreDescriptions.first else {\n            fatalError(\"###\\(#function): Failed to retrieve a persistent store description.\")\n        }\n        description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)\n        description.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)\n\n        container.loadPersistentStores(completionHandler: { _, error in\n            guard let error = error as NSError? else { return }\n            fatalError(\"###\\(#function): Failed to load persistent store: \\(error)\")\n        })\n\n        container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy\n        container.viewContext.transactionAuthor = appTransactionAuthorName\n\n        // Pin the viewContext to the current generation token and set it to keep itself up to date with local changes.\n        container.viewContext.automaticallyMergesChangesFromParent = true\n        do {\n            try container.viewContext.setQueryGenerationFrom(.current)\n        } catch {\n            fatalError(\"###\\(#function): Failed to pin viewContext to the current generation:\\(error)\")\n        }\n\n        // Observe Core Data remote change notifications.\n        NotificationCenter.default.addObserver(\n            self, selector: #selector(Self.storeRemoteChange(_:)),\n            name: .NSPersistentStoreRemoteChange, object: container.persistentStoreCoordinator\n        )\n\n        return container\n    }()\n\n    // MARK: Private\n\n    private let appTransactionAuthorName = \"app\"\n\n    private let name: String\n    private let modelUrl: URL\n\n    private let lazyUniquifiers: () -> [CoreDataEntityUniquifier]\n    private lazy var uniquifiers: [CoreDataEntityUniquifier] = lazyUniquifiers()\n\n    private lazy var historyProcessor: CoreDataPersistentHistoryProcessor = CoreDataPersistentHistoryProcessor(name: name, uniquifiers: uniquifiers)\n\n    /// An operation queue for handling history processing tasks: watching changes, deduplicating entities, and triggering UI updates if needed.\n    private lazy var historyQueue: OperationQueue = {\n        let queue = OperationQueue()\n        queue.maxConcurrentOperationCount = 1\n        return queue\n    }()\n\n    private func newPersistenceContainer() -> NSPersistentContainer {\n        guard let model = NSManagedObjectModel(contentsOf: modelUrl) else {\n            fatalError(\"Cannot find \\(modelUrl)\")\n        }\n\n        // Create a container that can load CloudKit-backed stores\n        return NSPersistentCloudKitContainer(name: name, managedObjectModel: model)\n    }\n\n    /// Handle remote store change notifications (.NSPersistentStoreRemoteChange).\n    @objc\n    private func storeRemoteChange(_ notification: Notification) {\n        logger.info(\"Merging changes from the other persistent store coordinator.\")\n\n        // Process persistent history to merge changes from other coordinators.\n        historyQueue.addOperation {\n            let taskContext = self.newBackgroundContext()\n            taskContext.performAndWait {\n                self.historyProcessor.processNewHistory(using: taskContext)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Data/CoreDataPersistence/Sources/CoreDataTypes.swift",
    "content": "//\n//  CoreDataTypes.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/1/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport CoreData\nimport Foundation\n\npublic protocol CoreDataKey {\n    var rawValue: String { get }\n}\n\npublic extension NSSortDescriptor {\n    convenience init(key: CoreDataKey, ascending: Bool) {\n        self.init(key: key.rawValue, ascending: ascending)\n    }\n}\n\npublic extension NSManagedObject {\n    func predicate<Key: CoreDataKey>(equals keys: Key...) -> NSPredicate {\n        let keysAndValues = keys.map {\n            ($0, self.value(forKey: $0.rawValue)!)\n        }\n        return .init(equals: keysAndValues)\n    }\n}\n\npublic extension NSPredicate {\n    convenience init<Key: CoreDataKey>(equals keysAndValues: (Key, Any)...) {\n        self.init(equals: keysAndValues)\n    }\n\n    convenience init(equals keysAndValues: [(some CoreDataKey, Any)]) {\n        let values = keysAndValues.map(\\.1)\n        let keysFormats = keysAndValues.map { \"\\($0.0.rawValue) == %@\" }\n        self.init(format: keysFormats.joined(separator: \" AND \"), argumentArray: values)\n    }\n}\n"
  },
  {
    "path": "Data/CoreDataPersistence/Sources/NSManagedObjectContext+Extensions.swift",
    "content": "//\n//  NSManagedObjectContext+Extensions.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/5/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport CoreData\nimport Crashing\n\npublic extension NSManagedObjectContext {\n    /// Save a context, or handle the save error (for example, when there data inconsistency or low memory).\n    func save(with context: String) throws {\n        guard hasChanges else { return }\n        do {\n            try save()\n        } catch {\n            crasher.recordError(error, reason: \"Error saving context '\\(context)'\")\n            throw error\n        }\n    }\n\n    func perform<T>(_ operation: @Sendable @escaping (NSManagedObjectContext) throws -> T) async throws -> T {\n        try await withCheckedThrowingContinuation { continuation in\n            perform {\n                do {\n                    let result = try operation(self)\n                    continuation.resume(returning: result)\n                } catch {\n                    continuation.resume(throwing: error)\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Data/CoreDataPersistence/Sources/merging/CoreDataEntityUniquifier.swift",
    "content": "//\n//  CoreDataEntityUniquifier.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/6/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport CoreData\nimport SystemDependencies\n\npublic protocol CoreDataEntityUniquifier {\n    func merge(transactions: [PersistentHistoryTransaction], using taskContext: NSManagedObjectContext) throws\n}\n"
  },
  {
    "path": "Data/CoreDataPersistence/Sources/merging/CoreDataInsertedEntitiesRetriever.swift",
    "content": "//\n//  CoreDataInsertedEntitiesRetriever.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/6/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport CoreData\nimport SystemDependencies\n\npublic struct CoreDataInsertedEntitiesRetriever<T: NSManagedObject> {\n    // MARK: Lifecycle\n\n    public init() { }\n\n    // MARK: Public\n\n    public func insertedEntities(transactions: [PersistentHistoryTransaction]) -> [NSManagedObjectID] {\n        var newEntityObjectIDs = [NSManagedObjectID]()\n        let entityName = T.entity().name\n        for transaction in transactions {\n            for change in transaction.changes() {\n                if change.changedObjectID.entity.name == entityName && change.changeType == .insert {\n                    newEntityObjectIDs.append(change.changedObjectID)\n                }\n            }\n        }\n        return newEntityObjectIDs\n    }\n}\n"
  },
  {
    "path": "Data/CoreDataPersistence/Sources/merging/CoreDataPersistentHistoryTransactionsMerger.swift",
    "content": "//\n//  CoreDataPersistentHistoryTransactionsMerger.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/5/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport CoreData\nimport SystemDependencies\nimport VLogging\n\nstruct CoreDataPersistentHistoryTransactionsMerger {\n    // MARK: Lifecycle\n\n    init(uniquifiers: [CoreDataEntityUniquifier]) {\n        self.uniquifiers = uniquifiers\n    }\n\n    // MARK: Internal\n\n    func merge(transactions: [PersistentHistoryTransaction], using taskContext: NSManagedObjectContext) {\n        for uniquifier in uniquifiers {\n            do {\n                try uniquifier.merge(transactions: transactions, using: taskContext)\n            } catch {\n                logger.error(\"Error trying to merge transactions by \\(type(of: uniquifier)). Error: \\(error)\")\n                taskContext.reset()\n            }\n        }\n    }\n\n    // MARK: Private\n\n    private let uniquifiers: [CoreDataEntityUniquifier]\n}\n"
  },
  {
    "path": "Data/CoreDataPersistence/Sources/merging/SimpleCoreDataEntityUniquifier.swift",
    "content": "//\n//  SimpleCoreDataEntityUniquifier.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/6/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport CoreData\nimport SystemDependencies\nimport VLogging\n\npublic struct SimpleCoreDataEntityUniquifier<T: NSManagedObject>: CoreDataEntityUniquifier {\n    // MARK: Lifecycle\n\n    public init<Key: CoreDataKey>(sortBy: Key, ascending: Bool, key: Key) {\n        sortDescriptors = [NSSortDescriptor(key: sortBy, ascending: ascending)]\n        predicate = { $0.predicate(equals: key) }\n    }\n\n    public init(sortDescriptors: [NSSortDescriptor], predicate: @escaping (T) -> NSPredicate) {\n        self.sortDescriptors = sortDescriptors\n        self.predicate = predicate\n    }\n\n    // MARK: Public\n\n    public func merge(\n        transactions: [PersistentHistoryTransaction],\n        using taskContext: NSManagedObjectContext\n    ) throws {\n        let insertedEntitiesRetriever = CoreDataInsertedEntitiesRetriever<T>()\n        let newEntitiesObjectIds = insertedEntitiesRetriever.insertedEntities(transactions: transactions)\n        logger.notice(\"[CoreData] \\(newEntitiesObjectIds.count) new \\(T.self) inserted\")\n\n        for objectId in newEntitiesObjectIds {\n            if let duplicates = try findDuplicates(of: objectId, using: taskContext) {\n                delete(duplicates, using: taskContext)\n            }\n        }\n        // Save the background context to trigger a notification and merge the result into the viewContext.\n        try taskContext.save(with: \"Deduplicating \\(T.entity().name ?? \"\")\")\n    }\n\n    // MARK: Private\n\n    private let sortDescriptors: [NSSortDescriptor]\n    private let predicate: (T) -> NSPredicate\n\n    private func findDuplicates(of objectID: NSManagedObjectID, using context: NSManagedObjectContext) throws -> [NSManagedObject]? {\n        guard let managedObject = context.object(with: objectID) as? T else {\n            return nil\n        }\n        let fetchRequest = fetchRequestDuplicating(managedObject)\n        let duplicatedEntities = try context.fetch(fetchRequest)\n        guard duplicatedEntities.count > 1 else {\n            return nil\n        }\n        let duplicatesToDelete = Array(duplicatedEntities.dropFirst())\n        return duplicatesToDelete\n    }\n\n    private func fetchRequestDuplicating(_ managedObject: T) -> NSFetchRequest<T> {\n        let fetchRequest = NSFetchRequest<T>(entityName: T.entity().name!)\n        fetchRequest.sortDescriptors = sortDescriptors\n        fetchRequest.predicate = predicate(managedObject)\n        return fetchRequest\n    }\n\n    private func delete(_ duplicatesToDelete: [NSManagedObject], using context: NSManagedObjectContext) {\n        for entity in duplicatesToDelete {\n            context.delete(entity)\n        }\n    }\n}\n"
  },
  {
    "path": "Data/CoreDataPersistence/Tests/CoreDataInsertedEntitiesRetrieverTests.swift",
    "content": "//\n//  CoreDataInsertedEntitiesRetrieverTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-28.\n//\n\nimport CoreData\nimport CoreDataModel\nimport SystemDependencies\nimport SystemDependenciesFake\nimport XCTest\n@testable import CoreDataPersistence\n\nclass CoreDataInsertedEntitiesRetrieverTests: XCTestCase {\n    var sut: CoreDataInsertedEntitiesRetriever<MO_LastPage>!\n    var transactions: [PersistentHistoryTransaction]!\n    var context: NSManagedObjectContext!\n    var stack: CoreDataStack!\n    var object1: MO_LastPage!\n    var object2: MO_LastPage!\n    var object3: MO_LastPage!\n\n    override func setUp() {\n        super.setUp()\n        stack = CoreDataStack.testingStack()\n        context = stack.newBackgroundContext()\n\n        object1 = MO_LastPage(context: context)\n        object2 = MO_LastPage(context: context)\n        object3 = MO_LastPage(context: context)\n\n        sut = CoreDataInsertedEntitiesRetriever()\n\n        // Create a list of changes, including insertions, modifications and deletions\n        let insertedChange = PersistentHistoryChangeFake(object: object1, changeType: .insert)\n        let updatedChange = PersistentHistoryChangeFake(object: object2, changeType: .update)\n        let deletedChange = PersistentHistoryChangeFake(object: object3, changeType: .delete)\n\n        // Create mock transactions\n        let transaction1 = PersistentHistoryTransactionFake(historyChanges: [insertedChange, updatedChange])\n        let transaction2 = PersistentHistoryTransactionFake(historyChanges: [deletedChange])\n\n        transactions = [transaction1, transaction2]\n    }\n\n    override func tearDown() {\n        CoreDataStack.removePersistentFiles()\n        sut = nil\n        transactions = nil\n        context = nil\n        stack = nil\n        super.tearDown()\n    }\n\n    func test_findingInsertedEntities() {\n        let insertedEntities = sut.insertedEntities(transactions: transactions)\n\n        // Check that the method correctly identified the inserted entities.\n        XCTAssertEqual(insertedEntities, [object1.objectID])\n    }\n}\n"
  },
  {
    "path": "Data/CoreDataPersistence/Tests/CoreDataPublisherTests.swift",
    "content": "//\n//  CoreDataPublisherTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-28.\n//\n\nimport AsyncUtilitiesForTesting\nimport Combine\nimport CoreData\nimport CoreDataModel\nimport XCTest\n@testable import CoreDataPersistence\n\nclass CoreDataPublisherTests: XCTestCase {\n    var coreDataStack: CoreDataStack!\n    var context: NSManagedObjectContext!\n    var cancellables = Set<AnyCancellable>()\n    var request: NSFetchRequest<MO_Note>!\n\n    override func setUp() {\n        super.setUp()\n        // Instantiating your CoreDataStack\n        coreDataStack = CoreDataStack.testingStack()\n        context = coreDataStack.newBackgroundContext()\n\n        request = MO_Note.fetchRequest()\n        request.sortDescriptors = [NSSortDescriptor(key: Schema.Note.modifiedOn, ascending: false)]\n    }\n\n    override func tearDown() {\n        super.tearDown()\n        cancellables.removeAll()\n        // Clean up after each test\n        CoreDataStack.removePersistentFiles()\n        coreDataStack = nil\n    }\n\n    func test_initialValues() throws {\n        // Given\n        let publisher = CoreDataPublisher(request: request, context: context)\n\n        // Verify\n        XCTAssertEqual([[]], try awaitPublisher(publisher, numberOfElements: 1))\n\n        // Create new note.\n        let note = insertNewNote(\"Hello, world!\", modifiedOn: 1945)\n        try context.save()\n\n        // Verify\n        XCTAssertEqual([[note.note]], try awaitPublisher(publisher, numberOfElements: 1).map { $0.map(\\.note) })\n    }\n\n    func test_valuesUpdateOverTime() throws {\n        // Given\n        let publisher = CoreDataPublisher(request: request, context: context)\n\n        let expectation = expectation(description: \"Awaiting publisher\")\n\n        var elements = [[MO_Note]]()\n        let cancellable = publisher.sink { value in\n            elements.append(value)\n            if elements.count == 2 {\n                expectation.fulfill()\n            }\n        }\n\n        // Create two notes.\n        let note1 = insertNewNote(\"Hello, world!\", modifiedOn: 1945)\n        let note2 = insertNewNote(\"Welcome!\", modifiedOn: 100)\n        try context.save()\n\n        wait(for: [expectation], timeout: 5)\n        cancellable.cancel()\n\n        XCTAssertEqual([[], [note1.note, note2.note]], elements.map { $0.map(\\.note) })\n    }\n\n    // MARK: - Helpers\n\n    func insertNewNote(_ text: String, modifiedOn: TimeInterval) -> MO_Note {\n        let note = MO_Note(context: context)\n        note.modifiedOn = Date(timeIntervalSince1970: modifiedOn)\n        note.note = text\n        return note\n    }\n}\n"
  },
  {
    "path": "Data/CoreDataPersistence/Tests/CoreDataStackTests.swift",
    "content": "//\n//  CoreDataStackTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-28.\n//\n\nimport CoreData\nimport XCTest\n@testable import CoreDataPersistence\n\nclass CoreDataStackTests: XCTestCase {\n    var stack: CoreDataStack!\n\n    override func setUp() {\n        super.setUp()\n        stack = CoreDataStack.testingStack()\n    }\n\n    override func tearDown() {\n        stack = nil\n        super.tearDown()\n    }\n\n    func test_persistentContainerCreated() {\n        XCTAssertNotNil(stack.persistentContainer)\n\n        XCTAssertIdentical(stack.viewContext.mergePolicy as AnyObject, NSMergeByPropertyObjectTrumpMergePolicy)\n        XCTAssertEqual(stack.viewContext.transactionAuthor, \"app\")\n        XCTAssertTrue(stack.viewContext.automaticallyMergesChangesFromParent)\n\n        let context = stack.newBackgroundContext()\n        XCTAssertEqual(context.transactionAuthor, \"app\")\n\n        let description = stack.persistentContainer.persistentStoreDescriptions.first\n        XCTAssertNotNil(description)\n        XCTAssertEqual(description?.options[NSPersistentHistoryTrackingKey] as? NSNumber, NSNumber(value: true))\n        XCTAssertEqual(description?.options[NSPersistentStoreRemoteChangeNotificationPostOptionKey] as? NSNumber, NSNumber(value: true))\n    }\n}\n"
  },
  {
    "path": "Data/CoreDataPersistence/Tests/SimpleCoreDataEntityUniquifierTests.swift",
    "content": "//\n//  SimpleCoreDataEntityUniquifierTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-28.\n//\n\nimport CoreData\nimport CoreDataModel\nimport CoreDataPersistenceTestSupport\nimport SystemDependencies\nimport SystemDependenciesFake\nimport XCTest\n@testable import CoreDataPersistence\n\nclass SimpleCoreDataEntityUniquifierTests: XCTestCase {\n    var sut: SimpleCoreDataEntityUniquifier<MO_PageBookmark>!\n    var transactions: [PersistentHistoryTransaction]!\n    var context: NSManagedObjectContext!\n    var stack: CoreDataStack!\n\n    var existingEntity: MO_PageBookmark!\n    var entity1: MO_PageBookmark!\n    var entity2: MO_PageBookmark!\n    var entity3: MO_PageBookmark!\n\n    override func setUp() async throws {\n        try await super.setUp()\n\n        stack = CoreDataStack.testingStack()\n        context = stack.newBackgroundContext()\n\n        existingEntity = context.newPageBookmark(page: 45, modifiedOn: 100)\n        entity1 = context.newPageBookmark(page: 45, modifiedOn: 120)\n        entity2 = context.newPageBookmark(page: 500, modifiedOn: 1945)\n        entity3 = context.newPageBookmark(page: 100, modifiedOn: 5555)\n\n        // Delete the 3rd entity entity\n        context.delete(entity3)\n        try context.save()\n\n        // Create a list of changes, including insertions, modifications and deletions\n        let insertedChange = PersistentHistoryChangeFake(object: entity1, changeType: .insert)\n        let updatedChange = PersistentHistoryChangeFake(object: entity2, changeType: .update)\n        let deletedChange = PersistentHistoryChangeFake(object: entity3, changeType: .delete)\n\n        // Create mock transactions\n        let transaction1 = PersistentHistoryTransactionFake(historyChanges: [insertedChange, updatedChange])\n        let transaction2 = PersistentHistoryTransactionFake(historyChanges: [deletedChange])\n        transactions = [transaction1, transaction2]\n\n        sut = SimpleCoreDataEntityUniquifier(\n            sortBy: Schema.PageBookmark.modifiedOn,\n            ascending: false,\n            key: .page\n        )\n    }\n\n    override func tearDown() {\n        CoreDataStack.removePersistentFiles()\n        sut = nil\n        transactions = nil\n        context = nil\n        stack = nil\n        super.tearDown()\n    }\n\n    func test_merge() throws {\n        XCTAssertEqual([45, 45, 500], try context.allPageBookmarks().map(\\.page))\n\n        XCTAssertNoThrow(try sut.merge(transactions: transactions, using: context))\n\n        XCTAssertEqual([45, 500], try stack.newBackgroundContext().allPageBookmarks().map(\\.page))\n    }\n}\n"
  },
  {
    "path": "Data/CoreDataPersistenceTestSupport/CoreDataStack+Extensions.swift",
    "content": "//\n//  CoreDataStack+Extensions.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-30.\n//\n\nimport CoreData\nimport CoreDataModel\nimport CoreDataPersistence\nimport SystemDependenciesFake\n\nextension CoreDataStack {\n    public static func testingStack() -> CoreDataStack {\n        CoreDataStack(name: \"TestApp\", modelUrl: CoreDataModelResources.quranModel, lazyUniquifiers: { [] })\n    }\n}\n\nextension PersistentHistoryChangeFake {\n    public init(object: NSManagedObject, changeType: NSPersistentHistoryChangeType) {\n        self.init(changedObjectID: object.objectID, changeType: changeType)\n    }\n}\n"
  },
  {
    "path": "Data/CoreDataPersistenceTestSupport/LastPage+++.swift",
    "content": "//\n//  LastPage+++.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-30.\n//\n\nimport CoreData\nimport CoreDataModel\n\nextension NSManagedObjectContext {\n    public func newLastPage(page: Int32, modifiedOn: TimeInterval) -> MO_LastPage {\n        let object = MO_LastPage(context: self)\n        object.page = page\n        object.modifiedOn = Date(timeIntervalSince1970: modifiedOn)\n        return object\n    }\n\n    public func allLastPages() throws -> [MO_LastPage] {\n        let fetchRequest = MO_LastPage.fetchRequest()\n        fetchRequest.sortDescriptors = [NSSortDescriptor(key: Schema.PageBookmark.modifiedOn, ascending: false)]\n        return try fetch(fetchRequest)\n    }\n}\n"
  },
  {
    "path": "Data/CoreDataPersistenceTestSupport/Note+++.swift",
    "content": "//\n//  Note+++.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-01.\n//\n\nimport CoreData\nimport CoreDataModel\n\nextension NSManagedObjectContext {\n    public func newVerse(sura: Int32, ayah: Int32) -> MO_Verse {\n        let verse = MO_Verse(context: self)\n        verse.sura = sura\n        verse.ayah = ayah\n        return verse\n    }\n\n    public func newNote(_ text: String, modifiedOn: TimeInterval) -> MO_Note {\n        let note = MO_Note(context: self)\n        note.note = text\n        note.modifiedOn = Date(timeIntervalSince1970: modifiedOn)\n        return note\n    }\n\n    public func allNotes() throws -> [MO_Note] {\n        let fetchRequest = MO_Note.fetchRequest()\n        fetchRequest.sortDescriptors = [NSSortDescriptor(key: Schema.Note.modifiedOn, ascending: false)]\n        return try fetch(fetchRequest)\n    }\n}\n"
  },
  {
    "path": "Data/CoreDataPersistenceTestSupport/PageBookmark+++.swift",
    "content": "//\n//  PageBookmark+++.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-30.\n//\n\nimport CoreData\nimport CoreDataModel\nimport Foundation\n\nextension NSManagedObjectContext {\n    public func newPageBookmark(page: Int32, modifiedOn: TimeInterval) -> MO_PageBookmark {\n        let object = MO_PageBookmark(context: self)\n        object.page = page\n        object.modifiedOn = Date(timeIntervalSince1970: modifiedOn)\n        return object\n    }\n\n    public func allPageBookmarks() throws -> [MO_PageBookmark] {\n        let fetchRequest = MO_PageBookmark.fetchRequest()\n        fetchRequest.sortDescriptors = [NSSortDescriptor(key: Schema.PageBookmark.modifiedOn, ascending: true)]\n        return try fetch(fetchRequest)\n    }\n}\n"
  },
  {
    "path": "Data/LastPagePersistence/Sources/CoreDataLastPageOverflowHandler.swift",
    "content": "//\n//  CoreDataLastPageOverflowHandler.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/7/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport CoreData\nimport CoreDataModel\n\nstruct CoreDataLastPageOverflowHandler {\n    // MARK: Internal\n\n    func removeOverflowIfneeded(using context: NSManagedObjectContext) throws {\n        let request: NSFetchRequest<MO_LastPage> = MO_LastPage.fetchRequest()\n        request.sortDescriptors = [NSSortDescriptor(key: Schema.LastPage.modifiedOn, ascending: false)]\n        let lastPages = try context.fetch(request)\n\n        // remove old pages up to (total - maxNumberOfLastPages)\n        if lastPages.count > Self.maxNumberOfLastPages {\n            for i in Self.maxNumberOfLastPages ..< lastPages.count {\n                context.delete(lastPages[i])\n            }\n        }\n        try context.save(with: \"Deleting overflow LastPages\")\n    }\n\n    // MARK: Private\n\n    private static let maxNumberOfLastPages = 3\n}\n"
  },
  {
    "path": "Data/LastPagePersistence/Sources/CoreDataLastPagePersistence.swift",
    "content": "//\n//  CoreDataLastPagePersistence.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/1/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport Combine\nimport CoreData\nimport CoreDataModel\nimport CoreDataPersistence\nimport Foundation\n\npublic final class CoreDataLastPagePersistence: LastPagePersistence {\n    // MARK: Lifecycle\n\n    public init(stack: CoreDataStack) {\n        context = stack.newBackgroundContext()\n    }\n\n    // MARK: Public\n\n    public func lastPages() -> AnyPublisher<[LastPagePersistenceModel], Never> {\n        let request: NSFetchRequest<MO_LastPage> = MO_LastPage.fetchRequest()\n        request.sortDescriptors = [NSSortDescriptor(key: Schema.LastPage.modifiedOn, ascending: false)]\n        return CoreDataPublisher(request: request, context: context)\n            .map { lastPages in lastPages.prefix(Self.maxNumberOfLastPages).map { LastPagePersistenceModel($0) } }\n            .eraseToAnyPublisher()\n    }\n\n    public func retrieveAll() async throws -> [LastPagePersistenceModel] {\n        try await context.perform { context in\n            let request: NSFetchRequest<MO_LastPage> = MO_LastPage.fetchRequest()\n            request.sortDescriptors = [NSSortDescriptor(key: Schema.LastPage.modifiedOn, ascending: false)]\n            let lastPages = try context.fetch(request)\n            return lastPages.prefix(Self.maxNumberOfLastPages).map { LastPagePersistenceModel($0) }\n        }\n    }\n\n    public func add(page: Int) async throws -> LastPagePersistenceModel {\n        try await context.perform { context in\n            try self.add(page: page, using: context)\n        }\n    }\n\n    public func update(page oldPage: Int, toPage newPage: Int) async throws -> LastPagePersistenceModel {\n        try await context.perform { context in\n            // delete newPage, so we can replace it\n            try self.delete(page: newPage, using: context)\n\n            // get existing old page\n            let request: NSFetchRequest<MO_LastPage> = MO_LastPage.fetchRequest()\n            request.predicate = NSPredicate(equals: (Schema.LastPage.page, oldPage))\n            let lastPages = try context.fetch(request)\n\n            // insert new page if no old page\n            guard let existingPage = lastPages.first else {\n                return try self.add(page: newPage, using: context)\n            }\n\n            // update\n            existingPage.page = Int32(newPage)\n            existingPage.modifiedOn = Date()\n            try context.save(with: \"Update LastPage\")\n            return LastPagePersistenceModel(existingPage)\n        }\n    }\n\n    // MARK: Private\n\n    private static let maxNumberOfLastPages = 3\n\n    private let context: NSManagedObjectContext\n    private let overflowHandler = CoreDataLastPageOverflowHandler()\n\n    private func add(page: Int, using context: NSManagedObjectContext) throws -> LastPagePersistenceModel {\n        try delete(page: page, using: context)\n\n        // insert new page\n        let newLastPage = MO_LastPage(context: context)\n        newLastPage.createdOn = Date()\n        newLastPage.modifiedOn = Date()\n        newLastPage.page = Int32(page)\n\n        try context.save(with: \"Add LastPage\")\n\n        // remove overflow\n        try overflowHandler.removeOverflowIfneeded(using: context)\n        return LastPagePersistenceModel(newLastPage)\n    }\n\n    private func delete(page: Int, using context: NSManagedObjectContext) throws {\n        let request: NSFetchRequest<MO_LastPage> = MO_LastPage.fetchRequest()\n        request.predicate = NSPredicate(equals: (Schema.LastPage.page, page))\n        let lastPages = try context.fetch(request)\n        for lastPage in lastPages {\n            context.delete(lastPage)\n        }\n    }\n}\n\nprivate extension LastPagePersistenceModel {\n    init(_ other: MO_LastPage) {\n        self.init(\n            page: Int(other.page),\n            createdOn: other.createdOn ?? Date(),\n            modifiedOn: other.modifiedOn ?? Date()\n        )\n    }\n}\n"
  },
  {
    "path": "Data/LastPagePersistence/Sources/CoreDataLastPageUniquifier.swift",
    "content": "//\n//  CoreDataLastPageUniquifier.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/7/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport CoreData\nimport CoreDataModel\nimport CoreDataPersistence\nimport SystemDependencies\n\npublic struct CoreDataLastPageUniquifier: CoreDataEntityUniquifier {\n    // MARK: Lifecycle\n\n    public init() {\n    }\n\n    // MARK: Public\n\n    public func merge(transactions: [PersistentHistoryTransaction], using taskContext: NSManagedObjectContext) throws {\n        // merge with existing ones\n        try simpleUniquifier.merge(transactions: transactions, using: taskContext)\n\n        if hasLastPageChanges(transactions) {\n            // remove overflow\n            try overflowHandler.removeOverflowIfneeded(using: taskContext)\n        }\n    }\n\n    // MARK: Private\n\n    private let overflowHandler = CoreDataLastPageOverflowHandler()\n\n    private let simpleUniquifier = SimpleCoreDataEntityUniquifier<MO_LastPage>(\n        sortBy: Schema.LastPage.modifiedOn,\n        ascending: false,\n        key: .page\n    )\n\n    private func hasLastPageChanges(_ transactions: [PersistentHistoryTransaction]) -> Bool {\n        let entityName = MO_LastPage.entity().name\n        return transactions.contains { transaction in\n            transaction.changes().contains { change in\n                change.changedObjectID.entity.name == entityName\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Data/LastPagePersistence/Sources/LastPagePersistence.swift",
    "content": "//\n//  LastPagePersistence.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 11/5/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Combine\n\npublic protocol LastPagePersistence: Sendable {\n    func lastPages() -> AnyPublisher<[LastPagePersistenceModel], Never>\n    func retrieveAll() async throws -> [LastPagePersistenceModel]\n    func add(page: Int) async throws -> LastPagePersistenceModel\n    func update(page: Int, toPage: Int) async throws -> LastPagePersistenceModel\n}\n"
  },
  {
    "path": "Data/LastPagePersistence/Sources/LastPagePersistenceModel.swift",
    "content": "//\n//  LastPagePersistenceModel.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2023-03-05.\n//  Copyright © 2023 Quran.com. All rights reserved.\n//\n\nimport Foundation\n\npublic struct LastPagePersistenceModel {\n    public let page: Int\n    public let createdOn: Date\n    public let modifiedOn: Date\n}\n"
  },
  {
    "path": "Data/LastPagePersistence/Tests/CoreDataLastPagePersistenceTests.swift",
    "content": "//\n//  CoreDataLastPagePersistenceTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-30.\n//\n\nimport AsyncUtilitiesForTesting\nimport Combine\nimport CoreDataPersistence\nimport XCTest\n@testable import LastPagePersistence\n\nfinal class CoreDataLastPagePersistenceTests: XCTestCase {\n    var persistence: CoreDataLastPagePersistence!\n    var stack: CoreDataStack!\n    var subscriptions = Set<AnyCancellable>()\n\n    override func setUp() {\n        super.setUp()\n\n        stack = CoreDataStack.testingStack()\n        persistence = CoreDataLastPagePersistence(stack: stack)\n    }\n\n    override func tearDown() {\n        super.tearDown()\n        // Clean up any resources here\n        CoreDataStack.removePersistentFiles()\n        persistence = nil\n        stack = nil\n        subscriptions.removeAll()\n    }\n\n    func testAddAndRetrieveLastPages() async throws {\n        // 1. Add some pages to the persistence\n        let pages = [1, 2, 3]\n        for page in pages {\n            _ = try await persistence.add(page: page)\n        }\n\n        // 2. Fetch the last pages using lastPages()\n        let collector = PublisherCollector(persistence.lastPages())\n\n        // 3. Verify that the returned pages match what you expect\n        XCTAssertEqual(collector.items.count, 1)\n        XCTAssertEqual(collector.items.last?.map(\\.page), [3, 2, 1])\n\n        // 4. Update this page with a new number\n        _ = try await persistence.update(page: 1, toPage: 2)\n\n        XCTAssertEqual(collector.items.count, 3)\n        XCTAssertEqual(collector.items.last?.map(\\.page), [2, 3])\n\n        // 5. Update this page with the same number\n        _ = try await persistence.update(page: 3, toPage: 3)\n        XCTAssertEqual(collector.items.last?.map(\\.page), [3, 2])\n\n        // 6. Add more pages.\n        _ = try await persistence.add(page: 5)\n        _ = try await persistence.add(page: 6)\n        XCTAssertEqual(collector.items.last?.map(\\.page), [6, 5, 3])\n    }\n\n    func testRetrieveAll() async throws {\n        // 1. Add some pages to the persistence\n        let pages = [1, 2, 3]\n        for page in pages {\n            _ = try await persistence.add(page: page)\n        }\n\n        // 2. Fetch all pages using retrieveAll()\n        let lastPages = try await persistence.retrieveAll()\n\n        // 3. Verify that the returned pages match what you expect\n        XCTAssertEqual(lastPages.map(\\.page), pages.reversed())\n    }\n}\n"
  },
  {
    "path": "Data/LastPagePersistence/Tests/CoreDataLastPageUniquifierTests.swift",
    "content": "//\n//  CoreDataLastPageUniquifierTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-30.\n//\n\nimport CoreData\nimport CoreDataModel\nimport CoreDataPersistence\nimport CoreDataPersistenceTestSupport\nimport SystemDependenciesFake\nimport XCTest\n@testable import LastPagePersistence\n\nclass CoreDataLastPageUniquifierTests: XCTestCase {\n    // MARK: Internal\n\n    var sut: CoreDataLastPageUniquifier!\n    var context: NSManagedObjectContext!\n    var stack: CoreDataStack!\n\n    var entity1: MO_LastPage!\n    var entity2: MO_LastPage!\n    var entity3: MO_LastPage!\n    var entity4: MO_LastPage!\n    var entity5: MO_LastPage!\n\n    override func setUp() async throws {\n        try await super.setUp()\n\n        stack = CoreDataStack.testingStack()\n        context = stack.newBackgroundContext()\n\n        entity1 = context.newLastPage(page: 45, modifiedOn: 1)\n        entity2 = context.newLastPage(page: 500, modifiedOn: 2)\n        entity3 = context.newLastPage(page: 100, modifiedOn: 3)\n        entity4 = context.newLastPage(page: 250, modifiedOn: 4)\n        entity5 = context.newLastPage(page: 190, modifiedOn: 5)\n\n        try context.save()\n\n        sut = CoreDataLastPageUniquifier()\n    }\n\n    override func tearDown() {\n        CoreDataStack.removePersistentFiles()\n        sut = nil\n        context = nil\n        stack = nil\n        super.tearDown()\n    }\n\n    func test_merge_removingOverflow() throws {\n        assertDatabaseContains([entity5, entity4, entity3, entity2, entity1])\n\n        // Merge transactions\n        let transactions = [\n            PersistentHistoryTransactionFake(historyChanges: [\n                PersistentHistoryChangeFake(object: entity1, changeType: .insert),\n                PersistentHistoryChangeFake(object: entity4, changeType: .update),\n                PersistentHistoryChangeFake(object: entity3, changeType: .insert),\n            ]),\n        ]\n        XCTAssertNoThrow(try sut.merge(transactions: transactions, using: context))\n\n        assertDatabaseContains([entity5, entity4, entity3])\n    }\n\n    func test_merge_noLastPageTransaction() throws {\n        // Merge page bookmark translations\n        let pageBookmark = context.newPageBookmark(page: 1, modifiedOn: 1)\n        let transactions = [\n            PersistentHistoryTransactionFake(historyChanges: [\n                PersistentHistoryChangeFake(object: pageBookmark, changeType: .insert),\n            ]),\n        ]\n        XCTAssertNoThrow(try sut.merge(transactions: transactions, using: context))\n\n        assertDatabaseContains([entity5, entity4, entity3, entity2, entity1])\n    }\n\n    func test_merge_noOverflow() throws {\n        context.delete(entity1)\n        context.delete(entity2)\n        context.delete(entity3)\n        try context.save()\n\n        assertDatabaseContains([entity5, entity4])\n\n        // Merge page bookmark translations\n        let transactions = [\n            PersistentHistoryTransactionFake(historyChanges: [\n                PersistentHistoryChangeFake(object: entity5, changeType: .insert),\n            ]),\n        ]\n        XCTAssertNoThrow(try sut.merge(transactions: transactions, using: context))\n\n        assertDatabaseContains([entity5, entity4])\n    }\n\n    // MARK: Private\n\n    private func assertDatabaseContains(\n        _ entities: [MO_LastPage],\n        file: StaticString = #filePath,\n        line: UInt = #line\n    ) {\n        XCTAssertEqual(\n            entities.map(\\.page),\n            try context.allLastPages().map(\\.page),\n            file: file,\n            line: line\n        )\n    }\n}\n"
  },
  {
    "path": "Data/LinePagePersistence/Sources/GRDBLinePagePersistence.swift",
    "content": "//\n//  GRDBLinePagePersistence.swift\n//\n//\n//  Created by Mohamed Afifi on 2026-03-28.\n//\n\nimport Foundation\nimport GRDB\nimport QuranKit\nimport SQLitePersistence\n\npublic struct GRDBLinePagePersistence: LinePagePersistence {\n    // MARK: Lifecycle\n\n    init(db: DatabaseConnection) {\n        self.db = db\n    }\n\n    public init(fileURL: URL) {\n        self.init(db: DatabaseConnection(url: fileURL))\n    }\n\n    // MARK: Public\n\n    public func highlightSpans(_ page: Page) async throws -> [LinePageHighlightSpan] {\n        try await db.read { db in\n            let query = GRDBAyahHighlight\n                .filter(GRDBAyahHighlight.Columns.page == page.pageNumber)\n                .order(\n                    GRDBAyahHighlight.Columns.sura,\n                    GRDBAyahHighlight.Columns.ayah,\n                    GRDBAyahHighlight.Columns.line,\n                    GRDBAyahHighlight.Columns.left,\n                    GRDBAyahHighlight.Columns.right\n                )\n            return try GRDBAyahHighlight.fetchAll(db, query).map { $0.toHighlightSpan(quran: page.quran) }\n        }\n    }\n\n    public func ayahMarkers(_ page: Page) async throws -> [LinePageAyahMarker] {\n        try await db.read { db in\n            let query = GRDBAyahMarker\n                .filter(GRDBAyahMarker.Columns.page == page.pageNumber)\n                .order(\n                    GRDBAyahMarker.Columns.sura,\n                    GRDBAyahMarker.Columns.ayah,\n                    GRDBAyahMarker.Columns.line\n                )\n            return try GRDBAyahMarker.fetchAll(db, query).map { $0.toAyahMarker(quran: page.quran) }\n        }\n    }\n\n    public func suraHeaders(_ page: Page) async throws -> [LinePageSuraHeader] {\n        try await db.read { db in\n            let query = GRDBSuraHeader\n                .filter(GRDBSuraHeader.Columns.page == page.pageNumber)\n                .order(\n                    GRDBSuraHeader.Columns.sura,\n                    GRDBSuraHeader.Columns.line\n                )\n            return try GRDBSuraHeader.fetchAll(db, query).map { $0.toSuraHeader(quran: page.quran) }\n        }\n    }\n\n    // MARK: Internal\n\n    let db: DatabaseConnection\n}\n\nprivate struct GRDBAyahHighlight: Decodable, FetchableRecord, TableRecord {\n    enum CodingKeys: String, CodingKey {\n        case page\n        case sura\n        case ayah\n        case line\n        case left\n        case right\n    }\n\n    enum Columns {\n        static let page = Column(CodingKeys.page)\n        static let sura = Column(CodingKeys.sura)\n        static let ayah = Column(CodingKeys.ayah)\n        static let line = Column(CodingKeys.line)\n        static let left = Column(CodingKeys.left)\n        static let right = Column(CodingKeys.right)\n    }\n\n    static var databaseTableName: String {\n        \"ayah_highlights\"\n    }\n\n    var page: Int\n    var sura: Int\n    var ayah: Int\n    var line: Int\n    var left: Double\n    var right: Double\n}\n\nprivate extension GRDBAyahHighlight {\n    func toHighlightSpan(quran: Quran) -> LinePageHighlightSpan {\n        let ayah = AyahNumber(quran: quran, sura: sura, ayah: ayah)!\n        return LinePageHighlightSpan(ayah: ayah, line: line, left: left, right: right)\n    }\n}\n\nprivate struct GRDBAyahMarker: Decodable, FetchableRecord, TableRecord {\n    enum CodingKeys: String, CodingKey {\n        case page\n        case sura\n        case ayah\n        case line\n        case centerX = \"center_x\"\n        case centerY = \"center_y\"\n        case codePoint = \"code_point\"\n    }\n\n    enum Columns {\n        static let page = Column(CodingKeys.page)\n        static let sura = Column(CodingKeys.sura)\n        static let ayah = Column(CodingKeys.ayah)\n        static let line = Column(CodingKeys.line)\n        static let centerX = Column(CodingKeys.centerX)\n        static let centerY = Column(CodingKeys.centerY)\n        static let codePoint = Column(CodingKeys.codePoint)\n    }\n\n    static var databaseTableName: String {\n        \"ayah_markers\"\n    }\n\n    var page: Int\n    var sura: Int\n    var ayah: Int\n    var line: Int\n    var centerX: Double\n    var centerY: Double\n    var codePoint: String\n}\n\nprivate extension GRDBAyahMarker {\n    func toAyahMarker(quran: Quran) -> LinePageAyahMarker {\n        let ayah = AyahNumber(quran: quran, sura: sura, ayah: ayah)!\n        return LinePageAyahMarker(\n            ayah: ayah,\n            line: line,\n            centerX: centerX,\n            centerY: centerY,\n            codePoint: codePoint\n        )\n    }\n}\n\nprivate struct GRDBSuraHeader: Decodable, FetchableRecord, TableRecord {\n    enum CodingKeys: String, CodingKey {\n        case page\n        case sura\n        case line\n        case centerX = \"center_x\"\n        case centerY = \"center_y\"\n    }\n\n    enum Columns {\n        static let page = Column(CodingKeys.page)\n        static let sura = Column(CodingKeys.sura)\n        static let line = Column(CodingKeys.line)\n        static let centerX = Column(CodingKeys.centerX)\n        static let centerY = Column(CodingKeys.centerY)\n    }\n\n    static var databaseTableName: String {\n        \"sura_headers\"\n    }\n\n    var page: Int\n    var sura: Int\n    var line: Int\n    var centerX: Double\n    var centerY: Double\n}\n\nprivate extension GRDBSuraHeader {\n    func toSuraHeader(quran: Quran) -> LinePageSuraHeader {\n        let sura = Sura(quran: quran, suraNumber: sura)!\n        return LinePageSuraHeader(sura: sura, line: line, centerX: centerX, centerY: centerY)\n    }\n}\n"
  },
  {
    "path": "Data/LinePagePersistence/Sources/LinePageModels.swift",
    "content": "//\n//  LinePageModels.swift\n//\n//\n//  Created by Mohamed Afifi on 2026-03-28.\n//\n\nimport QuranKit\n\npublic struct LinePageHighlightSpan: Hashable, Sendable {\n    public init(ayah: AyahNumber, line: Int, left: Double, right: Double) {\n        self.ayah = ayah\n        self.line = line\n        self.left = left\n        self.right = right\n    }\n\n    public let ayah: AyahNumber\n    public let line: Int\n    public let left: Double\n    public let right: Double\n}\n\npublic struct LinePageAyahMarker: Hashable, Sendable {\n    public init(ayah: AyahNumber, line: Int, centerX: Double, centerY: Double, codePoint: String) {\n        self.ayah = ayah\n        self.line = line\n        self.centerX = centerX\n        self.centerY = centerY\n        self.codePoint = codePoint\n    }\n\n    public let ayah: AyahNumber\n    public let line: Int\n    public let centerX: Double\n    public let centerY: Double\n    public let codePoint: String\n}\n\npublic struct LinePageSuraHeader: Hashable, Sendable {\n    public init(sura: Sura, line: Int, centerX: Double, centerY: Double) {\n        self.sura = sura\n        self.line = line\n        self.centerX = centerX\n        self.centerY = centerY\n    }\n\n    public let sura: Sura\n    public let line: Int\n    public let centerX: Double\n    public let centerY: Double\n}\n"
  },
  {
    "path": "Data/LinePagePersistence/Sources/LinePagePersistence.swift",
    "content": "//\n//  LinePagePersistence.swift\n//\n//\n//  Created by Mohamed Afifi on 2026-03-28.\n//\n\nimport QuranKit\n\npublic protocol LinePagePersistence {\n    func highlightSpans(_ page: Page) async throws -> [LinePageHighlightSpan]\n    func ayahMarkers(_ page: Page) async throws -> [LinePageAyahMarker]\n    func suraHeaders(_ page: Page) async throws -> [LinePageSuraHeader]\n}\n"
  },
  {
    "path": "Data/LinePagePersistence/Tests/LinePagePersistenceTests.swift",
    "content": "//\n//  LinePagePersistenceTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2026-03-28.\n//\n\nimport QuranKit\nimport XCTest\n@testable import LinePagePersistence\n\nfinal class LinePagePersistenceTests: XCTestCase {\n    // MARK: Internal\n\n    func testHighlightSpans() async throws {\n        let page = try XCTUnwrap(Page(quran: quran, pageNumber: 1))\n        let persistence = makePersistence()\n\n        let highlights = try await persistence.highlightSpans(page)\n        let expected = [\n            (ayah: 1, line: 5, left: 0.2445, right: 0.7555),\n            (ayah: 2, line: 6, left: 0.156, right: 0.844),\n            (ayah: 3, line: 7, left: 0.534356, right: 0.936),\n            (ayah: 4, line: 7, left: 0.064, right: 0.534356),\n            (ayah: 5, line: 8, left: 0.248196, right: 0.945),\n            (ayah: 6, line: 8, left: 0.055, right: 0.248196),\n            (ayah: 6, line: 9, left: 0.476419, right: 0.9155),\n            (ayah: 7, line: 9, left: 0.0845, right: 0.476419),\n            (ayah: 7, line: 10, left: 0.1645, right: 0.8355),\n            (ayah: 7, line: 11, left: 0.295, right: 0.705),\n        ]\n\n        XCTAssertEqual(highlights.count, expected.count)\n        for (actual, expected) in zip(highlights, expected) {\n            XCTAssertEqual(actual.ayah, AyahNumber(quran: quran, sura: 1, ayah: expected.ayah))\n            XCTAssertEqual(actual.line, expected.line)\n            XCTAssertEqual(actual.left, expected.left, accuracy: 0.000001)\n            XCTAssertEqual(actual.right, expected.right, accuracy: 0.000001)\n        }\n    }\n\n    func testAyahMarkers() async throws {\n        let page = try XCTUnwrap(Page(quran: quran, pageNumber: 1))\n        let persistence = makePersistence()\n\n        let markers = try await persistence.ayahMarkers(page)\n        let expected = [\n            (ayah: 1, line: 5, centerX: 0.295139, centerY: 0.549879, codePoint: \"\\u{E900}\"),\n            (ayah: 2, line: 6, centerX: 0.205903, centerY: 0.557037, codePoint: \"\\u{E901}\"),\n            (ayah: 3, line: 7, centerX: 0.561856, centerY: 0.551724, codePoint: \"\\u{E902}\"),\n            (ayah: 4, line: 7, centerX: 0.113443, centerY: 0.551724, codePoint: \"\\u{E903}\"),\n            (ayah: 5, line: 8, centerX: 0.275696, centerY: 0.550029, codePoint: \"\\u{E904}\"),\n            (ayah: 6, line: 9, centerX: 0.503919, centerY: 0.547455, codePoint: \"\\u{E905}\"),\n            (ayah: 7, line: 11, centerX: 0.345189, centerY: 0.549725, codePoint: \"\\u{E906}\"),\n        ]\n\n        XCTAssertEqual(markers.count, expected.count)\n        for (actual, expected) in zip(markers, expected) {\n            XCTAssertEqual(actual.ayah, AyahNumber(quran: quran, sura: 1, ayah: expected.ayah))\n            XCTAssertEqual(actual.line, expected.line)\n            XCTAssertEqual(actual.centerX, expected.centerX, accuracy: 0.000001)\n            XCTAssertEqual(actual.centerY, expected.centerY, accuracy: 0.000001)\n            XCTAssertEqual(actual.codePoint, expected.codePoint)\n        }\n    }\n\n    func testSuraHeaders() async throws {\n        let page = try XCTUnwrap(Page(quran: quran, pageNumber: 1))\n        let persistence = makePersistence()\n\n        let headers = try await persistence.suraHeaders(page)\n\n        XCTAssertEqual(headers, [\n            LinePageSuraHeader(\n                sura: Sura(quran: quran, suraNumber: 1)!,\n                line: 3,\n                centerX: 0.5,\n                centerY: 0.5\n            ),\n        ])\n    }\n\n    // MARK: Private\n\n    private let quran = Quran.hafsMadani1405\n\n    private func makePersistence() -> GRDBLinePagePersistence {\n        GRDBLinePagePersistence(fileURL: fixtureURL(named: \"line_page_ayahinfo\"))\n    }\n\n    private func fixtureURL(named name: String) -> URL {\n        Bundle.module.url(forResource: name, withExtension: \"db\")!\n    }\n}\n"
  },
  {
    "path": "Data/NetworkSupport/Sources/NetworkError.swift",
    "content": "//\n//  NetworkError.swift\n//  SwinjectMVVMExample\n//\n//  Created by Yoichi Tagaya on 8/22/15.\n//  Copyright © 2015 Swinject Contributors. All rights reserved.\n//\n\nimport Foundation\nimport Localization\n\npublic enum NetworkError: Error {\n    /// Unknown or not supported error.\n    case unknown(Error?)\n\n    /// Not connected to the internet.\n    case notConnectedToInternet\n\n    /// International data roaming turned off.\n    case internationalRoamingOff\n\n    /// Connection is lost.\n    case connectionLost\n\n    /// Cannot reach the server.\n    case serverNotReachable\n\n    case serverError(String)\n\n    // MARK: Lifecycle\n\n    public init(error: Error) {\n        if let error = error as? NetworkError {\n            self = error\n        } else if let error = error as? URLError {\n            switch error.code {\n            case .timedOut, .cannotFindHost, .cannotConnectToHost:\n                self = .serverNotReachable\n            case .networkConnectionLost:\n                self = .connectionLost\n            case .dnsLookupFailed:\n                self = .serverNotReachable\n            case .notConnectedToInternet:\n                self = .notConnectedToInternet\n            case .internationalRoamingOff:\n                self = .internationalRoamingOff\n            default:\n                self = .unknown(error)\n            }\n        } else {\n            self = .unknown(error)\n        }\n    }\n}\n\nextension NetworkError: LocalizedError {\n    public var errorDescription: String? {\n        switch self {\n        case .unknown, .serverError, .serverNotReachable:\n            return l(\"error.message.general\")\n        case .notConnectedToInternet:\n            return l(\"error.message.not_connected_to_internet\")\n        case .internationalRoamingOff:\n            return l(\"error.message.international_roaming_off\")\n        case .connectionLost:\n            return l(\"error.message.connection_lost\")\n        }\n    }\n}\n"
  },
  {
    "path": "Data/NetworkSupport/Sources/NetworkManager.swift",
    "content": "//\n//  NetworkManager.swift\n//\n//\n//  Created by Afifi, Mohamed on 10/30/21.\n//\n\nimport Foundation\n\npublic final class NetworkManager {\n    // MARK: Lifecycle\n\n    public init(session: NetworkSession = URLSession.shared, baseURL: URL) {\n        self.session = session\n        self.baseURL = baseURL\n    }\n\n    // MARK: Public\n\n    public func request(_ path: String, parameters: [(String, String)] = []) async throws -> Data {\n        do {\n            let request: URLRequest = Self.request(baseURL: baseURL, path: path, parameters: parameters)\n            let (data, _) = try await session.data(for: request)\n            return data\n        } catch {\n            throw NetworkError(error: error)\n        }\n    }\n\n    // MARK: Internal\n\n    static func request(baseURL: URL, path: String, parameters: [(String, String)] = []) -> URLRequest {\n        let url = baseURL.appendingPathComponent(path)\n        var components = URLComponents(url: url, resolvingAgainstBaseURL: false)!\n        components.queryItems = parameters.map { URLQueryItem(name: $0, value: $1) }\n        return URLRequest(url: components.url!)\n    }\n\n    // MARK: Private\n\n    private let session: NetworkSession\n    private let baseURL: URL\n}\n"
  },
  {
    "path": "Data/NetworkSupport/Sources/NetworkSession.swift",
    "content": "//\n//  NetworkSession.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-01-23.\n//\n\nimport Crashing\nimport Foundation\n\npublic protocol NetworkSession: AnyObject, Sendable {\n    var delegateQueue: OperationQueue { get }\n    func tasks() async -> ([NetworkSessionDataTask], [NetworkSessionUploadTask], [NetworkSessionDownloadTask])\n    func downloadTask(with request: URLRequest) -> NetworkSessionDownloadTask\n    func downloadTask(withResumeData resumeData: Data) -> NetworkSessionDownloadTask\n    func data(for request: URLRequest) async throws -> (Data, URLResponse)\n}\n\npublic protocol NetworkSessionTask: AnyObject, Sendable {\n    var taskIdentifier: Int { get }\n    var originalRequest: URLRequest? { get }\n    var currentRequest: URLRequest? { get }\n    var response: URLResponse? { get }\n    func cancel()\n    func resume()\n}\n\npublic protocol NetworkSessionDownloadTask: NetworkSessionTask {\n}\n\npublic protocol NetworkSessionUploadTask: NetworkSessionTask {\n}\n\npublic protocol NetworkSessionDataTask: NetworkSessionTask {\n}\n\npublic protocol NetworkSessionDelegate: Sendable {\n    func networkSession(\n        _ session: NetworkSession,\n        downloadTask: NetworkSessionDownloadTask,\n        didWriteData bytesWritten: Int64,\n        totalBytesWritten: Int64,\n        totalBytesExpectedToWrite: Int64\n    ) async\n\n    func networkSession(_ session: NetworkSession, downloadTask: NetworkSessionDownloadTask, didFinishDownloadingTo location: URL) async\n    func networkSession(_ session: NetworkSession, task: NetworkSessionTask, didCompleteWithError sessionError: Error?) async\n\n    func networkSessionDidFinishEvents(forBackgroundURLSession session: NetworkSession) async\n}\n\nextension URLSession: NetworkSession {\n    public func tasks() async -> ([NetworkSessionDataTask], [NetworkSessionUploadTask], [NetworkSessionDownloadTask]) {\n        await tasks\n    }\n\n    public func downloadTask(with request: URLRequest) -> NetworkSessionDownloadTask {\n        downloadTask(with: request) as URLSessionDownloadTask\n    }\n\n    public func downloadTask(withResumeData resumeData: Data) -> NetworkSessionDownloadTask {\n        downloadTask(withResumeData: resumeData) as URLSessionDownloadTask\n    }\n}\n\nextension URLSessionTask: NetworkSessionTask {\n}\n\nextension URLSessionDownloadTask: NetworkSessionDownloadTask {\n}\n\nextension URLSessionUploadTask: NetworkSessionUploadTask {\n}\n\nextension URLSessionDataTask: NetworkSessionDataTask {\n}\n\npublic final class NetworkSessionToURLSessionDelegate: NSObject, URLSessionDownloadDelegate, Sendable {\n    // MARK: Lifecycle\n\n    public init(networkSessionDelegate: NetworkSessionDelegate) {\n        self.networkSessionDelegate = networkSessionDelegate\n    }\n\n    // MARK: Public\n\n    public func urlSession(\n        _ session: URLSession,\n        downloadTask: URLSessionDownloadTask,\n        didWriteData bytesWritten: Int64,\n        totalBytesWritten: Int64,\n        totalBytesExpectedToWrite: Int64\n    ) {\n        Task {\n            await networkSessionDelegate.networkSession(\n                session,\n                downloadTask: downloadTask,\n                didWriteData: bytesWritten,\n                totalBytesWritten: totalBytesWritten,\n                totalBytesExpectedToWrite: totalBytesExpectedToWrite\n            )\n        }\n    }\n\n    public func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {\n        let temporaryDirectory = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)\n        let filePath = UUID().uuidString\n        let temporaryFile = temporaryDirectory.appendingPathComponent(filePath)\n        do {\n            // Move the file to a temporary location as URLSession would delete it before the async task starts.\n            try FileManager.default.moveItem(at: location, to: temporaryFile)\n            Task {\n                await networkSessionDelegate.networkSession(session, downloadTask: downloadTask, didFinishDownloadingTo: temporaryFile)\n                try? FileManager.default.removeItem(at: temporaryFile)\n            }\n        } catch {\n            crasher.recordError(\n                error,\n                reason: \"Problem moving the downloaded file to a temporary location '\\(temporaryFile)'\"\n            )\n        }\n    }\n\n    public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError sessionError: Error?) {\n        Task {\n            await networkSessionDelegate.networkSession(session, task: task, didCompleteWithError: sessionError)\n        }\n    }\n\n    public func urlSessionDidFinishEvents(forBackgroundURLSession session: URLSession) {\n        Task {\n            await networkSessionDelegate.networkSessionDidFinishEvents(forBackgroundURLSession: session)\n        }\n    }\n\n    // MARK: Internal\n\n    let networkSessionDelegate: NetworkSessionDelegate\n}\n"
  },
  {
    "path": "Data/NetworkSupport/Tests/NetworkManagerTests.swift",
    "content": "//\n//  NetworkManagerTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-02-05.\n//\n\nimport AsyncUtilitiesForTesting\nimport NetworkSupportFake\nimport Utilities\nimport XCTest\n@testable import NetworkSupport\n\nclass NetworkManagerTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUpWithError() throws {\n        session = NetworkSessionFake(queue: .main, delegate: nil)\n        networkManager = NetworkManager(session: session, baseURL: baseURL)\n    }\n\n    func testRequestCompletedSuccessfully() async throws {\n        let path = \"v1/products\"\n        let parameters = [(\"sort\", \"newest\")]\n        let request = NetworkManager.request(baseURL: baseURL, path: path, parameters: parameters)\n        let body = \"product1\"\n        session.dataResults[request.url!] = .success(body.data(using: .utf8)!)\n\n        let result = try await networkManager.request(path, parameters: parameters)\n        XCTAssertEqual(String(data: result, encoding: .utf8), body)\n    }\n\n    func testRequestFailure() async throws {\n        let path = \"v1/products\"\n        let parameters = [(\"sort\", \"newest\")]\n        let request = NetworkManager.request(baseURL: baseURL, path: path, parameters: parameters)\n        let error = CocoaError(.coderReadCorrupt)\n        session.dataResults[request.url!] = .failure(error)\n\n        let result = await Result { try await networkManager.request(path, parameters: parameters) }\n\n        assert(\n            try result.get(),\n            throws: NetworkError.unknown(error) as NSError\n        )\n    }\n\n    // MARK: Private\n\n    private var networkManager: NetworkManager!\n    private var session: NetworkSessionFake!\n    private let baseURL = URL(validURL: \"http://example.com\")\n}\n"
  },
  {
    "path": "Data/NetworkSupportFake/NetworkSessionFake.swift",
    "content": "//\n//  NetworkSessionFake.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-01-23.\n//\n\nimport AsyncAlgorithms\nimport AsyncUtilitiesForTesting\nimport Foundation\nimport NetworkSupport\n\npublic final class NetworkSessionFake: NetworkSession, @unchecked Sendable {\n    // MARK: Lifecycle\n\n    public init(queue: OperationQueue, delegate: NetworkSessionDelegate? = nil, downloads: [SessionTask] = []) {\n        delegateQueue = queue\n        self.delegate = delegate\n        self.downloads = downloads\n    }\n\n    // MARK: Public\n\n    public let delegateQueue: OperationQueue\n    public var downloads: [SessionTask] = []\n    public var dataTasks: [SessionTask] = []\n    public var downloadsObserver: AsyncChannel<SessionTask>?\n\n    public var dataResults: [URL: Result<Data, Error>] = [:]\n\n    public func tasks() async -> ([NetworkSessionDataTask], [NetworkSessionUploadTask], [NetworkSessionDownloadTask]) {\n        ([], [], downloads)\n    }\n\n    public func downloadTask(withResumeData resumeData: Data) -> NetworkSessionDownloadTask {\n        let task = SessionTask(taskIdentifier: taskIdentifier)\n        downloads.append(task)\n        task.resumeData = resumeData\n        return task\n    }\n\n    public func downloadTask(with request: URLRequest) -> NetworkSessionDownloadTask {\n        let task = SessionTask(taskIdentifier: taskIdentifier)\n        task.originalRequest = request\n        downloads.append(task)\n        Task { await downloadsObserver?.send(task) }\n        return task\n    }\n\n    public func data(for request: URLRequest) async throws -> (Data, URLResponse) {\n        let result = dataResults[request.url!] ?? .success(Data())\n        let data = try result.get()\n        return (data, URLResponse())\n    }\n\n    public func completeDownloadTask(_ task: SessionTask, location: URL, totalBytes: Int, progressLoops: Int) async {\n        let step = Int64(1 / Double(progressLoops) * Double(totalBytes))\n        for i in 0 ... progressLoops {\n            let written = Int64(Double(i) / Double(progressLoops) * Double(totalBytes))\n            await delegate?.networkSession(\n                self,\n                downloadTask: task,\n                didWriteData: step,\n                totalBytesWritten: written,\n                totalBytesExpectedToWrite: Int64(totalBytes)\n            )\n            await Task.megaYield()\n        }\n\n        task.response = HTTPURLResponse(url: task.originalRequest!.url!, statusCode: 200, httpVersion: nil, headerFields: nil)\n        await delegate?.networkSession(self, downloadTask: task, didFinishDownloadingTo: location)\n        await delegate?.networkSession(self, task: task, didCompleteWithError: nil)\n        downloads = downloads.filter { $0 == task }\n    }\n\n    public func failDownloadTask(_ task: SessionTask, error: Error) {\n        delegateQueue.addOperation {\n            Task {\n                await self.delegate?.networkSession(self, task: task, didCompleteWithError: error)\n            }\n        }\n    }\n\n    public func finishBackgroundEvents(channel: AsyncChannel<Void>) {\n        delegateQueue.addOperation {\n            Task {\n                await self.delegate?.networkSessionDidFinishEvents(forBackgroundURLSession: self)\n                await channel.send(())\n            }\n        }\n    }\n\n    // MARK: Internal\n\n    let delegate: NetworkSessionDelegate?\n\n    func cancelTask(_ task: SessionTask) {\n        delegateQueue.addOperation {\n            Task {\n                await self.delegate?.networkSession(self, task: task, didCompleteWithError: URLError(.cancelled))\n            }\n        }\n    }\n\n    // MARK: Private\n\n    private var taskIdentifierCounter = 0\n\n    private var taskIdentifier: Int {\n        let temp = taskIdentifierCounter\n        taskIdentifierCounter += 1\n        return temp\n    }\n}\n\npublic final class SessionTask: NetworkSessionDownloadTask, NetworkSessionDataTask, Hashable, @unchecked Sendable {\n    // MARK: Lifecycle\n\n    init(taskIdentifier: Int) {\n        self.taskIdentifier = taskIdentifier\n    }\n\n    // MARK: Public\n\n    public let taskIdentifier: Int\n    public var originalRequest: URLRequest?\n    public var currentRequest: URLRequest?\n    public var response: URLResponse?\n    public var completionHandler: ((Data?, URLResponse?, Error?) -> Void)?\n\n    public var isCancelled = false\n\n    public static func == (lhs: SessionTask, rhs: SessionTask) -> Bool {\n        lhs.taskIdentifier == rhs.taskIdentifier\n    }\n\n    public func cancel() {\n        isCancelled = true\n        session?.cancelTask(self)\n    }\n\n    public func resume() {\n        isCancelled = false\n    }\n\n    public func hash(into hasher: inout Hasher) {\n        hasher.combine(taskIdentifier)\n    }\n\n    // MARK: Internal\n\n    var resumeData: Data?\n\n    weak var session: NetworkSessionFake?\n}\n"
  },
  {
    "path": "Data/NotePersistence/Sources/CoreDataNotePersistence.swift",
    "content": "//\n//  CoreDataNotePersistence.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/8/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport Combine\nimport CoreData\nimport CoreDataModel\nimport CoreDataPersistence\nimport Foundation\nimport SystemDependencies\n\npublic struct CoreDataNotePersistence: NotePersistence {\n    // MARK: Lifecycle\n\n    public init(stack: CoreDataStack, time: SystemTime = DefaultSystemTime()) {\n        context = stack.newBackgroundContext()\n        self.time = time\n    }\n\n    // MARK: Public\n\n    public func notes() -> AnyPublisher<[NotePersistenceModel], Never> {\n        let request: NSFetchRequest<MO_Note> = MO_Note.fetchRequest()\n        request.relationshipKeyPathsForPrefetching = [\"verses\"]\n        request.sortDescriptors = [NSSortDescriptor(key: Schema.Note.modifiedOn, ascending: false)]\n\n        return CoreDataPublisher(request: request, context: context)\n            .map { notes in notes.map { NotePersistenceModel($0) } }\n            .eraseToAnyPublisher()\n    }\n\n    /// Creates or updates an existing note.\n    ///\n    /// Ensures that a single note is created from the selected verses.\n    /// If the selected verses are linked to different notes, and these notes contain verses not included in the selection,\n    /// those verses will be incorporated into a unified note. This unified note represents the union of all verses\n    /// associated with the notes containing any of the provided `selectedVerses`.\n    public func setNote(\n        _ note: String?,\n        verses: [VersePersistenceModel],\n        color: Int\n    ) async throws -> NotePersistenceModel {\n        try await context.perform { context in\n            try createOrUpdateNoteHighlight(verses: verses, color: color, note: note, context: context)\n        }\n    }\n\n    public func removeNotes(with verses: [VersePersistenceModel]) async throws -> [NotePersistenceModel] {\n        try await context.perform { context in\n            let notes = try notes(with: verses, using: context)\n            // get the values before deletion\n            let notesToReturn = notes.map { NotePersistenceModel($0) }\n\n            // delete all notes and associated verses\n            for note in notes {\n                context.delete(note)\n                for verse in note.typedVerses {\n                    context.delete(verse)\n                }\n            }\n            try context.save(with: #function)\n            return notesToReturn\n        }\n    }\n\n    // MARK: Private\n\n    private let context: NSManagedObjectContext\n    private let time: SystemTime\n\n    private func createOrUpdateNoteHighlight(\n        verses selectedVerses: [VersePersistenceModel],\n        color: Int,\n        note: String?,\n        context: NSManagedObjectContext\n    ) throws -> NotePersistenceModel {\n        // get existing notes touching new verses\n        let existingNotes = try notes(with: selectedVerses, using: context)\n\n        // take first note or create new note and delete other notes\n        let selectedNote = existingNotes.first ?? MO_Note(context: context)\n        for oldNote in existingNotes.dropFirst() {\n            context.delete(oldNote)\n        }\n\n        // early break if no change\n        if existingNotes.count == 1 {\n            let typedSelectedNote = NotePersistenceModel(selectedNote)\n            if typedSelectedNote.verses.isSuperset(of: selectedVerses) &&\n                color == typedSelectedNote.color && (note == nil || note == typedSelectedNote.note)\n            {\n                return typedSelectedNote\n            }\n        }\n\n        // merge existing notes verses with new verses, this might expand the selected verses\n        let existingVerses = existingNotes.flatMap(\\.typedVerses).map(VersePersistenceModel.init)\n        let allVerses = Set(existingVerses).union(Set(selectedVerses))\n\n        // delete old verses with selected note\n        for verse in selectedNote.typedVerses {\n            context.delete(verse)\n        }\n\n        // associate new verses\n        for verse in allVerses {\n            let newVerse = MO_Verse(context: context)\n            newVerse.ayah = Int32(verse.ayah)\n            newVerse.sura = Int32(verse.sura)\n            selectedNote.addToVerses(newVerse)\n        }\n\n        // merge text of other notes\n        let noteText: String\n        if let note {\n            noteText = note\n        } else {\n            let existingNotesText = existingNotes.map { $0.note ?? \"\" }\n            noteText = existingNotesText.joined(separator: \"\\n\\n\").trimmingCharacters(in: .whitespacesAndNewlines)\n        }\n\n        selectedNote.note = noteText\n        selectedNote.color = Int32(color)\n        selectedNote.createdOn = selectedNote.createdOn ?? time.now\n        selectedNote.modifiedOn = time.now\n\n        // save\n        try context.save(with: #function)\n        return NotePersistenceModel(selectedNote)\n    }\n\n    // MARK: - Helpers\n\n    private func notes(with verses: [VersePersistenceModel], using context: NSManagedObjectContext) throws -> Set<MO_Note> {\n        let request = fetchRequestIntersecting(verses)\n        request.relationshipKeyPathsForPrefetching = [Schema.Verse.note.rawValue]\n        let verses = try context.fetch(request)\n        let notes = verses.compactMap(\\.note)\n        return Set(notes)\n    }\n\n    private func fetchRequestIntersecting(_ verses: [VersePersistenceModel]) -> NSFetchRequest<MO_Verse> {\n        let fetchRequest: NSFetchRequest<MO_Verse> = MO_Verse.fetchRequest()\n        fetchRequest.relationshipKeyPathsForPrefetching = [Schema.Verse.note.rawValue]\n        let predicates = verses.map { NSPredicate(equals: (Schema.Verse.sura, $0.sura), (Schema.Verse.ayah, $0.ayah)) }\n        fetchRequest.predicate = NSCompoundPredicate(type: .or, subpredicates: predicates)\n        return fetchRequest\n    }\n}\n\nprivate extension NotePersistenceModel {\n    init(_ other: MO_Note) {\n        self.init(\n            verses: Set(other.typedVerses.map { VersePersistenceModel($0) }),\n            modifiedDate: other.modifiedOn ?? Date(),\n            note: other.note,\n            color: Int(other.color)\n        )\n    }\n}\n\nextension MO_Note {\n    var typedVerses: Set<MO_Verse> {\n        verses as? Set<MO_Verse> ?? []\n    }\n}\n\nextension VersePersistenceModel {\n    init(_ other: MO_Verse) {\n        self.init(ayah: Int(other.ayah), sura: Int(other.sura))\n    }\n}\n"
  },
  {
    "path": "Data/NotePersistence/Sources/CoreDataNoteUniquifier.swift",
    "content": "//\n//  CoreDataNoteUniquifier.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/6/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport CoreData\nimport CoreDataModel\nimport CoreDataPersistence\nimport SystemDependencies\nimport VLogging\n\npublic struct CoreDataNoteUniquifier: CoreDataEntityUniquifier {\n    // MARK: Lifecycle\n\n    public init() {\n    }\n\n    // MARK: Public\n\n    public func merge(transactions: [PersistentHistoryTransaction], using taskContext: NSManagedObjectContext) throws {\n        // Ensure there is at least one note change in the transactions\n        guard transactions.contains(where: { transaction in\n            transaction.changes().contains { change in\n                change.changedObjectID.entity == MO_Note.entity()\n            }\n        }) else {\n            return\n        }\n\n        logger.notice(\"[CoreData] Finding \\(MO_Note.self) with no associated verses.\")\n        let notesToDelete = try findNotesWithNoVerses(using: taskContext)\n        logger.notice(\"[CoreData] Found \\(notesToDelete.count) \\(MO_Note.self) with no associated verses.\")\n        removeNotes(notesToDelete, using: taskContext)\n\n        // Save the background context to trigger a notification and merge the result into the viewContext.\n        try taskContext.save(with: \"Deduplicating \\(String(describing: MO_Note.entity().name))\")\n    }\n\n    // MARK: Private\n\n    private func findNotesWithNoVerses(using context: NSManagedObjectContext) throws -> [MO_Note] {\n        let fetchRequest = MO_Note.fetchRequest()\n        fetchRequest.predicate = NSPredicate(format: \"verses.@count == 0\")\n        return try context.fetch(fetchRequest)\n    }\n\n    private func removeNotes(_ notes: [MO_Note], using context: NSManagedObjectContext) {\n        for note in notes {\n            // delete the note\n            context.delete(note)\n        }\n    }\n}\n"
  },
  {
    "path": "Data/NotePersistence/Sources/NotePersistence.swift",
    "content": "//\n//  NotePersistence.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/8/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport Combine\n\npublic protocol NotePersistence {\n    func notes() -> AnyPublisher<[NotePersistenceModel], Never>\n    func setNote(\n        _ note: String?,\n        verses: [VersePersistenceModel],\n        color: Int\n    ) async throws -> NotePersistenceModel\n    func removeNotes(with verses: [VersePersistenceModel]) async throws -> [NotePersistenceModel]\n}\n"
  },
  {
    "path": "Data/NotePersistence/Sources/NotePersistenceModel.swift",
    "content": "//\n//  NotePersistenceModel.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2023-03-05.\n//  Copyright © 2023 Quran.com. All rights reserved.\n//\n\nimport Foundation\n\npublic struct VersePersistenceModel: Hashable {\n    // MARK: Lifecycle\n\n    public init(ayah: Int, sura: Int) {\n        self.ayah = ayah\n        self.sura = sura\n    }\n\n    // MARK: Public\n\n    public let ayah: Int\n    public let sura: Int\n}\n\npublic struct NotePersistenceModel: Equatable {\n    public var verses: Set<VersePersistenceModel>\n    public let modifiedDate: Date\n    public let note: String?\n    public let color: Int\n}\n"
  },
  {
    "path": "Data/NotePersistence/Tests/CoreDataNotePersistenceTests.swift",
    "content": "//\n//  CoreDataNotePersistenceTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-31.\n//\n\nimport AsyncUtilitiesForTesting\nimport CoreDataPersistence\nimport SystemDependenciesFake\nimport XCTest\n@testable import NotePersistence\n\nclass CoreDataNotePersistenceTests: XCTestCase {\n    var sut: CoreDataNotePersistence!\n    var stack: CoreDataStack!\n    var time: SystemTimeFake!\n\n    var verse1: VersePersistenceModel!\n    var verse2: VersePersistenceModel!\n    var verse3: VersePersistenceModel!\n    var verse4: VersePersistenceModel!\n\n    var note1: NotePersistenceModel!\n    var note2: NotePersistenceModel!\n    var note3: NotePersistenceModel!\n\n    override func setUp() async throws {\n        try await super.setUp()\n\n        stack = CoreDataStack.testingStack()\n        time = SystemTimeFake()\n\n        verse1 = VersePersistenceModel(ayah: 1, sura: 1)\n        verse2 = VersePersistenceModel(ayah: 2, sura: 1)\n        verse3 = VersePersistenceModel(ayah: 3, sura: 1)\n        verse4 = VersePersistenceModel(ayah: 4, sura: 1)\n\n        note1 = NotePersistenceModel(\"Note 1\", color: 1, modifiedDate: Date(timeIntervalSince1970: 100))\n        note2 = NotePersistenceModel(\"\", color: 2, modifiedDate: Date(timeIntervalSince1970: 200))\n        note3 = NotePersistenceModel(\"Note 3\", color: 3, modifiedDate: Date(timeIntervalSince1970: 300))\n\n        sut = CoreDataNotePersistence(stack: stack, time: time)\n    }\n\n    override func tearDown() {\n        CoreDataStack.removePersistentFiles()\n        sut = nil\n        stack = nil\n        super.tearDown()\n    }\n\n    func test_createAndRetrieveNotes() async throws {\n        // 1. Initially empty.\n        let collector = PublisherCollector(sut.notes())\n        XCTAssertEqual(collector.items.count, 1)\n        XCTAssertEqual(collector.items.last, [])\n\n        // 2. Create a note\n        time.now = note1.modifiedDate\n        let returnedNote1 = try await sut.setNote(note1.note, verses: [verse1, verse2], color: note1.color)\n\n        // 3. Assert created note\n        note1.verses = [verse1, verse2]\n        XCTAssertEqual(returnedNote1, note1)\n        XCTAssertEqual(collector.items.last, [returnedNote1])\n\n        // 4. Create a nother note\n        time.now = note2.modifiedDate\n        let returnedNote2 = try await sut.setNote(note2.note, verses: [verse3], color: note2.color)\n\n        // 5. Assert created note\n        note2.verses = [verse3]\n        XCTAssertEqual(returnedNote2, note2)\n        XCTAssertEqual(collector.items.last, [returnedNote2, returnedNote1])\n\n        // 6. Create new note merging an existing one.\n        time.now = note3.modifiedDate\n        let returnedNote3 = try await sut.setNote(note3.note, verses: [verse1, verse4], color: note3.color)\n\n        // 7. Assert merged note\n        note3.verses = [verse1, verse2, verse4]\n        XCTAssertEqual(returnedNote3, note3)\n        XCTAssertEqual(collector.items.last, [returnedNote3, returnedNote2])\n\n        // 8. Delete a note\n        let deletedNotes1 = try await sut.removeNotes(with: [verse1])\n        XCTAssertEqual(deletedNotes1, [returnedNote3])\n\n        // 9. Updating existing note with same data, won't modify it.\n        let numberOfUpdates = collector.items.count\n        time.now = Date()\n        let updatedNote2 = try await sut.setNote(note2.note, verses: Array(note2.verses), color: note2.color)\n\n        // 10. Assert no change to database\n        XCTAssertEqual(updatedNote2, returnedNote2)\n        XCTAssertEqual(numberOfUpdates, collector.items.count)\n    }\n}\n\nextension NotePersistenceModel {\n    init(_ text: String?, color: Int, modifiedDate: Date) {\n        self.init(verses: [], modifiedDate: modifiedDate, note: text, color: color)\n    }\n}\n"
  },
  {
    "path": "Data/NotePersistence/Tests/CoreDataNoteUniquifierTests.swift",
    "content": "//\n//  CoreDataNoteUniquifierTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-01.\n//\n\nimport CoreData\nimport CoreDataModel\nimport CoreDataPersistence\nimport CoreDataPersistenceTestSupport\nimport NotePersistence\nimport SystemDependenciesFake\nimport XCTest\n\nclass CoreDataNoteUniquifierTests: XCTestCase {\n    // MARK: Internal\n\n    var sut: CoreDataNoteUniquifier!\n    var context: NSManagedObjectContext!\n    var stack: CoreDataStack!\n\n    var verse1: MO_Verse!\n    var verse2: MO_Verse!\n    var verse3: MO_Verse!\n    var verse4: MO_Verse!\n\n    var note1: MO_Note!\n    var note2: MO_Note!\n    var note3: MO_Note!\n\n    override func setUp() async throws {\n        try await super.setUp()\n\n        stack = CoreDataStack.testingStack()\n        context = stack.newBackgroundContext()\n\n        verse1 = context.newVerse(sura: 1, ayah: 1)\n        verse2 = context.newVerse(sura: 1, ayah: 2)\n        verse3 = context.newVerse(sura: 1, ayah: 3)\n        verse4 = context.newVerse(sura: 1, ayah: 4)\n\n        note1 = context.newNote(\"Note 1\", modifiedOn: 1)\n        note2 = context.newNote(\"Note 2\", modifiedOn: 2)\n        note3 = context.newNote(\"Note 3\", modifiedOn: 3)\n\n        sut = CoreDataNoteUniquifier()\n    }\n\n    override func tearDown() {\n        CoreDataStack.removePersistentFiles()\n        sut = nil\n        context = nil\n        stack = nil\n        super.tearDown()\n    }\n\n    func test_merge_shouldRemoveNotesWithNoVerses() throws {\n        // Given\n        try setUpNotesWithNoVerses()\n\n        let insertedChange = PersistentHistoryChangeFake(object: note3, changeType: .insert)\n        let transaction = PersistentHistoryTransactionFake(historyChanges: [insertedChange])\n\n        // When\n        XCTAssertNoThrow(try sut.merge(transactions: [transaction], using: context))\n\n        // Then\n        let notes = try context.allNotes()\n        XCTAssertEqual(notes.map(\\.note), [\"Note 3\", \"Note 2\"])\n    }\n\n    func test_merge_allNotesHaveVerses() throws {\n        // Given\n        try setUpAllNotesWithVerses()\n\n        let insertedChange = PersistentHistoryChangeFake(object: note3, changeType: .insert)\n        let transaction = PersistentHistoryTransactionFake(historyChanges: [insertedChange])\n\n        // When\n        XCTAssertNoThrow(try sut.merge(transactions: [transaction], using: context))\n\n        // Then\n        let notes = try context.allNotes()\n        XCTAssertEqual(notes.map(\\.note), [\"Note 3\", \"Note 2\", \"Note 1\"])\n    }\n\n    func test_merge_noRelatedNoteChange() throws {\n        // Given\n        try setUpAllNotesWithVerses()\n\n        // When\n        XCTAssertNoThrow(try sut.merge(transactions: [], using: context))\n\n        // Then\n        let notes = try context.allNotes()\n        XCTAssertEqual(notes.map(\\.note), [\"Note 3\", \"Note 2\", \"Note 1\"])\n    }\n\n    // MARK: Private\n\n    // MARK: - Helpers\n\n    private func setUpNotesWithNoVerses() throws {\n        note1.addToVerses(verse1)\n        note2.addToVerses(verse2)\n        note3.addToVerses(verse3)\n        note3.addToVerses(verse1)\n        try context.save()\n    }\n\n    private func setUpAllNotesWithVerses() throws {\n        note1.addToVerses(verse1)\n        note1.addToVerses(verse4)\n        note2.addToVerses(verse2)\n        note3.addToVerses(verse3)\n        note3.addToVerses(verse1)\n        try context.save()\n    }\n}\n"
  },
  {
    "path": "Data/PageBookmarkPersistence/Sources/CoreDataPageBookmarkPersistence.swift",
    "content": "//\n//  CoreDataPageBookmarkPersistence.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/8/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport Combine\nimport CoreData\nimport CoreDataModel\nimport CoreDataPersistence\nimport Foundation\n\npublic struct CoreDataPageBookmarkPersistence: PageBookmarkPersistence {\n    // MARK: Lifecycle\n\n    public init(stack: CoreDataStack) {\n        context = stack.newBackgroundContext()\n    }\n\n    // MARK: Public\n\n    public func pageBookmarks() -> AnyPublisher<[PageBookmarkPersistenceModel], Never> {\n        let request: NSFetchRequest<MO_PageBookmark> = MO_PageBookmark.fetchRequest()\n        request.sortDescriptors = [NSSortDescriptor(key: Schema.PageBookmark.createdOn, ascending: false)]\n        return CoreDataPublisher(request: request, context: context)\n            .map { bookmarks in bookmarks.map { PageBookmarkPersistenceModel($0) } }\n            .eraseToAnyPublisher()\n    }\n\n    public func insertPageBookmark(_ page: Int) async throws {\n        try await context.perform { context in\n            let newBookmark = MO_PageBookmark(context: context)\n            newBookmark.createdOn = Date()\n            newBookmark.modifiedOn = Date()\n            newBookmark.page = Int32(page)\n\n            try context.save(with: \"insertPageBookmark\")\n        }\n    }\n\n    public func removePageBookmark(_ page: Int) async throws {\n        try await context.perform { context in\n            let request = fetchRequest(forPage: page)\n            let bookmarks = try context.fetch(request)\n            for bookmark in bookmarks {\n                context.delete(bookmark)\n            }\n            try context.save(with: \"removePageBookmark\")\n        }\n    }\n\n    public func removeAllPageBookmarks() async throws {\n        try await context.perform { context in\n            let request: NSFetchRequest<MO_PageBookmark> = MO_PageBookmark.fetchRequest()\n            let bookmarks = try context.fetch(request)\n            for bookmark in bookmarks {\n                context.delete(bookmark)\n            }\n            try context.save(with: \"removeAllPageBookmarks\")\n        }\n    }\n\n    // MARK: Private\n\n    private let context: NSManagedObjectContext\n\n    private func fetchRequest(forPage page: Int) -> NSFetchRequest<MO_PageBookmark> {\n        let request: NSFetchRequest<MO_PageBookmark> = MO_PageBookmark.fetchRequest()\n        request.predicate = NSPredicate(equals: (Schema.PageBookmark.page, page))\n        return request\n    }\n}\n\nprivate extension PageBookmarkPersistenceModel {\n    init(_ other: MO_PageBookmark) {\n        creationDate = other.createdOn ?? Date()\n        page = Int(other.page)\n    }\n}\n"
  },
  {
    "path": "Data/PageBookmarkPersistence/Sources/CoreDataPageBookmarkUniquifier.swift",
    "content": "//\n//  CoreDataPageBookmarkUniquifier.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/8/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport CoreDataModel\nimport CoreDataPersistence\n\npublic typealias CoreDataPageBookmarkUniquifier = SimpleCoreDataEntityUniquifier<MO_PageBookmark>\nextension CoreDataPageBookmarkUniquifier {\n    public init() {\n        self.init(sortBy: Schema.PageBookmark.modifiedOn, ascending: false, key: .page)\n    }\n}\n"
  },
  {
    "path": "Data/PageBookmarkPersistence/Sources/MobileSyncPageBookmarkPersistence.swift",
    "content": "import Combine\nimport MobileSync\n\npublic struct MobileSyncPageBookmarkPersistence: PageBookmarkPersistence, @unchecked Sendable {\n    // MARK: Lifecycle\n\n    public init(syncService: SyncService) {\n        self.syncService = syncService\n    }\n\n    // MARK: Public\n\n    public func pageBookmarks() -> AnyPublisher<[PageBookmarkPersistenceModel], Never> {\n        let subject = CurrentValueSubject<[PageBookmarkPersistenceModel], Never>([])\n        let task = Task { @MainActor in\n            do {\n                for try await bookmarks in syncService.bookmarksSequence() {\n                    let persistenceModels = bookmarks\n                        .compactMap(Self.persistenceModel(from:))\n                        .sorted { $0.creationDate > $1.creationDate }\n                    subject.send(persistenceModels)\n                }\n            } catch {\n                // Ignore errors\n            }\n        }\n\n        return subject\n            .handleEvents(receiveCancel: { task.cancel() })\n            .eraseToAnyPublisher()\n    }\n\n    public func insertPageBookmark(_ page: Int) async throws {\n        _ = try await syncService.addPageBookmark(Int32(page))\n    }\n\n    public func removePageBookmark(_ page: Int) async throws {\n        let bookmarks = try await bookmarks()\n        guard let bookmark = Self.pageBookmark(in: bookmarks, page: page) else {\n            return\n        }\n\n        try await syncService.removeBookmark(bookmark)\n    }\n\n    public func removeAllPageBookmarks() async throws {\n        let pageBookmarks = try await bookmarks().compactMap { $0 as? Bookmark.PageBookmark }\n\n        for bookmark in pageBookmarks {\n            try await syncService.removeBookmark(bookmark)\n        }\n    }\n\n    // MARK: Private\n\n    private let syncService: SyncService\n\n    private static func pageBookmark(in bookmarks: [Bookmark], page: Int) -> Bookmark.PageBookmark? {\n        bookmarks\n            .compactMap { $0 as? Bookmark.PageBookmark }\n            .first { Int($0.page) == page }\n    }\n\n    private static func persistenceModel(from bookmark: Bookmark) -> PageBookmarkPersistenceModel? {\n        guard let bookmark = bookmark as? Bookmark.PageBookmark else {\n            return nil\n        }\n        return PageBookmarkPersistenceModel(page: Int(bookmark.page), creationDate: bookmark.lastUpdated)\n    }\n\n    @MainActor\n    private func bookmarks() async throws -> [Bookmark] {\n        for try await bookmarks in syncService.bookmarksSequence() {\n            return bookmarks\n        }\n\n        return []\n    }\n}\n"
  },
  {
    "path": "Data/PageBookmarkPersistence/Sources/PageBookmarkPersistence.swift",
    "content": "//\n//  PageBookmarkPersistence.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/8/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport Combine\n\npublic protocol PageBookmarkPersistence {\n    func pageBookmarks() -> AnyPublisher<[PageBookmarkPersistenceModel], Never>\n    func insertPageBookmark(_ page: Int) async throws\n    func removePageBookmark(_ page: Int) async throws\n    func removeAllPageBookmarks() async throws\n}\n"
  },
  {
    "path": "Data/PageBookmarkPersistence/Sources/PageBookmarkPersistenceModel.swift",
    "content": "//\n//  PageBookmarkPersistenceModel.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2023-03-05.\n//  Copyright © 2023 Quran.com. All rights reserved.\n//\n\nimport Foundation\n\npublic struct PageBookmarkPersistenceModel {\n    public let page: Int\n    public let creationDate: Date\n}\n"
  },
  {
    "path": "Data/PageBookmarkPersistence/Tests/CoreDataPageBookmarkPersistenceTests.swift",
    "content": "//\n//  CoreDataPageBookmarkPersistenceTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-31.\n//\n\nimport AsyncUtilitiesForTesting\nimport Combine\nimport CoreDataPersistence\nimport CoreDataPersistenceTestSupport\nimport XCTest\n@testable import PageBookmarkPersistence\n\nfinal class CoreDataPageBookmarkPersistenceTests: XCTestCase {\n    var persistence: CoreDataPageBookmarkPersistence!\n    var stack: CoreDataStack!\n    var subscriptions = Set<AnyCancellable>()\n\n    override func setUp() {\n        super.setUp()\n\n        stack = CoreDataStack.testingStack()\n        persistence = CoreDataPageBookmarkPersistence(stack: stack)\n    }\n\n    override func tearDown() {\n        super.tearDown()\n        // Clean up any resources here\n        CoreDataStack.removePersistentFiles()\n        persistence = nil\n        stack = nil\n        subscriptions.removeAll()\n    }\n\n    func testInsertAndRetrievePageBookmarks() async throws {\n        // 1. Insert some page bookmarks to the persistence\n        let pages = [1, 2, 300]\n\n        for page in pages {\n            try await persistence.insertPageBookmark(page)\n        }\n\n        // 2. Fetch the page bookmarks using pageBookmarks()\n        let collector = PublisherCollector(persistence.pageBookmarks())\n\n        // 3. Verify that the returned page bookmarks match what you expect\n        XCTAssertEqual(collector.items.count, 1)\n        XCTAssertEqual(collector.items.last?.map(\\.page), [300, 2, 1])\n\n        // 4. Insert more\n        try await persistence.insertPageBookmark(45)\n        XCTAssertEqual(collector.items.last?.map(\\.page), [45, 300, 2, 1])\n\n        // 5. Remove a page bookmark\n        try await persistence.removePageBookmark(2)\n        XCTAssertEqual(collector.items.last?.map(\\.page), [45, 300, 1])\n\n        // 6. Remove another page bookmark\n        try await persistence.removePageBookmark(45)\n        XCTAssertEqual(collector.items.last?.map(\\.page), [300, 1])\n\n        // 7. Verify new collectors return same result\n        let newcollector = PublisherCollector(persistence.pageBookmarks())\n        XCTAssertEqual(newcollector.items.last?.map(\\.page), [300, 1])\n    }\n}\n"
  },
  {
    "path": "Data/SQLitePersistence/Sources/DatabaseConnection.swift",
    "content": "//\n//  DatabaseConnection.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-25.\n//\n\nimport Combine\nimport Foundation\nimport GRDB\nimport Utilities\nimport VLogging\n\nprivate struct DatabaseConnectionPool: Sendable {\n    private struct Connection {\n        let database: DatabaseWriter\n        var references: Int\n    }\n\n    private struct State {\n        var connections: [URL: Connection] = [:]\n    }\n\n    // MARK: Internal\n\n    func database(for url: URL, readonly: Bool) throws -> DatabaseWriter {\n        try state.withCriticalRegion { state in\n            if var connection = state.connections[url] {\n                connection.references += 1\n                state.connections[url] = connection\n                return connection.database\n            }\n\n            // Create the database folder if needed.\n            try? FileManager.default.createDirectory(\n                atPath: url.path.stringByDeletingLastPathComponent,\n                withIntermediateDirectories: true,\n                attributes: nil\n            )\n\n            let database = try newDatabase(url: url, readonly: readonly)\n            let newConnection = Connection(database: database, references: 1)\n            state.connections[url] = newConnection\n            return newConnection.database\n        }\n    }\n\n    func releaseDatabase(for url: URL) {\n        state.withCriticalRegion { state in\n            if var connection = state.connections[url] {\n                connection.references -= 1\n                if connection.references == 0 {\n                    state.connections[url] = nil\n                } else {\n                    state.connections[url] = connection\n                }\n            }\n        }\n    }\n\n    // MARK: Private\n\n    private let state = ManagedCriticalState(State())\n\n    private func newDatabase(url: URL, readonly: Bool) throws -> DatabaseWriter {\n        do {\n            return try attempt(times: 3) {\n                var configuration = Configuration()\n                configuration.readonly = readonly\n                // TODO: Remove and use singletons instead.\n                configuration.busyMode = .timeout(5)\n                return try DatabasePool(path: url.path, configuration: configuration)\n            }\n        } catch {\n            logger.error(\"Cannot open sqlite file \\(url). Error: \\(error)\")\n            throw PersistenceError(error, databaseURL: url)\n        }\n    }\n}\n\npublic final class DatabaseConnection: Sendable {\n    private struct State {\n        var database: DatabaseWriter?\n    }\n\n    // MARK: Lifecycle\n\n    public init(url: URL, readonly: Bool = true) {\n        databaseURL = url\n        self.readonly = readonly\n    }\n\n    deinit {\n        state.withCriticalRegion { state in\n            if state.database != nil {\n                Self.connectionPool.releaseDatabase(for: databaseURL)\n            }\n        }\n    }\n\n    // MARK: Public\n\n    public func read<T>(_ block: @Sendable @escaping (Database) throws -> T) async throws -> T {\n        let database = try getDatabase()\n        do {\n            return try await database.read(block)\n        } catch {\n            logger.error(\"General error while executing query. Error: \\(error).\")\n            throw PersistenceError(error, databaseURL: databaseURL)\n        }\n    }\n\n    /// Creates a publisher that tracks changes in the results of database requests,\n    /// and notifies fresh values whenever the database changes\n    ///\n    /// The first value is notified when the publisher is created. Subsequent changes *may* get coalesced in notifications.\n    public func readPublisher<T>(_ block: @Sendable @escaping (Database) throws -> T) throws -> AnyPublisher<T, Error> {\n        // - ValueObservation may coalesce subsequent changes into a single notification\n        // - ValueObservation fetches a fresh value immediately after a change *is committed in the database*.\n        // - By default, delivers on the main thread.\n        ValueObservation\n            .tracking(block)\n            .publisher(in: try getDatabase())\n            .eraseToAnyPublisher()\n    }\n\n    public func write<T>(_ block: @Sendable @escaping (Database) throws -> T) async throws -> T {\n        let database = try getDatabase()\n        do {\n            return try await database.write(block)\n        } catch {\n            logger.error(\"General error while executing query. Error: \\(error).\")\n            throw PersistenceError(error, databaseURL: databaseURL)\n        }\n    }\n\n    // MARK: Internal\n\n    let databaseURL: URL\n    let readonly: Bool\n\n    func getDatabase() throws -> DatabaseWriter {\n        try state.withCriticalRegion { state in\n            if let database = state.database {\n                return database\n            }\n\n            let database = try Self.connectionPool.database(for: databaseURL, readonly: readonly)\n            state.database = database\n            return database\n        }\n    }\n\n    // MARK: Private\n\n    private static let connectionPool = DatabaseConnectionPool()\n\n    private let state = ManagedCriticalState(State())\n}\n\nprivate extension PersistenceError {\n    init(_ error: Error, databaseURL: URL) {\n        let dbFileIssueCodes: [ResultCode] = [\n            .SQLITE_PERM,\n            .SQLITE_NOTADB,\n            .SQLITE_CORRUPT,\n            .SQLITE_CANTOPEN,\n        ]\n\n        if let error = error as? PersistenceError {\n            self = error\n        }\n        if let error = error as? DatabaseError {\n            if dbFileIssueCodes.contains(error.extendedResultCode) {\n                // remove the db file as sometimes, the download is completed with error.\n                try? FileManager.default.removeItem(at: databaseURL)\n                logger.error(\"Bad file error while executing query. Error: \\(error).\")\n                self = PersistenceError.badFile(error)\n            }\n        }\n        self = PersistenceError.query(error)\n    }\n}\n\nextension DatabaseMigrator {\n    public func migrate(_ connection: DatabaseConnection) throws {\n        let database = try connection.getDatabase()\n        do {\n            try migrate(database)\n        } catch {\n            throw PersistenceError(error, databaseURL: connection.databaseURL)\n        }\n    }\n}\n"
  },
  {
    "path": "Data/SQLitePersistence/Sources/PersistenceError.swift",
    "content": "//\n//  PersistenceError.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/22/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\nimport Localization\n\npublic enum PersistenceError: Error {\n    case general(String)\n    case openDatabase(Error, filePath: String)\n    case query(Error)\n    case unknown(Error)\n    case badFile(Error?)\n\n    // MARK: Public\n\n    public static func generalError(_ error: Error, info: String) -> PersistenceError {\n        .general(\"error: \\(error), info: \\(info)\")\n    }\n}\n\nextension PersistenceError: LocalizedError {\n    public var errorDescription: String? {\n        l(\"error.message.general\")\n    }\n}\n"
  },
  {
    "path": "Data/SQLitePersistence/Tests/DatabaseConnectionTests.swift",
    "content": "//\n//  DatabaseConnectionTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-27.\n//\n\nimport AsyncUtilitiesForTesting\nimport Combine\nimport GRDB\nimport XCTest\n@testable import SQLitePersistence\n\nclass DatabaseConnectionTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUp() {\n        super.setUp()\n        // Create a temporary file for the test database.\n        testURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(UUID().uuidString)\n    }\n\n    override func tearDown() {\n        try? FileManager.default.removeItem(at: testURL)\n        super.tearDown()\n    }\n\n    func test_creation() throws {\n        let connection = DatabaseConnection(url: testURL)\n        XCTAssertNotNil(connection)\n        // Initially database file is not created.\n        XCTAssertFalse(testURL.isReachable)\n    }\n\n    func test_readAndWrite() async throws {\n        let connection = DatabaseConnection(url: testURL, readonly: false)\n        try await connection.insertNames()\n\n        XCTAssertTrue(testURL.isReachable)\n\n        let names = try await connection.readNames()\n        XCTAssertEqual(names, [\"Alice\"])\n    }\n\n    func test_readPublisher() async throws {\n        // Since we can't guarantee a defined sequence of intermediate states, the test\n        // here attempts to perform a series of changes in a way that would eventually\n        // deliver a specifc set of values.\n        // Adding some latency is key, as it allows SQLite to commit changes to the desk.\n        let connection = DatabaseConnection(url: testURL, readonly: false)\n        try await connection.createNamesTable()\n        let publisher = try connection.namesPublisher()\n\n        var assertExpectation: XCTestExpectation?\n        var expectedNames: [String]?\n        let cancellable = publisher.sink(\n            receiveCompletion: { _ in },\n            receiveValue: { names in\n                guard let expected = expectedNames else { return }\n\n                if Set(expected) == Set(names) {\n                    assertExpectation?.fulfill()\n                    assertExpectation = nil\n                    expectedNames = nil\n                }\n            }\n        )\n\n        expectedNames = [\"Alice\"]\n        let expectation1 = expectation(description: \"Expected to deliver the first batch of inserted names\")\n        assertExpectation = expectation1\n        try await connection.insert(name: \"Alice\")\n        await fulfillment(of: [expectation1], timeout: 2)\n\n        // Add more\n        expectedNames = [\"Alice\", \"Bob\", \"Derek\"]\n        let expectation2 = expectation(description: \"Expected to deliver the second batch of names\")\n        assertExpectation = expectation2\n        try await connection.insert(name: \"Bob\")\n        try await connection.insert(name: \"Derek\")\n        await fulfillment(of: [expectation2], timeout: 2)\n\n        // Remove one\n        expectedNames = [\"Alice\", \"Derek\"]\n        let expectation3 = expectation(description: \"Expected to deliver the third batch of names\")\n        assertExpectation = expectation3\n        try await connection.remove(name: \"Bob\")\n        await fulfillment(of: [expectation3], timeout: 2)\n\n        cancellable.cancel()\n    }\n\n    func test_sharing() async throws {\n        let connection1 = DatabaseConnection(url: testURL, readonly: false)\n        let connection2 = DatabaseConnection(url: testURL)\n        try await connection1.insertNames()\n        let names = try await connection2.readNames()\n        XCTAssertEqual(names, [\"Alice\"])\n    }\n\n    func test_release() throws {\n        var connection: DatabaseConnection? = DatabaseConnection(url: testURL)\n        weak var weakConnection = connection\n        connection = nil // should call deinit\n        XCTAssertNil(weakConnection)\n    }\n\n    func test_corruption() async throws {\n        // Simulate a database corruption manually.\n        try \"corrupted data\".write(to: testURL, atomically: true, encoding: .utf8)\n\n        let connection = DatabaseConnection(url: testURL)\n        await AsyncAssertThrows(try await {\n            _ = try await connection.readNames()\n        }(), nil)\n\n        // Database should be deleted because the error is SQLITE_NOTADB.\n        XCTAssertFalse(testURL.isReachable)\n    }\n\n    // MARK: Private\n\n    private var testURL: URL!\n}\n\nprivate extension DatabaseConnection {\n    func createNamesTable() async throws {\n        try await write { db in\n            try db.create(table: \"test\") { t in\n                t.autoIncrementedPrimaryKey(\"id\")\n                t.column(\"name\", .text)\n            }\n        }\n    }\n\n    func insertNames() async throws {\n        try await createNamesTable()\n        try await insert(name: \"Alice\")\n    }\n\n    func insert(name: String) async throws {\n        try await write { db in\n            try db.execute(sql: \"INSERT INTO test (name) VALUES (?)\", arguments: StatementArguments([name]))\n        }\n    }\n\n    func remove(name: String) async throws {\n        try await write { db in\n            try db.execute(sql: \"DELETE FROM test WHERE name = ?\", arguments: [name])\n        }\n    }\n\n    func namesPublisher() throws -> AnyPublisher<[String], Error> {\n        try readPublisher { db in\n            try String.fetchAll(db, sql: \"SELECT name FROM test\")\n        }\n    }\n\n    func readNames() async throws -> [String] {\n        try await read { db in\n            try String.fetchAll(db, sql: \"SELECT name FROM test\")\n        }\n    }\n\n    private func createNamesTable(in db: Database) throws {\n        try db.create(table: \"test\", ifNotExists: true) { t in\n            t.autoIncrementedPrimaryKey(\"id\")\n            t.column(\"name\", .text)\n        }\n    }\n}\n"
  },
  {
    "path": "Data/SyncedPageBookmarkPersistence/Sources/GRDBSyncedPageBookmarkPersistence.swift",
    "content": "//\n//  GRDBSyncedPageBookmarkPersistence.swift\n//  QuranEngine\n//\n//  Created by Mohannad Hassan on 31/01/2025.\n//\n\nimport Combine\nimport Foundation\nimport GRDB\nimport SQLitePersistence\nimport VLogging\n\npublic struct GRDBSyncedPageBookmarkPersistence: SyncedPageBookmarkPersistence {\n    // MARK: Lifecycle\n\n    init(db: DatabaseConnection) {\n        self.db = db\n        do {\n            try migrator.migrate(db)\n        } catch {\n            logger.error(\"Failed to to do Page Bookmarks migration: \\(error)\")\n        }\n    }\n\n    public init(directory: URL) {\n        let fileURL = directory.appendingPathComponent(\"pagebookmarks.db\", isDirectory: false)\n        self.init(db: DatabaseConnection(url: fileURL, readonly: false))\n    }\n\n    // MARK: Public\n\n    public func pageBookmarksPublisher() throws -> AnyPublisher<[SyncedPageBookmarkPersistenceModel], Never> {\n        do {\n            return try db.readPublisher { db in\n                try GRDBSyncedPageBookmark.fetchAll(db).map { $0.toPersistenceModel() }\n            }\n            .catch { error in\n                logger.error(\"Error in page bookmarks publisher: \\(error)\")\n                return Empty<[SyncedPageBookmarkPersistenceModel], Never>()\n            }\n            .eraseToAnyPublisher()\n        } catch {\n            logger.error(\"Failed to create a publisher for page bookmarks: \\(error)\")\n            return Empty<[SyncedPageBookmarkPersistenceModel], Never>().eraseToAnyPublisher()\n        }\n    }\n\n    public func bookmark(page: Int) async throws -> SyncedPageBookmarkPersistenceModel? {\n        try await db.read { db in\n            try GRDBSyncedPageBookmark.fetchOne(\n                db.makeStatement(sql: \"SELECT * FROM \\(GRDBSyncedPageBookmark.databaseTableName) WHERE page = ?\"),\n                arguments: [page]\n            )\n            .map { $0.toPersistenceModel() }\n        }\n    }\n\n    public func insertBookmark(_ bookmark: SyncedPageBookmarkPersistenceModel) async throws {\n        try await db.write { db in\n            var bookmark = GRDBSyncedPageBookmark(bookmark)\n            try bookmark.insert(db)\n        }\n    }\n\n    public func removeBookmark(withRemoteID remoteID: String) async throws {\n        guard !remoteID.isEmpty else {\n            logger.critical(\"[SyncedPageBookmarkPersistence] Attempted to remove a bookmark with an empty remote ID.\")\n            fatalError()\n        }\n        try await db.write { db in\n            try db.execute(sql: \"DELETE FROM \\(GRDBSyncedPageBookmark.databaseTableName) WHERE remote_id = ?\", arguments: [remoteID])\n        }\n    }\n\n    // MARK: Private\n\n    private let db: DatabaseConnection\n\n    private var migrator: DatabaseMigrator {\n        var migrator = DatabaseMigrator()\n        migrator.registerMigration(\"createPageBookmarks\") { db in\n            try db.create(table: GRDBSyncedPageBookmark.databaseTableName, options: .ifNotExists) { table in\n                table.column(\"page\", .integer).notNull().unique()\n                table.column(\"remote_id\", .text).primaryKey()\n                table.column(\"creation_date\", .datetime).notNull()\n            }\n        }\n        return migrator\n    }\n}\n\nprivate struct GRDBSyncedPageBookmark: Identifiable, Codable, FetchableRecord, MutablePersistableRecord {\n    enum CodingKeys: String, CodingKey {\n        case page\n        case creationDate = \"creation_date\"\n        case remoteID = \"remote_id\"\n    }\n\n    static var databaseTableName: String {\n        \"synced_page_bookmarks\"\n    }\n\n    var page: Int\n    var creationDate: Date\n    var remoteID: String\n\n    var id: Int {\n        page\n    }\n}\n\nextension GRDBSyncedPageBookmark {\n    init(_ bookmark: SyncedPageBookmarkPersistenceModel) {\n        page = bookmark.page\n        creationDate = bookmark.creationDate\n        remoteID = bookmark.remoteID\n    }\n\n    func toPersistenceModel() -> SyncedPageBookmarkPersistenceModel {\n        .init(page: page, remoteID: remoteID, creationDate: creationDate)\n    }\n}\n"
  },
  {
    "path": "Data/SyncedPageBookmarkPersistence/Sources/SyncedPageBookmarkPersistence.swift",
    "content": "//\n//  SyncedPageBookmarkPersistence.swift\n//  QuranEngine\n//\n//  Created by Mohannad Hassan on 09/02/2025.\n//\n\nimport Combine\nimport Foundation\n\npublic protocol SyncedPageBookmarkPersistence {\n    func pageBookmarksPublisher() throws -> AnyPublisher<[SyncedPageBookmarkPersistenceModel], Never>\n    func bookmark(page: Int) async throws -> SyncedPageBookmarkPersistenceModel?\n    func insertBookmark(_ bookmark: SyncedPageBookmarkPersistenceModel) async throws\n    func removeBookmark(withRemoteID remoteID: String) async throws\n}\n"
  },
  {
    "path": "Data/SyncedPageBookmarkPersistence/Sources/SyncedPageBookmarkPersistenceModel.swift",
    "content": "//\n//  SyncedPageBookmarkPersistenceModel.swift\n//  QuranEngine\n//\n//  Created by Mohannad Hassan on 09/02/2025.\n//\n\nimport Foundation\n\npublic struct SyncedPageBookmarkPersistenceModel {\n    public let page: Int\n    public let remoteID: String\n    public let creationDate: Date\n\n    public init(page: Int, remoteID: String, creationDate: Date) {\n        self.page = page\n        self.remoteID = remoteID\n        self.creationDate = creationDate\n    }\n}\n"
  },
  {
    "path": "Data/SyncedPageBookmarkPersistence/Tests/GRDBSyncedPageBookmarkPersistenceTests.swift",
    "content": "//\n//  GRDBSyncedPageBookmarkPersistenceTests.swift\n//  QuranEngine\n//\n//  Created by Mohannad Hassan on 01/02/2025.\n//\n\nimport AsyncUtilitiesForTesting\nimport SQLitePersistence\nimport XCTest\n@testable import SyncedPageBookmarkPersistence\n\nfinal class GRDBSyncedPageBookmarkPersistenceTests: XCTestCase {\n    private var testURL: URL!\n    private var db: DatabaseConnection!\n    private var persistence: GRDBSyncedPageBookmarkPersistence!\n\n    override func setUp() {\n        super.setUp()\n\n        testURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(UUID().uuidString)\n        db = DatabaseConnection(url: testURL, readonly: false)\n        persistence = GRDBSyncedPageBookmarkPersistence(db: db)\n    }\n\n    override func tearDown() {\n        try? FileManager.default.removeItem(at: testURL)\n        super.tearDown()\n    }\n\n    func testInsertion() async throws {\n        let pages = [1, 2, 300]\n\n        let expectedBookmarkedPages = [1, 2, 300]\n\n        let exp = expectation(description: \"Expected to send the expected bookmarks\")\n        let cancellable = try persistence.pageBookmarksPublisher()\n            .sink { bookmarks in\n                let pages = bookmarks.map(\\.page)\n                guard Set(pages) == Set(expectedBookmarkedPages) else {\n                    return\n                }\n                exp.fulfill()\n            }\n\n        for page in pages {\n            try await persistence.insertBookmark(SyncedPageBookmarkPersistenceModel(page: page))\n        }\n        await fulfillment(of: [exp], timeout: 1)\n        cancellable.cancel()\n    }\n\n    func testDeletion() async throws {\n        let pageNos = [1, 2, 300]\n        let pages = pageNos.map(SyncedPageBookmarkPersistenceModel.init(page:))\n        for page in pages {\n            try await persistence.insertBookmark(page)\n        }\n\n        let expectedPageNumbers = [1, 300]\n        let exp = expectation(description: \"Expected to send the expected bookmarks without the deleted one\")\n        let cancellable = try persistence.pageBookmarksPublisher()\n            .sink { bookmarks in\n                let pages = bookmarks.map(\\.page)\n                guard Set(pages) == Set(expectedPageNumbers) else {\n                    return\n                }\n                exp.fulfill()\n            }\n\n        try await persistence.removeBookmark(withRemoteID: pages[1].remoteID)\n\n        await fulfillment(of: [exp], timeout: 1)\n        cancellable.cancel()\n    }\n}\n\nprivate extension SyncedPageBookmarkPersistenceModel {\n    init(page: Int) {\n        self.init(page: page, remoteID: UUID().uuidString, creationDate: .distantPast)\n    }\n}\n"
  },
  {
    "path": "Data/TranslationPersistence/ActiveTranslationsPersistence.swift",
    "content": "//\n//  ActiveTranslationsPersistence.swift\n//  Quran\n//\n//  Created by Ahmed El-Helw on 2/13/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport QuranText\n\npublic protocol ActiveTranslationsPersistence {\n    func retrieveAll() async throws -> [Translation]\n    func insert(_ translation: Translation) async throws\n    func remove(_ translation: Translation) async throws\n    func update(_ translation: Translation) async throws\n}\n"
  },
  {
    "path": "Data/TranslationPersistence/GRDBActiveTranslationsPersistence.swift",
    "content": "//\n//  GRDBActiveTranslationsPersistence.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-21.\n//\n\nimport Foundation\nimport GRDB\nimport QuranText\nimport SQLitePersistence\nimport VLogging\n\npublic struct GRDBActiveTranslationsPersistence: ActiveTranslationsPersistence {\n    // MARK: Lifecycle\n\n    init(db: DatabaseConnection) {\n        self.db = db\n        do {\n            try migrator.migrate(db)\n        } catch {\n            logger.error(\"Error while performing Translations migrations. Error: \\(error)\")\n        }\n    }\n\n    public init(directory: URL) {\n        let fileURL = directory.appendingPathComponent(\"translations.db\", isDirectory: false)\n        self.init(db: DatabaseConnection(url: fileURL, readonly: false))\n    }\n\n    // MARK: Public\n\n    public func retrieveAll() async throws -> [Translation] {\n        try await db.read { db in\n            let grdbTranslations = try GRDBTranslation.fetchAll(db)\n            return grdbTranslations.map { $0.toTranslation() }\n        }\n    }\n\n    public func insert(_ translation: Translation) async throws {\n        try await db.write { db in\n            var grdbTranslation = GRDBTranslation(translation)\n            try grdbTranslation.insert(db)\n        }\n    }\n\n    public func remove(_ translation: Translation) async throws {\n        try await db.write { db in\n            let grdbTranslation = GRDBTranslation(translation)\n            try grdbTranslation.delete(db)\n        }\n    }\n\n    public func update(_ translation: Translation) async throws {\n        try await db.write { db in\n            let grdbTranslation = GRDBTranslation(translation)\n            try grdbTranslation.update(db)\n        }\n    }\n\n    // MARK: Internal\n\n    let db: DatabaseConnection\n\n    // MARK: Private\n\n    private var migrator: DatabaseMigrator {\n        var migrator = DatabaseMigrator()\n        migrator.registerMigration(\"createTranslations\") { db in\n            try db.create(table: \"translations\", options: .ifNotExists) { table in\n                table.primaryKey(\"_ID\", .integer)\n                table.column(\"name\", .text).notNull()\n                table.column(\"translator\", .text)\n                table.column(\"translator_foreign\", .text)\n                table.column(\"fileURL\", .text).notNull()\n                table.column(\"filename\", .text).notNull()\n                table.column(\"languageCode\", .text).notNull()\n                table.column(\"version\", .integer).notNull()\n                table.column(\"installedVersion\", .integer)\n            }\n        }\n        return migrator\n    }\n}\n\n// MARK: - Database Model\n\nprivate struct GRDBTranslation: Identifiable, Codable, FetchableRecord, MutablePersistableRecord {\n    enum CodingKeys: String, CodingKey {\n        case id = \"_ID\"\n        case displayName = \"name\"\n        case translator\n        case translatorForeign = \"translator_foreign\"\n        case fileURL\n        case fileName = \"filename\"\n        case languageCode\n        case version\n        case installedVersion\n    }\n\n    // Define the database table\n    static var databaseTableName: String {\n        \"translations\"\n    }\n\n    var id: Int\n    var displayName: String\n    var translator: String?\n    var translatorForeign: String?\n    var fileURL: String\n    var fileName: String\n    var languageCode: String\n    var version: Int\n    var installedVersion: Int?\n}\n\n// Mapping functions\nextension GRDBTranslation {\n    init(_ translation: Translation) {\n        id = translation.id\n        displayName = translation.displayName\n        translator = translation.translator\n        translatorForeign = translation.translatorForeign\n        fileURL = translation.fileURL.absoluteString\n        fileName = translation.fileName\n        languageCode = translation.languageCode\n        version = translation.version\n        installedVersion = translation.installedVersion\n    }\n\n    func toTranslation() -> Translation {\n        Translation(\n            id: id,\n            displayName: displayName,\n            translator: translator,\n            translatorForeign: translatorForeign,\n            fileURL: URL(string: fileURL)!,\n            fileName: fileName,\n            languageCode: languageCode,\n            version: version,\n            installedVersion: installedVersion\n        )\n    }\n}\n"
  },
  {
    "path": "Data/VerseTextPersistence/DatabaseVersionPersistence.swift",
    "content": "//\n//  DatabaseVersionPersistence.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 3/12/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\npublic protocol DatabaseVersionPersistence {\n    func getTextVersion() async throws -> Int\n}\n"
  },
  {
    "path": "Data/VerseTextPersistence/GRDBDatabaseVersionPersistence.swift",
    "content": "//\n//  GRDBDatabaseVersionPersistence.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-22.\n//\n\nimport Foundation\nimport GRDB\nimport SQLitePersistence\n\npublic struct GRDBDatabaseVersionPersistence: DatabaseVersionPersistence {\n    // MARK: Lifecycle\n\n    init(db: DatabaseConnection) {\n        self.db = db\n    }\n\n    public init(fileURL: URL) {\n        self.init(db: DatabaseConnection(url: fileURL))\n    }\n\n    // MARK: Public\n\n    public func getTextVersion() async throws -> Int {\n        try await db.read { db in\n            let property = try GRDBProperty\n                .filter(GRDBProperty.Columns.property == \"text_version\")\n                .fetchOne(db)\n            guard let property else {\n                throw RecordError.recordNotFound(\n                    databaseTableName: GRDBProperty.databaseTableName, key: [:]\n                )\n            }\n            return Int(property.value)!\n        }\n    }\n\n    // MARK: Internal\n\n    let db: DatabaseConnection\n}\n\nprivate struct GRDBProperty: Decodable, FetchableRecord, TableRecord {\n    enum Columns {\n        static let property = Column(CodingKeys.property)\n        static let value = Column(CodingKeys.value)\n    }\n\n    static var databaseTableName: String {\n        \"properties\"\n    }\n\n    var property: String\n    var value: String\n}\n"
  },
  {
    "path": "Data/VerseTextPersistence/GRDBVerseTextPersistence.swift",
    "content": "//\n//  GRDBVerseTextPersistence.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-23.\n//\n\nimport Foundation\nimport GRDB\nimport QuranKit\nimport SQLitePersistence\n\npublic struct GRDBQuranVerseTextPersistence: VerseTextPersistence {\n    public enum Mode {\n        case arabic\n        case share\n\n        // MARK: Internal\n\n        var tabelName: String {\n            switch self {\n            case .arabic:\n                return \"arabic_text\"\n            case .share:\n                return \"share_text\"\n            }\n        }\n    }\n\n    // MARK: Lifecycle\n\n    public init(fileURL: URL) {\n        self.init(mode: .arabic, fileURL: fileURL)\n    }\n\n    public init(mode: Mode, fileURL: URL) {\n        persistence = GRDBVerseTextPersistence(fileURL: fileURL, textTable: mode.tabelName)\n    }\n\n    // MARK: Public\n\n    public func textForVerses(_ verses: [AyahNumber]) async throws -> [AyahNumber: String] {\n        try await persistence.textForVerses(verses, transform: textFromRow)\n    }\n\n    public func textForVerse(_ verse: AyahNumber) async throws -> String {\n        try await persistence.textForVerse(verse, transform: textFromRow)\n    }\n\n    public func autocomplete(term: String) async throws -> [String] {\n        try await persistence.autocomplete(term: term)\n    }\n\n    public func search(for term: String, quran: Quran) async throws -> [(verse: AyahNumber, text: String)] {\n        try await persistence.search(for: term, quran: quran)\n    }\n\n    // MARK: Private\n\n    private let persistence: GRDBVerseTextPersistence\n\n    private func textFromRow(_ row: Row, quran: Quran) -> String {\n        row[\"text\"]\n    }\n}\n\npublic struct GRDBTranslationVerseTextPersistence: TranslationVerseTextPersistence {\n    // MARK: Lifecycle\n\n    public init(fileURL: URL) {\n        self.fileURL = fileURL\n        persistence = GRDBVerseTextPersistence(fileURL: fileURL, textTable: \"verses\")\n    }\n\n    // MARK: Public\n\n    public func textForVerses(_ verses: [AyahNumber]) async throws -> [AyahNumber: TranslationTextPersistenceModel] {\n        try await persistence.textForVerses(verses, transform: textFromRow)\n    }\n\n    public func textForVerse(_ verse: AyahNumber) async throws -> TranslationTextPersistenceModel {\n        try await persistence.textForVerse(verse, transform: textFromRow)\n    }\n\n    public func autocomplete(term: String) async throws -> [String] {\n        try await persistence.autocomplete(term: term)\n    }\n\n    public func search(for term: String, quran: Quran) async throws -> [(verse: AyahNumber, text: String)] {\n        try await persistence.search(for: term, quran: quran)\n    }\n\n    // MARK: Private\n\n    private let fileURL: URL\n    private let persistence: GRDBVerseTextPersistence\n\n    private func textFromRow(_ row: Row, quran: Quran) throws -> TranslationTextPersistenceModel {\n        let value = row[\"text\"]\n        if let stringText = value as? String {\n            // if the data is an Integer but saved as String, try to see if it's a valid verseId\n            if let verseId = Int(stringText), verseId > 0 && verseId <= quran.verses.count {\n                return referenceVerse(verseId, quran: quran)\n            } else {\n                return .string(stringText)\n            }\n        } else if let verseId = value as? Int64 {\n            return referenceVerse(Int(verseId), quran: quran)\n        }\n        throw PersistenceError.general(\"Text for verse is neither Int nor String. File: \\(fileURL.lastPathComponent)\")\n    }\n\n    private func referenceVerse(_ verseId: Int, quran: Quran) -> TranslationTextPersistenceModel {\n        // VerseId saved is an index in the quran.verses starts with 1\n        let verse = quran.verses[verseId - 1]\n        return .reference(verse)\n    }\n}\n\n// MARK: - Helper\n\nprivate struct GRDBVerseTextPersistence {\n    // MARK: Lifecycle\n\n    init(db: DatabaseConnection, textTable: String) {\n        self.db = db\n        self.textTable = textTable\n    }\n\n    init(fileURL: URL, textTable: String) {\n        self.init(db: DatabaseConnection(url: fileURL), textTable: textTable)\n    }\n\n    // MARK: Internal\n\n    let db: DatabaseConnection\n\n    func textForVerse<T>(_ verse: AyahNumber, transform: @escaping (Row, Quran) throws -> T) async throws -> T {\n        try await db.read { db in\n            if let text = try textForVerse(using: db, verse: verse, transform: transform) {\n                return text\n            }\n            throw PersistenceError.general(\"Cannot find any records for verse '\\(verse)'\")\n        }\n    }\n\n    func textForVerses<T>(\n        _ verses: [AyahNumber],\n        transform: @escaping (Row, Quran) throws -> T\n    ) async throws -> [AyahNumber: T] {\n        try await db.read { db in\n            var dictionary: [AyahNumber: T] = [:]\n            for verse in verses {\n                dictionary[verse] = try textForVerse(using: db, verse: verse, transform: transform)\n            }\n            return dictionary\n        }\n    }\n\n    // MARK: - Search\n\n    func autocomplete(term: String) async throws -> [String] {\n        try await db.read { db in\n            let request = SQLRequest<String>(\"\"\"\n            SELECT text\n            FROM \\(sql: searchTable)\n            WHERE text match \\(term) || '*'\n            LIMIT 100\n            \"\"\")\n            let rows = try request.fetchAll(db)\n            return rows\n        }\n    }\n\n    func search(for term: String, quran: Quran) async throws -> [(verse: AyahNumber, text: String)] {\n        try await db.read { db in\n            // TODO: Use match for FTS.\n            // Use like to match \"_\" in the Arabic regex as `match` treats \"_\" as a regular character.\n            let request = SQLRequest<Row>(\"\"\"\n            SELECT text, sura, ayah\n            FROM \\(sql: searchTable)\n            WHERE text like '%' || \\(term) || '%'\n            \"\"\")\n            let rows = try request.fetchAll(db)\n            return rowsToResults(rows, quran: quran)\n        }\n    }\n\n    // MARK: Private\n\n    private let textTable: String\n    private let searchTable = \"verses\"\n\n    private func textForVerse<T>(\n        using db: Database,\n        verse: AyahNumber,\n        transform: @escaping (Row, Quran) throws -> T\n    ) throws -> T? {\n        // Try to search using integer and string ayah/sura.\n        // Needed by some translation sqlite files.\n        let request = SQLRequest<Row>(\"\"\"\n        SELECT text\n        FROM \\(sql: textTable)\n        WHERE (ayah = \\(verse.ayah) OR ayah = \\(verse.ayah.description))\n          AND (sura = \\(verse.sura.suraNumber) OR sura = \\(verse.sura.suraNumber.description))\n        \"\"\")\n\n        guard let row = try request.fetchOne(db) else {\n            return nil\n        }\n\n        return try transform(row, verse.quran)\n    }\n\n    private func rowsToResults(_ rows: [Row], quran: Quran) -> [(verse: AyahNumber, text: String)] {\n        rows.map { row in\n            let text: String = row[\"text\"]\n            let sura: Int = row[\"sura\"]\n            let ayah: Int = row[\"ayah\"]\n            let verse = AyahNumber(quran: quran, sura: sura, ayah: ayah)!\n            return (verse: verse, text: text)\n        }\n    }\n}\n"
  },
  {
    "path": "Data/VerseTextPersistence/VerseTextPersistence.swift",
    "content": "//\n//  VerseTextPersistence.swift\n//  Quran\n//\n//  Created by Hossam Ghareeb on 6/20/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport QuranKit\n\npublic protocol SearchableTextPersistence {\n    func autocomplete(term: String) async throws -> [String]\n    func search(for term: String, quran: Quran) async throws -> [(verse: AyahNumber, text: String)]\n}\n\npublic protocol VerseTextPersistence: SearchableTextPersistence {\n    func textForVerse(_ verse: AyahNumber) async throws -> String\n    func textForVerses(_ verses: [AyahNumber]) async throws -> [AyahNumber: String]\n}\n\npublic enum TranslationTextPersistenceModel: Equatable {\n    case string(String)\n    case reference(AyahNumber)\n}\n\npublic protocol TranslationVerseTextPersistence: SearchableTextPersistence {\n    func textForVerse(_ verse: AyahNumber) async throws -> TranslationTextPersistenceModel\n    func textForVerses(_ verses: [AyahNumber]) async throws -> [AyahNumber: TranslationTextPersistenceModel]\n}\n"
  },
  {
    "path": "Data/WordFramePersistence/GRDBWordFramePersistence.swift",
    "content": "//\n//  GRDBWordFramePersistence.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-22.\n//\n\nimport Foundation\nimport GRDB\nimport QuranGeometry\nimport QuranKit\nimport SQLitePersistence\n\npublic struct GRDBWordFramePersistence: WordFramePersistence {\n    // MARK: Lifecycle\n\n    init(db: DatabaseConnection) {\n        self.db = db\n    }\n\n    public init(fileURL: URL) {\n        self.init(db: DatabaseConnection(url: fileURL))\n    }\n\n    // MARK: Public\n\n    public func wordFrameCollectionForPage(_ page: Page) async throws -> [WordFrame] {\n        try await db.read { db in\n            let query = GRDBGlyph.filter(GRDBGlyph.Columns.page == page.pageNumber)\n\n            var frames = [WordFrame]()\n            for glyph in try GRDBGlyph.fetchAll(db, query) {\n                let frame = glyph.toWordFrame(quran: page.quran)\n                frames.append(frame)\n            }\n            return frames\n        }\n    }\n\n    public func suraHeaders(_ page: Page) async throws -> [SuraHeaderLocation] {\n        try await db.read { db in\n            let query = GRDBSuraHeader.filter(GRDBSuraHeader.Columns.page == page.pageNumber)\n            let suraHeaders = try GRDBSuraHeader.fetchAll(db, query)\n            return suraHeaders.map { $0.toSuraHeaderLocation(quran: page.quran) }\n        }\n    }\n\n    public func ayahNumbers(_ page: Page) async throws -> [AyahNumberLocation] {\n        try await db.read { db in\n            let query = GRDBAyahMarker.filter(GRDBAyahMarker.Columns.page == page.pageNumber)\n            let ayahMarkers = try GRDBAyahMarker.fetchAll(db, query)\n            return ayahMarkers.map { $0.toAyahNumberLocation(quran: page.quran) }\n        }\n    }\n\n    // MARK: Internal\n\n    let db: DatabaseConnection\n}\n\nprivate struct GRDBGlyph: Decodable, FetchableRecord, TableRecord {\n    enum CodingKeys: String, CodingKey {\n        case id = \"glyph_id\"\n        case page = \"page_number\"\n        case sura = \"sura_number\"\n        case ayah = \"ayah_number\"\n        case line = \"line_number\"\n        case position\n        case minX = \"min_x\"\n        case maxX = \"max_x\"\n        case minY = \"min_y\"\n        case maxY = \"max_y\"\n    }\n\n    enum Columns {\n        static let id = Column(CodingKeys.id)\n        static let page = Column(CodingKeys.page)\n        static let sura = Column(CodingKeys.sura)\n        static let ayah = Column(CodingKeys.ayah)\n        static let line = Column(CodingKeys.line)\n        static let position = Column(CodingKeys.position)\n        static let minX = Column(CodingKeys.minX)\n        static let maxX = Column(CodingKeys.maxX)\n        static let minY = Column(CodingKeys.minY)\n        static let maxY = Column(CodingKeys.maxY)\n    }\n\n    // MARK: Internal\n\n    static var databaseTableName: String {\n        \"glyphs\"\n    }\n\n    var id: Int\n    var page: Int\n    var sura: Int\n    var ayah: Int\n    var line: Int\n    var position: Int\n    var minX: Int\n    var maxX: Int\n    var minY: Int\n    var maxY: Int\n}\n\nextension GRDBGlyph {\n    func toWordFrame(quran: Quran) -> WordFrame {\n        let ayah = AyahNumber(quran: quran, sura: sura, ayah: ayah)!\n        return WordFrame(\n            line: line,\n            word: Word(verse: ayah, wordNumber: position),\n            minX: minX,\n            maxX: maxX,\n            minY: minY,\n            maxY: maxY\n        )\n    }\n}\n\nprivate struct GRDBSuraHeader: Decodable, FetchableRecord, TableRecord {\n    enum CodingKeys: String, CodingKey {\n        case suraNumber = \"sura_number\"\n        case x\n        case y\n        case width\n        case height\n        case page = \"page_number\"\n    }\n\n    enum Columns {\n        static let suraNumber = Column(CodingKeys.suraNumber)\n        static let x = Column(CodingKeys.x)\n        static let y = Column(CodingKeys.y)\n        static let width = Column(CodingKeys.width)\n        static let height = Column(CodingKeys.height)\n        static let page = Column(CodingKeys.page)\n    }\n\n    // MARK: Internal\n\n    static var databaseTableName: String {\n        \"sura_headers\"\n    }\n\n    var suraNumber: Int\n    var x: Int\n    var y: Int\n    var width: Int\n    var height: Int\n    var page: Int\n}\n\nextension GRDBSuraHeader {\n    func toSuraHeaderLocation(quran: Quran) -> SuraHeaderLocation {\n        SuraHeaderLocation(\n            sura: Sura(quran: quran, suraNumber: suraNumber)!,\n            x: x, y: y, width: width, height: height\n        )\n    }\n}\n\nprivate struct GRDBAyahMarker: Decodable, FetchableRecord, TableRecord {\n    enum CodingKeys: String, CodingKey {\n        case suraNumber = \"sura_number\"\n        case ayahNumber = \"ayah_number\"\n        case x\n        case y\n        case page = \"page_number\"\n    }\n\n    enum Columns {\n        static let suraNumber = Column(CodingKeys.suraNumber)\n        static let ayahNumber = Column(CodingKeys.ayahNumber)\n        static let x = Column(CodingKeys.x)\n        static let y = Column(CodingKeys.y)\n        static let page = Column(CodingKeys.page)\n    }\n\n    // MARK: Internal\n\n    static var databaseTableName: String {\n        \"ayah_markers\"\n    }\n\n    var suraNumber: Int\n    var ayahNumber: Int\n    var x: Int\n    var y: Int\n    var page: Int\n}\n\nextension GRDBAyahMarker {\n    func toAyahNumberLocation(quran: Quran) -> AyahNumberLocation {\n        AyahNumberLocation(\n            ayah: AyahNumber(quran: quran, sura: suraNumber, ayah: ayahNumber)!,\n            x: x, y: y\n        )\n    }\n}\n"
  },
  {
    "path": "Data/WordFramePersistence/WordFramePersistence.swift",
    "content": "//\n//  WordFramePersistence.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-22.\n//\n\nimport QuranGeometry\nimport QuranKit\n\npublic protocol WordFramePersistence {\n    func wordFrameCollectionForPage(_ page: Page) async throws -> [WordFrame]\n    func suraHeaders(_ page: Page) async throws -> [SuraHeaderLocation]\n    func ayahNumbers(_ page: Page) async throws -> [AyahNumberLocation]\n}\n"
  },
  {
    "path": "Data/WordTextPersistence/GRDBWordTextPersistence.swift",
    "content": "//\n//  GRDBWordTextPersistence.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-23.\n//\n\nimport Foundation\nimport GRDB\nimport QuranKit\nimport SQLitePersistence\n\npublic struct GRDBWordTextPersistence: WordTextPersistence {\n    // MARK: Lifecycle\n\n    init(db: DatabaseConnection) {\n        self.db = db\n    }\n\n    public init(fileURL: URL) {\n        self.init(db: DatabaseConnection(url: fileURL))\n    }\n\n    // MARK: Public\n\n    public func translationForWord(_ word: Word) async throws -> String? {\n        try await wordText(at: word)?.translation\n    }\n\n    public func transliterationForWord(_ word: Word) async throws -> String? {\n        try await wordText(at: word)?.transliteration\n    }\n\n    // MARK: Internal\n\n    let db: DatabaseConnection\n\n    // MARK: Private\n\n    private func wordText(at word: Word) async throws -> GRDBWord? {\n        try await db.read { db in\n            let query = GRDBWord.filter(GRDBWord.Columns.sura == word.verse.sura.suraNumber\n                && GRDBWord.Columns.ayah == word.verse.ayah\n                && GRDBWord.Columns.word == word.wordNumber)\n\n            let words = try query.fetchAll(db)\n\n            return words.first\n        }\n    }\n}\n\nprivate struct GRDBWord: Decodable, FetchableRecord, TableRecord {\n    enum CodingKeys: String, CodingKey {\n        case word = \"word_position\"\n        case translation\n        case transliteration\n        case sura\n        case ayah\n    }\n\n    enum Columns {\n        static let word = Column(CodingKeys.word)\n        static let translation = Column(CodingKeys.translation)\n        static let transliteration = Column(CodingKeys.transliteration)\n        static let sura = Column(CodingKeys.sura)\n        static let ayah = Column(CodingKeys.ayah)\n    }\n\n    static let databaseTableName: String = \"words\"\n\n    var word: Int\n    var translation: String?\n    var transliteration: String?\n    var sura: Int\n    var ayah: Int\n}\n"
  },
  {
    "path": "Data/WordTextPersistence/WordTextPersistence.swift",
    "content": "//\n//  WordTextPersistence.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-23.\n//\n\nimport QuranKit\n\npublic protocol WordTextPersistence {\n    func translationForWord(_ word: Word) async throws -> String?\n    func transliterationForWord(_ word: Word) async throws -> String?\n}\n"
  },
  {
    "path": "Documentation/MobileSyncLocalDevelopment.md",
    "content": "# Mobile Sync Local Development\n\nThis project keeps the mobile sync integration behind the `QURAN_SYNC` compilation flag.\n\n## Enable the feature\n\n### From Xcode\n\nSet `QURAN_SYNC` directly in the example app target build settings:\n\n```text\nSWIFT_ACTIVE_COMPILATION_CONDITIONS = $(inherited) QURAN_SYNC\n```\n\nSwift package targets also read `QURAN_SYNC` from `Package.swift`, so launch Xcode with the environment variable set when you want the package feature modules to compile with sync enabled:\n\n```bash\nQURAN_SYNC=1 open Example/QuranEngineApp.xcodeproj\n```\n\nClean the build folder before the first run after toggling the flag.\n\n### From the command line\n\n```bash\nQURAN_SYNC=1 xcrun xcodebuild build \\\n  -project Example/QuranEngineApp.xcodeproj \\\n  -scheme QuranEngineApp \\\n  -sdk iphonesimulator \\\n  -destination 'generic/platform=iOS'\n```\n\n## Required runtime environment variables\n\nFor the sync path, provide:\n\n- `QURAN_OAUTH_CLIENT_ID`\n- `QURAN_OAUTH_ISSUER_URL`\n\nOptional:\n\n- `QURAN_OAUTH_CLIENT_SECRET`\n\n`QURAN_OAUTH_CLIENT_SECRET` is only needed when the configured OAuth client is registered as a confidential client. If the environment supports a public PKCE client, leave the secret unset.\n\nThe sync auth configuration currently defined in `Container` is:\n\n- redirect URI: `com.quran.oauth://callback`\n- post logout redirect URI: `com.quran.oauth://callback`\n- scopes: `openid,offline_access,content,user,bookmark,sync,collection,reading_session,preference,note`\n\nThe existing native fallback auth client still reads the app-level OAuth configuration when sync is not compiled in:\n\n- `QURAN_OAUTH_CLIENT_ID`\n- `QURAN_OAUTH_ISSUER_URL`\n- `QURAN_OAUTH_REDIRECT_URL`\n- `QURAN_OAUTH_SCOPES`\n- optional `QURAN_OAUTH_CLIENT_SECRET`\n\n## Expected behavior\n\nWhen `QURAN_SYNC` is enabled and the sync OAuth environment is configured:\n\n- Settings shows the Quran.com login/logout action.\n- Bookmarks shows the sync sign-in banner while the user is signed out.\n- Page bookmarks are stored through `mobile-sync-spm` instead of Core Data.\n\nWhen the flag is disabled, or the sync client id is missing:\n\n- the app falls back to the existing Core Data page bookmarks\n- the app falls back to the existing native auth client when its app-level OAuth configuration is present\n\n## Manual verification\n\n1. Sign in from Settings or Bookmarks.\n2. Add a page bookmark.\n3. Restart the app and confirm the bookmark still appears.\n4. Remove the bookmark and confirm it disappears locally.\n5. If another client is available on the same account, verify the bookmark syncs across devices.\n"
  },
  {
    "path": "Domain/AnnotationsService/Sources/AnalyticsLibrary+Events.swift",
    "content": "//\n//  AnalyticsLibrary+Events.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-12.\n//\n\nimport Analytics\nimport QuranKit\nimport VLogging\n\nextension AnalyticsLibrary {\n    private func logVersesEvent(_ name: String, verses: some Collection<AyahNumber>) {\n        let versesDescription = verses.map(\\.shortDescription).joined(separator: \", \")\n        logger.info(\"AnalyticsVerses=\\(name). Verses: [\\(versesDescription)]\")\n        logEvent(name, value: verses.count.description)\n    }\n\n    func highlight(verses: [AyahNumber]) {\n        logVersesEvent(\"HighlightVersesNum\", verses: verses)\n    }\n\n    func unhighlight(verses: some Collection<AyahNumber>) {\n        logVersesEvent(\"UnhighlightVersesNum\", verses: verses)\n    }\n\n    func updateNote(verses: Set<AyahNumber>) {\n        logVersesEvent(\"UpdateNoteVersesNum\", verses: verses)\n    }\n}\n\nprivate extension AyahNumber {\n    var shortDescription: String {\n        \"\\(sura):\\(ayah)\"\n    }\n}\n"
  },
  {
    "path": "Domain/AnnotationsService/Sources/LastPageService.swift",
    "content": "//\n//  LastPageService.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2023-03-05.\n//  Copyright © 2023 Quran.com. All rights reserved.\n//\n\nimport Combine\nimport LastPagePersistence\nimport QuranAnnotations\nimport QuranKit\n\npublic struct LastPageService {\n    // MARK: Lifecycle\n\n    public init(persistence: LastPagePersistence) {\n        self.persistence = persistence\n    }\n\n    // MARK: Public\n\n    public func lastPages(quran: Quran) -> AnyPublisher<[LastPage], Never> {\n        persistence.lastPages()\n            .map { lastPages in lastPages.map { LastPage(quran: quran, $0) } }\n            .eraseToAnyPublisher()\n    }\n\n    // MARK: Internal\n\n    let persistence: LastPagePersistence\n\n    func add(page: Page) async throws -> LastPage {\n        let persistenceModel = try await persistence.add(page: page.pageNumber)\n        return LastPage(quran: page.quran, persistenceModel)\n    }\n\n    func update(page: Page, toPage: Page) async throws -> LastPage {\n        let persistenceModel = try await persistence.update(\n            page: page.pageNumber,\n            toPage: toPage.pageNumber\n        )\n        return LastPage(quran: toPage.quran, persistenceModel)\n    }\n}\n\nprivate extension LastPage {\n    init(quran: Quran, _ other: LastPagePersistenceModel) {\n        self.init(\n            page: Page(quran: quran, pageNumber: Int(other.page))!,\n            createdOn: other.createdOn,\n            modifiedOn: other.modifiedOn\n        )\n    }\n}\n"
  },
  {
    "path": "Domain/AnnotationsService/Sources/LastPageUpdater.swift",
    "content": "//\n//  LastPageUpdater.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 11/10/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Crashing\nimport QuranKit\n\n@MainActor\npublic final class LastPageUpdater {\n    // MARK: Lifecycle\n\n    public init(service: LastPageService) {\n        self.service = service\n    }\n\n    // MARK: Public\n\n    public private(set) var lastPage: Page?\n\n    public func configure(initialPage: Page, lastPage: Page?) {\n        self.lastPage = lastPage\n\n        if let lastPage {\n            updateTo(page: initialPage, lastPage: lastPage)\n        } else {\n            create(page: initialPage)\n        }\n    }\n\n    public func updateTo(pages: [Page]) {\n        guard let page = pages.min() else {\n            return\n        }\n        // don't update if it's the same page\n        guard let lastPage, page != lastPage else { return }\n\n        updateTo(page: page, lastPage: lastPage)\n    }\n\n    // MARK: Private\n\n    private let service: LastPageService\n\n    private func updateTo(page: Page, lastPage: Page) {\n        self.lastPage = page\n        Task {\n            do {\n                _ = try await service.update(page: lastPage, toPage: page)\n            } catch {\n                crasher.recordError(error, reason: \"Failed to update last page\")\n            }\n        }\n    }\n\n    private func create(page: Page) {\n        lastPage = page\n        Task {\n            do {\n                _ = try await service.add(page: page)\n            } catch {\n                crasher.recordError(error, reason: \"Failed to create a last page\")\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Domain/AnnotationsService/Sources/NoteService.swift",
    "content": "//\n//  NoteService.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 12/21/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport Analytics\nimport Combine\nimport Foundation\nimport Localization\nimport NotePersistence\nimport Preferences\nimport QuranAnnotations\nimport QuranKit\nimport QuranText\nimport QuranTextKit\n\npublic struct NoteService {\n    // MARK: Lifecycle\n\n    public init(persistence: NotePersistence, textService: QuranTextDataService, analytics: AnalyticsLibrary) {\n        self.persistence = persistence\n        self.textService = textService\n        self.analytics = analytics\n    }\n\n    // MARK: Public\n\n    public func color(from notes: [Note]) -> Note.Color {\n        notes.max { $0.modifiedDate < $1.modifiedDate }?.color ?? lastUsedHighlightColor\n    }\n\n    public func updateHighlight(verses: [AyahNumber], color: Note.Color, quran: Quran) async throws -> Note {\n        // update last used highlight color\n        lastUsedHighlightColor = color\n\n        analytics.highlight(verses: verses)\n        let verses = verses.map(VersePersistenceModel.init)\n        let persistenceModel = try await persistence.setNote(nil, verses: verses, color: color.rawValue)\n        return Note(quran: quran, persistenceModel)\n    }\n\n    public func setNote(_ note: String, verses: Set<AyahNumber>, color: Note.Color) async throws {\n        // update last used highlight color\n        lastUsedHighlightColor = color\n\n        analytics.updateNote(verses: verses)\n        let verses = verses.map(VersePersistenceModel.init)\n        _ = try await persistence.setNote(note, verses: Array(verses), color: color.rawValue)\n    }\n\n    public func removeNotes(with verses: [AyahNumber]) async throws {\n        analytics.unhighlight(verses: verses)\n        let verses = verses.map(VersePersistenceModel.init)\n        _ = try await persistence.removeNotes(with: verses)\n    }\n\n    public func notes(quran: Quran) -> AnyPublisher<[Note], Never> {\n        persistence.notes()\n            .map { notes in notes.map { Note(quran: quran, $0) } }\n            .eraseToAnyPublisher()\n    }\n\n    public func textForVerses(_ verses: [AyahNumber]) async throws -> String {\n        let versesWithText = try await textDictionaryForVerses(verses)\n        let sortedVerses = verses.sorted()\n        let versesText = sortedVerses.compactMap { verse in versesWithText[verse].map { (verse, $0) } }\n        let combinedVersesText = versesText.map { $0.1 + \" \\(NumberFormatter.arabicNumberFormatter.format($0.0.ayah))\" }\n            .joined(separator: \" \")\n        return combinedVersesText\n    }\n\n    // MARK: Internal\n\n    let persistence: NotePersistence\n    let textService: QuranTextDataService\n    let analytics: AnalyticsLibrary\n\n    // MARK: Private\n\n    private static let defaultLastUsedNoteHighlightColor = Note.Color.red\n    private static let lastUsedNoteHighlightColorKey = PreferenceKey<Int>(\n        key: \"lastUsedNoteHighlightColor\",\n        defaultValue: defaultLastUsedNoteHighlightColor.rawValue\n    )\n\n    @TransformedPreference(lastUsedNoteHighlightColorKey, transformer: .rawRepresentable(defaultValue: defaultLastUsedNoteHighlightColor))\n    private var lastUsedHighlightColor: Note.Color\n\n    private func textDictionaryForVerses(_ verses: [AyahNumber]) async throws -> [AyahNumber: String] {\n        let verseTexts = try await textService.textForVerses(verses, translations: [])\n        return verseTexts.mapValues(\\.arabicText)\n    }\n}\n\nprivate extension Note {\n    init(quran: Quran, _ note: NotePersistenceModel) {\n        self.init(\n            verses: Set(note.verses.map { AyahNumber(quran: quran, $0) }),\n            modifiedDate: note.modifiedDate,\n            note: note.note,\n            color: Note.Color(rawValue: note.color) ?? .red\n        )\n    }\n}\n\nprivate extension AyahNumber {\n    init(quran: Quran, _ other: VersePersistenceModel) {\n        self.init(quran: quran, sura: other.sura, ayah: other.ayah)!\n    }\n}\n\nprivate extension VersePersistenceModel {\n    init(_ verse: AyahNumber) {\n        self.init(ayah: verse.ayah, sura: verse.sura.suraNumber)\n    }\n}\n"
  },
  {
    "path": "Domain/AnnotationsService/Sources/PageBookmarkService.swift",
    "content": "//\n//  PageBookmarkService.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2023-03-05.\n//  Copyright © 2023 Quran.com. All rights reserved.\n//\n\nimport Combine\nimport PageBookmarkPersistence\nimport QuranAnnotations\nimport QuranKit\n\npublic struct PageBookmarkService {\n    // MARK: Lifecycle\n\n    public init(persistence: PageBookmarkPersistence) {\n        self.persistence = persistence\n    }\n\n    // MARK: Public\n\n    public func pageBookmarks(quran: Quran) -> AnyPublisher<[PageBookmark], Never> {\n        persistence.pageBookmarks()\n            .map { bookmarks in bookmarks.map { PageBookmark(quran: quran, $0) } }\n            .eraseToAnyPublisher()\n    }\n\n    public func insertPageBookmark(_ page: Page) async throws {\n        try await persistence.insertPageBookmark(page.pageNumber)\n    }\n\n    public func removePageBookmark(_ page: Page) async throws {\n        try await persistence.removePageBookmark(page.pageNumber)\n    }\n\n    public func removeAllPageBookmarks() async throws {\n        try await persistence.removeAllPageBookmarks()\n    }\n\n    // MARK: Internal\n\n    let persistence: PageBookmarkPersistence\n}\n\nprivate extension PageBookmark {\n    init(quran: Quran, _ other: PageBookmarkPersistenceModel) {\n        self.init(\n            page: Page(quran: quran, pageNumber: Int(other.page))!,\n            creationDate: other.creationDate\n        )\n    }\n}\n"
  },
  {
    "path": "Domain/AnnotationsService/Sources/QuranHighlightsService.swift",
    "content": "//\n//  QuranHighlightsService.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-23.\n//\n\nimport Combine\nimport QuranAnnotations\nimport VLogging\n\npublic final class QuranHighlightsService {\n    // MARK: Lifecycle\n\n    public init() { }\n\n    // MARK: Public\n\n    @Published public var highlights = QuranHighlights() {\n        didSet {\n            logger.info(\"Highlights updated\")\n        }\n    }\n\n    public var scrolling: AnyPublisher<Void, Never> {\n        $highlights\n            .zip($highlights.dropFirst())\n            .filter { oldValue, newValue in\n                newValue.needsScrolling(comparingTo: oldValue)\n            }\n            .map { _ in }\n            .eraseToAnyPublisher()\n    }\n\n    public func reset() {\n        highlights = QuranHighlights()\n    }\n}\n"
  },
  {
    "path": "Domain/AnnotationsService/Tests/EmptyTests.swift",
    "content": "//\n//  EmptyTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-12.\n//\n\nimport XCTest\n\nfinal class EmptyTests: XCTestCase {\n    func test_empty() throws {\n    }\n}\n"
  },
  {
    "path": "Domain/AudioTimingService/ReciterTimingRetriever.swift",
    "content": "//\n//  ReciterTimingRetriever.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/20/16.\n//\n\nimport AudioTimingPersistence\nimport Foundation\nimport QuranAudio\nimport QuranKit\nimport Utilities\nimport VLogging\n\npublic struct ReciterTimingRetriever {\n    // MARK: Lifecycle\n\n    public init() {\n    }\n\n    // MARK: Public\n\n    public func timing(\n        for reciter: Reciter,\n        from start: AyahNumber,\n        to end: AyahNumber\n    ) async throws -> RangeTiming {\n        let suras = start.sura.array(to: end.sura)\n        let timings = try await retrieveTiming(for: reciter, suras: suras)\n\n        // determine end time\n        let endTime = getEndTime(timings: timings, from: start, to: end)\n\n        // filter out uneeded timings\n        let filteredTimings = filteredTimings(timings: timings, from: start, to: end)\n\n        return RangeTiming(timings: filteredTimings, endTime: endTime)\n    }\n\n    // MARK: Internal\n\n    let persistenceFactory: (URL) -> AyahTimingPersistence = GRDBAyahTimingPersistence.init\n\n    // MARK: Private\n\n    private func retrieveTiming(for reciter: Reciter, suras: [Sura]) async throws -> [Sura: SuraTiming] {\n        guard let filePath = reciter.localDatabasePath else {\n            fatalError(\"Gapped reciters are not supported.\")\n        }\n        let persistence = persistenceFactory(filePath.url)\n\n        var result: [Sura: SuraTiming] = [:]\n        for sura in suras {\n            let timings = try await persistence.getOrderedTimingForSura(startAyah: sura.firstVerse)\n            result[sura] = timings\n        }\n        return result\n    }\n\n    private func getEndTime(timings: [Sura: SuraTiming], from start: AyahNumber, to end: AyahNumber) -> Timing? {\n        let lastSuraTimings = timings[end.sura]!\n        // end is the last verse in the sura\n        if lastSuraTimings.verses.last?.ayah == end {\n            return lastSuraTimings.endTime\n        }\n        if let endIndex = lastSuraTimings.verses.firstIndex(where: { $0.ayah == end }) {\n            return lastSuraTimings.verses[endIndex + 1].time\n        }\n        logger.error(\"lastSuraTimings doesn't have the end verse\")\n        return nil\n    }\n\n    private func filteredTimings(\n        timings: [Sura: SuraTiming],\n        from start: AyahNumber,\n        to end: AyahNumber\n    ) -> [Sura: SuraTiming] {\n        // filter out uneeded timings\n        var mutableTimings: [Sura: SuraTiming] = [:]\n        let ayahSet = Set(start.array(to: end))\n        for (sura, suraTimings) in timings {\n            var endTime: Timing?\n            if let suraEndTime = suraTimings.endTime {\n                if ayahSet.contains(suraTimings.verses.last!.ayah) {\n                    endTime = suraEndTime\n                }\n            }\n            mutableTimings[sura] = SuraTiming(verses: suraTimings.verses.filter { ayahSet.contains($0.ayah) }, endTime: endTime)\n        }\n        return mutableTimings\n    }\n}\n"
  },
  {
    "path": "Domain/AudioUpdater/Sources/AudioUpdate.swift",
    "content": "//\n//  AudioUpdate.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 8/15/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nstruct AudioUpdates: Codable {\n    struct Update: Codable {\n        struct File: Codable {\n            let filename: String\n            let md5: String\n        }\n\n        // MARK: Internal\n\n        let path: String\n        let databaseVersion: Int?\n        let files: [File]\n    }\n\n    // MARK: Internal\n\n    let currentRevision: Int\n    let updates: [Update]\n}\n"
  },
  {
    "path": "Domain/AudioUpdater/Sources/AudioUpdatePreferences.swift",
    "content": "//\n//  AudioUpdatePreferences.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-14.\n//\n\nimport Foundation\nimport Preferences\n\nfinal class AudioUpdatePreferences {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Internal\n\n    static let shared = AudioUpdatePreferences()\n\n    @Preference(lastRevision) var lastRevision: Int\n    @Preference(lastChecked) var lastChecked: Date?\n\n    func reset() {\n        Preferences.shared.removeValueForKey(Self.lastRevision)\n        Preferences.shared.removeValueForKey(Self.lastChecked)\n    }\n\n    // MARK: Private\n\n    private static let lastRevision = PreferenceKey<Int>(key: \"audio-update.last-revision\", defaultValue: 0)\n    private static let lastChecked = PreferenceKey<Date?>(key: \"audio-update.last-checked\", defaultValue: nil)\n}\n"
  },
  {
    "path": "Domain/AudioUpdater/Sources/AudioUpdater.swift",
    "content": "//\n//  AudioUpdater.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 8/15/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport AudioTimingPersistence\nimport Crashing\nimport Foundation\nimport NetworkSupport\nimport QuranAudio\nimport ReciterService\nimport SystemDependencies\nimport Utilities\nimport VLogging\n\npublic final class AudioUpdater {\n    // MARK: Lifecycle\n\n    init(\n        networkManager: NetworkManager,\n        recitersRetriever: ReciterDataRetriever,\n        fileSystem: FileSystem,\n        time: SystemTime\n    ) {\n        networkService = AudioUpdatesNetworkManager(networkManager: networkManager)\n        self.recitersRetriever = recitersRetriever\n        self.fileSystem = fileSystem\n        self.time = time\n    }\n\n    public init(baseURL: URL) {\n        let networkManager = NetworkManager(baseURL: baseURL)\n        networkService = AudioUpdatesNetworkManager(networkManager: networkManager)\n        recitersRetriever = ReciterDataRetriever()\n        fileSystem = DefaultFileSystem()\n        time = DefaultSystemTime()\n    }\n\n    // MARK: Public\n\n    public func updateAudioIfNeeded() async {\n        let downloadedReciters = try? fileSystem.contentsOfDirectory(at: Reciter.audioFiles, includingPropertiesForKeys: nil)\n        if downloadedReciters?.isEmpty ?? true {\n            return\n        }\n\n        // update if 7 days passed since last checked\n        let lastChecked = preferences.lastChecked\n        if let lastChecked {\n            let today = time.now\n            let difference = Calendar.current.dateComponents([.day], from: lastChecked, to: today)\n            if let day = difference.day, day < 7 {\n                return\n            }\n        }\n\n        let lastRevision = preferences.lastRevision\n\n        logger.notice(\"Running AudioUpdater for revision \\(lastRevision)\")\n        do {\n            let updates = try await networkService.getAudioUpdates(revision: lastRevision)\n            updateLastChecked()\n            await update(updates)\n        } catch {\n            crasher.recordError(error, reason: \"Audio Update request failed.\")\n        }\n    }\n\n    // MARK: Private\n\n    private let recitersRetriever: ReciterDataRetriever\n    private let networkService: AudioUpdatesNetworkManager\n    private let preferences = AudioUpdatePreferences.shared\n    private let md5Calculator = MD5Calculator()\n    private let fileSystem: FileSystem\n    private let time: SystemTime\n\n    private func updateLastChecked() {\n        preferences.lastChecked = time.now\n    }\n\n    private func update(_ updates: AudioUpdates?) async {\n        guard let updates else {\n            logger.notice(\"No new audio updates\")\n            return\n        }\n        let reciters = await recitersRetriever.getReciters()\n        await update(reciters: reciters, updates: updates)\n    }\n\n    private func update(reciters: [Reciter], updates: AudioUpdates) async {\n        let reciters = Dictionary(uniqueKeysWithValues: reciters.map { ($0.audioURL.absoluteString.removingLastSlash, $0) })\n\n        for update in updates.updates {\n            guard let reciter = reciters[update.path.removingLastSlash] else {\n                logger.warning(\"Couldn't find reciter with path: \\(update.path)\")\n                continue\n            }\n\n            // not downloaded before\n            if !fileSystem.fileExists(at: reciter.localFolder()) {\n                continue\n            }\n\n            await deleteDatabaseIfNeeded(for: reciter, update: update)\n\n            for file in update.files {\n                deleteFileIfNeeded(for: reciter, file: file)\n            }\n        }\n\n        preferences.lastRevision = updates.currentRevision\n    }\n\n    private func deleteFileIfNeeded(for reciter: Reciter, file: AudioUpdates.Update.File) {\n        let directory = reciter.localFolder()\n        let localFile = directory.appendingPathComponent(file.filename, isDirectory: false)\n        if !fileSystem.fileExists(at: localFile) {\n            return\n        }\n        let localMD5 = try? md5Calculator.stringMD5(for: localFile.url)\n        if localMD5 == file.md5 {\n            return\n        }\n        delete(localFile)\n    }\n\n    private func deleteDatabaseIfNeeded(for reciter: Reciter, update: AudioUpdates.Update) async {\n        guard let dbFile = reciter.localDatabasePath, let zipFile = reciter.localZipPath else {\n            return\n        }\n\n        if !fileSystem.fileExists(at: dbFile) {\n            // in case we failed to unzip the file, it could contain an old version\n            delete(zipFile)\n            return\n        }\n\n        if await getDatabaseVersion(fileURL: dbFile.url) == update.databaseVersion {\n            return\n        }\n\n        // delete the reciter timings database\n        delete(dbFile)\n        delete(zipFile)\n    }\n\n    private func getDatabaseVersion(fileURL: URL) async -> Int? {\n        do {\n            let persistence = GRDBAyahTimingPersistence(fileURL: fileURL)\n            return try await persistence.getVersion()\n        } catch {\n            logger.error(\"Error accessing the timing database. Error: \\(error)\")\n            return nil\n        }\n    }\n\n    private func delete(_ file: RelativeFilePath) {\n        logger.notice(\"About to delete old audio file: \\(file.path)\")\n        try? fileSystem.removeItem(at: file)\n    }\n}\n\nprivate extension String {\n    var removingLastSlash: String {\n        if hasSuffix(\"/\") {\n            return String(dropLast())\n        }\n        return self\n    }\n}\n"
  },
  {
    "path": "Domain/AudioUpdater/Sources/AudioUpdatesNetworkManager.swift",
    "content": "//\n//  AudioUpdatesNetworkManager.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-11-28.\n//\n\nimport Foundation\nimport NetworkSupport\n\nstruct AudioUpdatesNetworkManager {\n    // MARK: Internal\n\n    static let path = \"/data/audio_updates.php\"\n    static let revision = \"revision\"\n\n    let networkManager: NetworkManager\n\n    func getAudioUpdates(revision: Int) async throws -> AudioUpdates? {\n        let data = try await networkManager.request(Self.path, parameters: [(Self.revision, \"\\(revision)\")])\n        return try parse(data: data)\n    }\n\n    // MARK: Private\n\n    private func parse(data: Data) throws -> AudioUpdates? {\n        if data.isEmpty { // no updates\n            return nil\n        }\n        let decoder = JSONDecoder()\n        decoder.keyDecodingStrategy = .convertFromSnakeCase\n        return try decoder.decode(AudioUpdates.self, from: data)\n    }\n}\n"
  },
  {
    "path": "Domain/AudioUpdater/Sources/MD5Calculator.swift",
    "content": "//\n//  MD5Calculator.swift\n//\n//\n//  Created by Afifi, Mohamed on 8/16/20.\n//\n\nimport CommonCrypto\nimport Foundation\n\nstruct MD5Calculator {\n    func dataMD5(for url: URL) throws -> Data {\n        let bufferSize = 1024 * 1024\n\n        // Open file for reading:\n        let file = try FileHandle(forReadingFrom: url)\n        defer { file.closeFile() }\n\n        // Create and initialize MD5 context:\n        var context = CC_MD5_CTX()\n        CC_MD5_Init(&context)\n\n        // Read up to `bufferSize` bytes, until EOF is reached, and update MD5 context:\n        while autoreleasepool(invoking: {\n            let data = file.readData(ofLength: bufferSize)\n            if !data.isEmpty {\n                data.withUnsafeBytes {\n                    _ = CC_MD5_Update(&context, $0.baseAddress, numericCast(data.count))\n                }\n                return true // Continue\n            } else {\n                return false // End of file\n            }\n        }) { }\n\n        // Compute the MD5 digest:\n        var digest: [UInt8] = Array(repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH))\n        _ = CC_MD5_Final(&digest, &context)\n\n        return Data(digest)\n    }\n\n    func stringMD5(for url: URL) throws -> String {\n        let data = try dataMD5(for: url)\n        let hex = data.map { String(format: \"%02hhx\", $0) }.joined()\n        return hex\n    }\n}\n"
  },
  {
    "path": "Domain/AudioUpdater/Tests/AudioUpdaterTests.swift",
    "content": "//\n//  AudioUpdaterTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-07.\n//\n\nimport Foundation\nimport NetworkSupportFake\nimport ReciterServiceFake\nimport SystemDependenciesFake\nimport XCTest\n@testable import AudioUpdater\n@testable import NetworkSupport\n@testable import QuranAudio\n@testable import ReciterService\n\nclass AudioUpdaterTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUp() async throws {\n        preferences.reset()\n\n        session = NetworkSessionFake(queue: .main, delegate: nil)\n        fileSystem = FileSystemFake()\n        time = SystemTimeFake()\n        bundle = SystemBundleFake()\n\n        let networkManager = NetworkManager(session: session, baseURL: baseURL)\n        updater = AudioUpdater(\n            networkManager: networkManager,\n            recitersRetriever: ReciterDataRetriever(bundle: bundle),\n            fileSystem: fileSystem,\n            time: time\n        )\n\n        // Prepare data\n        setUpReciters()\n        setUpFileSystem()\n        time.now = now\n    }\n\n    override func tearDown() async throws {\n        Reciter.cleanUpAudio()\n    }\n\n    func test_updateAudioIfNeeded_noDownloads() async {\n        fileSystem.filesInDirectory = [:]\n\n        await updater.updateAudioIfNeeded()\n        XCTAssertEqual(fileSystem.removedItems, [])\n        XCTAssertNil(preferences.lastChecked)\n        XCTAssertEqual(preferences.lastRevision, 0)\n    }\n\n    func test_updateAudioIfNeeded_noUpdates() async throws {\n        let now = Date(timeIntervalSince1970: 0)\n        time.now = now\n\n        let updates = AudioUpdates(currentRevision: 45, updates: [])\n        try nextUpdates(updates)\n\n        await updater.updateAudioIfNeeded()\n\n        XCTAssertEqual(Set(fileSystem.removedItems), [])\n        XCTAssertEqual(preferences.lastRevision, 45)\n    }\n\n    func test_updateAudioIfNeeded_gapped_removeFiles() async throws {\n        let update = makeUpdate(reciter: gappedReciter, files: [file1, file2])\n        let updates = AudioUpdates(currentRevision: 1945, updates: [update])\n        try nextUpdates(updates)\n\n        await updater.updateAudioIfNeeded()\n\n        XCTAssertEqual(Set(fileSystem.removedItems), [\n            gappedReciter.localFolder().appendingPathComponent(file1, isDirectory: false).url,\n            gappedReciter.localFolder().appendingPathComponent(file2, isDirectory: false).url,\n        ])\n        XCTAssertEqual(preferences.lastRevision, updates.currentRevision)\n        XCTAssertEqual(preferences.lastChecked, time.now)\n\n        let nextUpdate = AudioUpdates(currentRevision: updates.currentRevision + 1, updates: [update])\n\n        // Try again same day\n        time.now = Date(timeInterval: 60 * 60, since: now)\n        try nextUpdates(nextUpdate)\n\n        await updater.updateAudioIfNeeded()\n        XCTAssertEqual(preferences.lastRevision, updates.currentRevision)\n\n        // Try again after 7 days\n        time.now = Date(timeInterval: 60 * 60 * 24 * 7 + 1, since: now)\n        try nextUpdates(nextUpdate)\n\n        await updater.updateAudioIfNeeded()\n        XCTAssertEqual(preferences.lastRevision, nextUpdate.currentRevision)\n        XCTAssertEqual(preferences.lastChecked, time.now)\n    }\n\n    func test_updateAudioIfNeeded_gapless_removeFileAndZip() async throws {\n        let update = makeUpdate(reciter: gaplessReciter, files: [file1])\n        let updates = AudioUpdates(currentRevision: 45, updates: [update])\n        try nextUpdates(updates)\n\n        await updater.updateAudioIfNeeded()\n\n        XCTAssertEqual(Set(fileSystem.removedItems), [\n            gaplessReciter.gaplessDatabaseZipPath.url,\n            gaplessReciter.localFolder().appendingPathComponent(file1, isDirectory: false).url,\n        ])\n        XCTAssertEqual(preferences.lastRevision, updates.currentRevision)\n        XCTAssertEqual(preferences.lastChecked, time.now)\n\n        let nextUpdate = AudioUpdates(currentRevision: updates.currentRevision + 1, updates: [update])\n\n        // Try again same day\n        time.now = Date(timeInterval: 60 * 60, since: now)\n        try nextUpdates(nextUpdate)\n\n        await updater.updateAudioIfNeeded()\n        XCTAssertEqual(preferences.lastRevision, updates.currentRevision)\n\n        // Try again after 7 days\n        time.now = Date(timeInterval: 60 * 60 * 24 * 7 + 1, since: now)\n        try nextUpdates(nextUpdate)\n\n        await updater.updateAudioIfNeeded()\n        XCTAssertEqual(preferences.lastRevision, nextUpdate.currentRevision)\n        XCTAssertEqual(preferences.lastChecked, time.now)\n    }\n\n    func test_updateAudioIfNeeded_gapless_removeDatabase() async throws {\n        try gaplessReciter.prepareGaplessReciterForTests(unZip: true)\n\n        fileSystem.files.insert(gaplessReciter.gaplessDatabasePath.url)\n\n        let update = makeUpdate(reciter: gaplessReciter, databaseVersion: 100, files: [])\n        let updates = AudioUpdates(currentRevision: 19, updates: [update])\n        try nextUpdates(updates)\n\n        await updater.updateAudioIfNeeded()\n\n        XCTAssertEqual(Set(fileSystem.removedItems), [\n            gaplessReciter.gaplessDatabaseZipPath.url,\n            gaplessReciter.gaplessDatabasePath.url,\n        ])\n        XCTAssertEqual(preferences.lastRevision, updates.currentRevision)\n        XCTAssertEqual(preferences.lastChecked, time.now)\n    }\n\n    func test_updateAudioIfNeeded_gapless_upToDateDatabase() async throws {\n        try gaplessReciter.prepareGaplessReciterForTests(unZip: true)\n        fileSystem.files.insert(gaplessReciter.gaplessDatabasePath.url)\n\n        let update = makeUpdate(reciter: gaplessReciter, databaseVersion: 6, files: [])\n        let updates = AudioUpdates(currentRevision: 19, updates: [update])\n        try nextUpdates(updates)\n\n        await updater.updateAudioIfNeeded()\n\n        XCTAssertEqual(Set(fileSystem.removedItems), [])\n        XCTAssertEqual(preferences.lastRevision, updates.currentRevision)\n        XCTAssertEqual(preferences.lastChecked, time.now)\n    }\n\n    // MARK: Private\n\n    private var updater: AudioUpdater!\n    private var session: NetworkSessionFake!\n    private var fileSystem: FileSystemFake!\n    private var time: SystemTimeFake!\n    private var bundle: SystemBundleFake!\n    private var preferences = AudioUpdatePreferences.shared\n\n    private let now = Date(timeIntervalSince1970: 0)\n\n    private let reciters: [Reciter] = [.gaplessReciter, .gappedReciter]\n    private let gappedReciter: Reciter = .gappedReciter\n    private let gaplessReciter: Reciter = .gaplessReciter\n\n    private let baseURL = URL(validURL: \"http://example.com\")\n    private let file1 = \"1.mp3\"\n    private let file2 = \"2.mp3\"\n\n    private func setUpReciters() {\n        let recitersPlist = \"reciters.plist\"\n        bundle.arrays = [recitersPlist: reciters.map { $0.toPlistDictionary() } as NSArray]\n    }\n\n    private func setUpFileSystem() {\n        fileSystem.filesInDirectory[Reciter.audioFiles.url] = reciters.map { URL(fileURLWithPath: $0.directory) }\n        fileSystem.files = Set(reciters.flatMap { reciter in\n            [\n                reciter.localFolder().url,\n                reciter.localFolder().appendingPathComponent(file1, isDirectory: false).url,\n                reciter.localFolder().appendingPathComponent(file1, isDirectory: false).url,\n                reciter.localFolder().appendingPathComponent(file2, isDirectory: false).url,\n            ]\n        })\n    }\n\n    private func makeUpdate(reciter: Reciter, databaseVersion: Int? = nil, files: [String]) -> AudioUpdates.Update {\n        AudioUpdates.Update(\n            path: reciter.audioURL.absoluteString,\n            databaseVersion: databaseVersion,\n            files: files.map { AudioUpdates.Update.File(filename: $0, md5: \"\") }\n        )\n    }\n\n    private func nextUpdates(_ updates: AudioUpdates) throws {\n        let encoder = JSONEncoder()\n        encoder.keyEncodingStrategy = .convertToSnakeCase\n        let parameters = [(AudioUpdatesNetworkManager.revision, preferences.lastRevision.description)]\n        let request = NetworkManager.request(\n            baseURL: baseURL,\n            path: AudioUpdatesNetworkManager.path,\n            parameters: parameters\n        )\n        session.dataResults[request.url!] = .success(try encoder.encode(updates))\n    }\n}\n"
  },
  {
    "path": "Domain/ImageService/Sources/ImageDataService.swift",
    "content": "//\n//  ImageDataService.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-15.\n//\n\nimport QuranGeometry\nimport QuranKit\nimport UIKit\nimport VLogging\nimport WordFramePersistence\nimport WordFrameService\n\npublic struct ImageDataService {\n    // MARK: Lifecycle\n\n    public init(ayahInfoDatabase: URL, imagesURL: URL) {\n        self.imagesURL = imagesURL\n        persistence = GRDBWordFramePersistence(fileURL: ayahInfoDatabase)\n    }\n\n    // MARK: Public\n\n    public func suraHeaders(_ page: Page) async throws -> [SuraHeaderLocation] {\n        try await persistence.suraHeaders(page)\n    }\n\n    public func ayahNumbers(_ page: Page) async throws -> [AyahNumberLocation] {\n        try await persistence.ayahNumbers(page)\n    }\n\n    public func imageForPage(_ page: Page) async throws -> ImagePage {\n        let imageURL = imageURLForPage(page)\n        guard let image = UIImage(contentsOfFile: imageURL.path) else {\n            logFiles(directory: imagesURL) // <reading>/images/width/\n            logFiles(directory: imagesURL.deletingLastPathComponent()) // <reading>/images/\n            logFiles(directory: imagesURL.deletingLastPathComponent().deletingLastPathComponent()) // <reading>/\n            fatalError(\"No image found for page '\\(page)'\")\n        }\n\n        // preload the image\n        let unloadedImage: UIImage = image\n        let preloadedImage = preloadImage(unloadedImage)\n\n        let wordFrames = try await wordFrames(page)\n        return ImagePage(image: preloadedImage, wordFrames: wordFrames, startAyah: page.firstVerse)\n    }\n\n    // MARK: Internal\n\n    func wordFrames(_ page: Page) async throws -> WordFrameCollection {\n        let plainWordFrames = try await persistence.wordFrameCollectionForPage(page)\n        let wordFrames = processor.processWordFrames(plainWordFrames)\n        return wordFrames\n    }\n\n    // MARK: Private\n\n    private let processor = WordFrameProcessor()\n    private let persistence: WordFramePersistence\n    private let imagesURL: URL\n\n    private func logFiles(directory: URL) {\n        let fileManager = FileManager.default\n        let files = (try? fileManager.contentsOfDirectory(at: directory, includingPropertiesForKeys: nil)) ?? []\n        let fileNames = files.map(\\.lastPathComponent)\n        logger.error(\"Images: Directory \\(directory) contains files \\(fileNames)\")\n    }\n\n    private func imageURLForPage(_ page: Page) -> URL {\n        imagesURL.appendingPathComponent(\"page\\(page.pageNumber.as3DigitString()).png\")\n    }\n\n    private func preloadImage(_ imageToPreload: UIImage, cropInsets: UIEdgeInsets = .zero) -> UIImage {\n        let targetImage: CGImage?\n        if let cgImage = imageToPreload.cgImage {\n            targetImage = cgImage\n        } else if let ciImage = imageToPreload.ciImage {\n            let context = CIContext(options: nil)\n            targetImage = context.createCGImage(ciImage, from: ciImage.extent)\n        } else {\n            targetImage = nil\n        }\n        guard var cgimg = targetImage else {\n            return imageToPreload\n        }\n\n        let rect = CGRect(x: 0, y: 0, width: cgimg.width, height: cgimg.height)\n        let croppedRect = rect.inset(by: cropInsets)\n        let cropped = cgimg.cropping(to: croppedRect)\n        cgimg = cropped ?? cgimg\n\n        // make a bitmap context of a suitable size to draw to, forcing decode\n        let width = cgimg.width\n        let height = cgimg.height\n\n        let colourSpace = CGColorSpaceCreateDeviceRGB()\n        let imageContext = CGContext(\n            data: nil,\n            width: width,\n            height: height,\n            bitsPerComponent: 8,\n            bytesPerRow: width * 4,\n            space: colourSpace,\n            bitmapInfo: CGImageAlphaInfo.premultipliedFirst.rawValue | CGBitmapInfo.byteOrder32Little.rawValue\n        )\n\n        // draw the image to the context, release it\n        imageContext?.draw(cgimg, in: CGRect(x: 0, y: 0, width: width, height: height))\n\n        // now get an image ref from the context\n        if let outputImage = imageContext?.makeImage() {\n            let cachedImage = UIImage(cgImage: outputImage)\n            return cachedImage\n        }\n        return imageToPreload\n    }\n}\n"
  },
  {
    "path": "Domain/ImageService/Sources/LinePageAssetService.swift",
    "content": "//\n//  LinePageAssetService.swift\n//\n//\n//  Created by Mohamed Afifi on 2026-03-28.\n//\n\nimport Foundation\nimport LinePagePersistence\nimport QuranKit\nimport SystemDependencies\nimport UIKit\n\npublic enum LinePageAssetsResult {\n    case available(LinePageAssets)\n    case unavailable\n}\n\npublic struct LinePageAssets {\n    public struct LineImage {\n        public init(lineNumber: Int, imageURL: URL, image: UIImage) {\n            self.lineNumber = lineNumber\n            self.imageURL = imageURL\n            self.image = image\n        }\n\n        public let lineNumber: Int\n        public let imageURL: URL\n        public let image: UIImage\n    }\n\n    public enum SidelineDirection: String, Sendable {\n        case up\n        case down\n    }\n\n    public struct SidelineImage {\n        public init(targetLine: Int, direction: SidelineDirection, imageURL: URL, image: UIImage) {\n            self.targetLine = targetLine\n            self.direction = direction\n            self.imageURL = imageURL\n            self.image = image\n        }\n\n        public let targetLine: Int\n        public let direction: SidelineDirection\n        public let imageURL: URL\n        public let image: UIImage\n    }\n\n    public init(\n        page: Page,\n        ayahInfoDatabaseURL: URL,\n        lines: [LineImage],\n        sidelines: [SidelineImage]\n    ) {\n        self.page = page\n        self.ayahInfoDatabaseURL = ayahInfoDatabaseURL\n        self.lines = lines\n        self.sidelines = sidelines\n    }\n\n    public let page: Page\n    public let ayahInfoDatabaseURL: URL\n    public let lines: [LineImage]\n    public let sidelines: [SidelineImage]\n}\n\npublic struct LinePageAssetService {\n    // MARK: Lifecycle\n\n    public init(readingDirectory: URL?, widthParameter: Int, fileSystem: FileSystem = DefaultFileSystem()) {\n        self.init(\n            readingDirectory: readingDirectory,\n            widthParameter: widthParameter,\n            requiredPageNumbers: Quran.hafsMadani1440.pages.map(\\.pageNumber),\n            fileSystem: fileSystem\n        )\n    }\n\n    init(readingDirectory: URL?, widthParameter: Int, requiredPageNumbers: [Int], fileSystem: FileSystem) {\n        self.readingDirectory = readingDirectory\n        self.widthParameter = widthParameter\n        self.requiredPageNumbers = requiredPageNumbers\n        self.fileSystem = fileSystem\n    }\n\n    // MARK: Public\n\n    public func hasRequiredStructure() -> Bool {\n        guard let readingDirectory else {\n            return false\n        }\n        guard fileSystem.fileExists(at: readingDirectory) else {\n            return false\n        }\n        guard fileSystem.fileExists(at: ayahInfoDatabaseURL(in: readingDirectory)) else {\n            return false\n        }\n        guard let firstPageNumber = requiredPageNumbers.first else {\n            return true\n        }\n\n        return fileSystem.fileExists(\n            at: lineImageURL(pageNumber: firstPageNumber, lineNumber: 1, in: readingDirectory)\n        )\n    }\n\n    public func assetsForPage(_ page: Page) async -> LinePageAssetsResult {\n        await Task.detached(priority: .userInitiated) {\n            loadAssetsForPage(page)\n        }.value\n    }\n\n    // MARK: Private\n\n    private let readingDirectory: URL?\n    private let widthParameter: Int\n    private let requiredPageNumbers: [Int]\n    private let fileSystem: FileSystem\n\n    private let lineCount = 15\n\n    private func loadAssetsForPage(_ page: Page) -> LinePageAssetsResult {\n        guard let readingDirectory else {\n            return .unavailable\n        }\n        guard fileSystem.fileExists(at: readingDirectory) else {\n            return .unavailable\n        }\n\n        let ayahInfoDatabaseURL = ayahInfoDatabaseURL(in: readingDirectory)\n        guard fileSystem.fileExists(at: ayahInfoDatabaseURL) else {\n            return .unavailable\n        }\n\n        var lines: [LinePageAssets.LineImage] = []\n        for lineNumber in 1 ... lineCount {\n            let imageURL = lineImageURL(pageNumber: page.pageNumber, lineNumber: lineNumber, in: readingDirectory)\n            guard let image = UIImage(contentsOfFile: imageURL.path) else {\n                return .unavailable\n            }\n            lines.append(LinePageAssets.LineImage(lineNumber: lineNumber, imageURL: imageURL, image: image))\n        }\n\n        return .available(\n            LinePageAssets(\n                page: page,\n                ayahInfoDatabaseURL: ayahInfoDatabaseURL,\n                lines: lines,\n                sidelines: loadSidelines(pageNumber: page.pageNumber, in: readingDirectory)\n            )\n        )\n    }\n\n    private func ayahInfoDatabaseURL(in readingDirectory: URL) -> URL {\n        readingDirectory\n            .appendingPathComponent(\"images_\\(widthParameter)\")\n            .appendingPathComponent(\"databases\")\n            .appendingPathComponent(\"ayahinfo_\\(widthParameter).db\")\n    }\n\n    private func imagesURL(in readingDirectory: URL) -> URL {\n        readingDirectory\n            .appendingPathComponent(\"images_\\(widthParameter)\")\n            .appendingPathComponent(\"width_\\(widthParameter)\")\n    }\n\n    private func lineImageURL(pageNumber: Int, lineNumber: Int, in readingDirectory: URL) -> URL {\n        imagesURL(in: readingDirectory)\n            .appendingPathComponent(String(pageNumber))\n            .appendingPathComponent(\"\\(lineNumber).png\")\n    }\n\n    private func sidelinesDirectory(pageNumber: Int, in readingDirectory: URL) -> URL {\n        imagesURL(in: readingDirectory)\n            .appendingPathComponent(String(pageNumber))\n            .appendingPathComponent(\"sidelines\")\n    }\n\n    private func loadSidelines(pageNumber: Int, in readingDirectory: URL) -> [LinePageAssets.SidelineImage] {\n        let directory = sidelinesDirectory(pageNumber: pageNumber, in: readingDirectory)\n        guard fileSystem.fileExists(at: directory) else {\n            return []\n        }\n        guard let files = try? fileSystem.contentsOfDirectory(at: directory, includingPropertiesForKeys: nil) else {\n            return []\n        }\n\n        let defaultDirection: LinePageAssets.SidelineDirection = pageNumber.isMultiple(of: 2) ? .down : .up\n\n        return files\n            .filter { $0.pathExtension.lowercased() == \"png\" }\n            .compactMap { url in\n                guard let image = UIImage(contentsOfFile: url.path) else {\n                    return nil\n                }\n                let baseName = url.deletingPathExtension().lastPathComponent\n                let sanitized = baseName.replacingOccurrences(of: \"_up\", with: \"\")\n                    .replacingOccurrences(of: \"_down\", with: \"\")\n                guard let targetLine = Int(sanitized) else {\n                    return nil\n                }\n\n                let direction: LinePageAssets.SidelineDirection = if baseName.contains(\"_up\") {\n                    .up\n                } else if baseName.contains(\"_down\") {\n                    .down\n                } else {\n                    defaultDirection\n                }\n\n                return LinePageAssets.SidelineImage(\n                    targetLine: targetLine,\n                    direction: direction,\n                    imageURL: url,\n                    image: image\n                )\n            }\n            .sorted {\n                if $0.targetLine == $1.targetLine {\n                    return $0.imageURL.lastPathComponent < $1.imageURL.lastPathComponent\n                }\n                return $0.targetLine < $1.targetLine\n            }\n    }\n}\n"
  },
  {
    "path": "Domain/ImageService/Sources/LinePageGeometry.swift",
    "content": "//\n//  LinePageGeometry.swift\n//\n//\n//  Created by Mohamed Afifi on 2026-03-29.\n//\n\nimport CoreGraphics\nimport Foundation\nimport LinePagePersistence\nimport QuranKit\n\npublic enum LinePageOrientation: Sendable {\n    case portrait\n    case landscape\n}\n\npublic enum LinePageParity: Sendable {\n    case odd\n    case even\n}\n\npublic struct LinePageDisplaySettings: Sendable {\n    public init(showHeaderFooter: Bool = true, showSidelines: Bool = false) {\n        self.showHeaderFooter = showHeaderFooter\n        self.showSidelines = showSidelines\n    }\n\n    public let showHeaderFooter: Bool\n    public let showSidelines: Bool\n}\n\npublic struct LinePageHighlightState: Sendable {\n    public init(highlightedVerses: Set<AyahNumber> = []) {\n        self.highlightedVerses = highlightedVerses\n    }\n\n    public let highlightedVerses: Set<AyahNumber>\n}\n\npublic struct LinePageGeometryData: Sendable {\n    public struct Sideline: Hashable, Sendable {\n        public init(\n            id: String = \"\",\n            targetLine: Int,\n            direction: LinePageAssets.SidelineDirection,\n            intrinsicSize: CGSize\n        ) {\n            self.id = id\n            self.targetLine = targetLine\n            self.direction = direction\n            self.intrinsicSize = intrinsicSize\n        }\n\n        public let id: String\n        public let targetLine: Int\n        public let direction: LinePageAssets.SidelineDirection\n        public let intrinsicSize: CGSize\n    }\n\n    public init(\n        lineCount: Int = 15,\n        highlightSpans: [LinePageHighlightSpan],\n        ayahMarkers: [LinePageAyahMarker],\n        suraHeaders: [LinePageSuraHeader],\n        sidelines: [Sideline]\n    ) {\n        self.lineCount = lineCount\n        self.highlightSpans = highlightSpans\n        self.ayahMarkers = ayahMarkers\n        self.suraHeaders = suraHeaders\n        self.sidelines = sidelines\n    }\n\n    public let lineCount: Int\n    public let highlightSpans: [LinePageHighlightSpan]\n    public let ayahMarkers: [LinePageAyahMarker]\n    public let suraHeaders: [LinePageSuraHeader]\n    public let sidelines: [Sideline]\n}\n\npublic struct LinePageGeometryInput: Sendable {\n    public init(\n        availableSize: CGSize,\n        orientation: LinePageOrientation,\n        verticalPadding: CGFloat = 0,\n        pageParity: LinePageParity,\n        displaySettings: LinePageDisplaySettings,\n        data: LinePageGeometryData,\n        highlights: LinePageHighlightState = LinePageHighlightState(),\n        suraHeaderAspectRatio: CGFloat\n    ) {\n        self.availableSize = availableSize\n        self.orientation = orientation\n        self.verticalPadding = verticalPadding\n        self.pageParity = pageParity\n        self.displaySettings = displaySettings\n        self.data = data\n        self.highlights = highlights\n        self.suraHeaderAspectRatio = suraHeaderAspectRatio\n    }\n\n    public let availableSize: CGSize\n    public let orientation: LinePageOrientation\n    public let verticalPadding: CGFloat\n    public let pageParity: LinePageParity\n    public let displaySettings: LinePageDisplaySettings\n    public let data: LinePageGeometryData\n    public let highlights: LinePageHighlightState\n    public let suraHeaderAspectRatio: CGFloat\n}\n\npublic struct LinePageLineFrame: Hashable, Sendable {\n    public init(lineNumber: Int, imageFrame: CGRect, hitFrame: CGRect) {\n        self.lineNumber = lineNumber\n        self.imageFrame = imageFrame\n        self.hitFrame = hitFrame\n    }\n\n    public let lineNumber: Int\n    public let imageFrame: CGRect\n    public let hitFrame: CGRect\n}\n\npublic struct LinePageHighlightRect: Hashable, Sendable {\n    public init(ayah: AyahNumber, rect: CGRect) {\n        self.ayah = ayah\n        self.rect = rect\n    }\n\n    public let ayah: AyahNumber\n    public let rect: CGRect\n}\n\npublic struct LinePageAyahMarkerPlacement: Hashable, Sendable {\n    public init(marker: LinePageAyahMarker, frame: CGRect) {\n        self.marker = marker\n        self.frame = frame\n    }\n\n    public let marker: LinePageAyahMarker\n    public let frame: CGRect\n}\n\npublic struct LinePageSuraHeaderPlacement: Hashable, Sendable {\n    public init(header: LinePageSuraHeader, frame: CGRect) {\n        self.header = header\n        self.frame = frame\n    }\n\n    public let header: LinePageSuraHeader\n    public let frame: CGRect\n}\n\npublic struct LinePageSidelinePlacement: Hashable, Sendable {\n    public init(sideline: LinePageGeometryData.Sideline, frame: CGRect) {\n        self.sideline = sideline\n        self.frame = frame\n    }\n\n    public let sideline: LinePageGeometryData.Sideline\n    public let frame: CGRect\n}\n\npublic struct LinePageSelectionAnchors: Hashable, Sendable {\n    public init(start: CGRect, end: CGRect) {\n        self.start = start\n        self.end = end\n    }\n\n    public let start: CGRect\n    public let end: CGRect\n}\n\npublic struct LinePageLayout: Sendable {\n    // MARK: Lifecycle\n\n    fileprivate init(\n        contentSize: CGSize,\n        headerFrame: CGRect,\n        pageFrame: CGRect,\n        footerFrame: CGRect,\n        sidelineFrame: CGRect?,\n        lineFrames: [LinePageLineFrame],\n        highlightRects: [LinePageHighlightRect],\n        ayahMarkerPlacements: [LinePageAyahMarkerPlacement],\n        suraHeaderPlacements: [LinePageSuraHeaderPlacement],\n        sidelinePlacements: [LinePageSidelinePlacement],\n        versesByLine: [Int: [LinePageHighlightSpan]],\n        selectionLineRanges: [SelectionLineRange],\n        selectionAnchorsByAyah: [AyahNumber: LinePageSelectionAnchors]\n    ) {\n        self.contentSize = contentSize\n        self.headerFrame = headerFrame\n        self.pageFrame = pageFrame\n        self.footerFrame = footerFrame\n        self.sidelineFrame = sidelineFrame\n        self.lineFrames = lineFrames\n        self.highlightRects = highlightRects\n        self.ayahMarkerPlacements = ayahMarkerPlacements\n        self.suraHeaderPlacements = suraHeaderPlacements\n        self.sidelinePlacements = sidelinePlacements\n        self.versesByLine = versesByLine\n        self.selectionLineRanges = selectionLineRanges\n        self.selectionAnchorsByAyah = selectionAnchorsByAyah\n    }\n\n    // MARK: Public\n\n    public let contentSize: CGSize\n    public let headerFrame: CGRect\n    public let pageFrame: CGRect\n    public let footerFrame: CGRect\n    public let sidelineFrame: CGRect?\n    public let lineFrames: [LinePageLineFrame]\n    public let highlightRects: [LinePageHighlightRect]\n    public let ayahMarkerPlacements: [LinePageAyahMarkerPlacement]\n    public let suraHeaderPlacements: [LinePageSuraHeaderPlacement]\n    public let sidelinePlacements: [LinePageSidelinePlacement]\n\n    public func verse(at point: CGPoint) -> AyahNumber? {\n        guard pageFrame.contains(point) else {\n            return nil\n        }\n\n        let localPoint = CGPoint(x: point.x - pageFrame.minX, y: point.y - pageFrame.minY)\n        guard let lineRange = selectionLineRanges.first(where: { $0.fullLineRange.contains(localPoint.y) }) else {\n            return nil\n        }\n\n        let matches = versesByLine[lineRange.lineNumber, default: []]\n            .filter {\n                let left = $0.left * pageFrame.width\n                let right = $0.right * pageFrame.width\n                return (left ... right).contains(localPoint.x)\n            }\n            .map(\\.ayah)\n        return matches.max()\n    }\n\n    public func selectionAnchors(for ayah: AyahNumber) -> LinePageSelectionAnchors? {\n        selectionAnchorsByAyah[ayah]\n    }\n\n    // MARK: Private\n\n    private let versesByLine: [Int: [LinePageHighlightSpan]]\n    private let selectionLineRanges: [SelectionLineRange]\n    private let selectionAnchorsByAyah: [AyahNumber: LinePageSelectionAnchors]\n}\n\npublic struct LinePageGeometryEngine {\n    private struct Measurements {\n        let pageWidth: CGFloat\n        let pageHeight: CGFloat\n        let headerFooterWidth: CGFloat\n        let headerFooterHeight: CGFloat\n        let sidelineWidth: CGFloat\n    }\n\n    // MARK: Lifecycle\n\n    public init() { }\n\n    // MARK: Public\n\n    public func layout(_ input: LinePageGeometryInput) -> LinePageLayout {\n        let pageMeasurements = measurements(for: input)\n        let contentSize = contentSize(for: input, pageMeasurements: pageMeasurements)\n        let headerFooterWidth = input.displaySettings.showHeaderFooter ? pageMeasurements.headerFooterWidth : 0\n        let headerFooterHeight = input.displaySettings.showHeaderFooter ? pageMeasurements.headerFooterHeight : 0\n\n        let sidelineWidth = pageMeasurements.sidelineWidth\n        let nonSidelinesWidth = input.availableSize.width - sidelineWidth\n        let leadingSideline = input.displaySettings.showSidelines && input.pageParity == .odd\n        let sidelineStartDelta = leadingSideline ? sidelineWidth : 0\n\n        let headerX = sidelineStartDelta + ((nonSidelinesWidth - headerFooterWidth) / 2)\n        let pageX = sidelineStartDelta + ((nonSidelinesWidth - pageMeasurements.pageWidth) / 2)\n\n        let headerY: CGFloat\n        let pageY: CGFloat\n        let footerY: CGFloat\n\n        switch input.orientation {\n        case .portrait:\n            let headerTop = (input.availableSize.height\n                - headerFooterHeight\n                - pageMeasurements.pageHeight\n                - headerFooterHeight) / 2\n            headerY = headerTop\n            pageY = headerTop + headerFooterHeight\n            footerY = pageY + pageMeasurements.pageHeight\n        case .landscape:\n            headerY = input.verticalPadding\n            pageY = headerY + headerFooterHeight\n            footerY = pageY + pageMeasurements.pageHeight\n        }\n\n        let headerFrame = CGRect(\n            x: headerX,\n            y: headerY,\n            width: headerFooterWidth,\n            height: headerFooterHeight\n        )\n        let pageFrame = CGRect(\n            x: pageX,\n            y: pageY,\n            width: pageMeasurements.pageWidth,\n            height: pageMeasurements.pageHeight\n        )\n        let footerFrame = CGRect(\n            x: headerX,\n            y: footerY,\n            width: headerFooterWidth,\n            height: headerFooterHeight\n        )\n        let sidelineFrame: CGRect? = if input.displaySettings.showSidelines {\n            CGRect(\n                x: leadingSideline ? 0 : (input.availableSize.width - sidelineWidth),\n                y: pageY,\n                width: sidelineWidth,\n                height: pageMeasurements.pageHeight\n            )\n        } else {\n            nil\n        }\n\n        let lineFrames = lineFrames(in: pageFrame, lineCount: input.data.lineCount)\n        let versesByLine = Dictionary(grouping: input.data.highlightSpans, by: \\.line)\n\n        let highlightRects = highlightRects(\n            for: input.highlights.highlightedVerses,\n            spans: input.data.highlightSpans,\n            in: pageFrame,\n            lineCount: input.data.lineCount\n        )\n        let ayahMarkerPlacements = ayahMarkerPlacements(\n            markers: input.data.ayahMarkers,\n            in: pageFrame,\n            lineCount: input.data.lineCount\n        )\n        let suraHeaderPlacements = suraHeaderPlacements(\n            headers: input.data.suraHeaders,\n            in: pageFrame,\n            lineCount: input.data.lineCount,\n            aspectRatio: input.suraHeaderAspectRatio\n        )\n        let sidelinePlacements = sidelinePlacements(\n            for: input.data.sidelines,\n            in: sidelineFrame,\n            parity: input.pageParity\n        )\n        let selectionAnchorsByAyah = selectionAnchors(\n            for: input.data.highlightSpans,\n            in: pageFrame,\n            lineCount: input.data.lineCount\n        )\n        let selectionLineRanges = selectionLineRanges(\n            in: pageFrame,\n            lineCount: input.data.lineCount\n        )\n\n        return LinePageLayout(\n            contentSize: contentSize,\n            headerFrame: headerFrame,\n            pageFrame: pageFrame,\n            footerFrame: footerFrame,\n            sidelineFrame: sidelineFrame,\n            lineFrames: lineFrames,\n            highlightRects: highlightRects,\n            ayahMarkerPlacements: ayahMarkerPlacements,\n            suraHeaderPlacements: suraHeaderPlacements,\n            sidelinePlacements: sidelinePlacements,\n            versesByLine: versesByLine,\n            selectionLineRanges: selectionLineRanges,\n            selectionAnchorsByAyah: selectionAnchorsByAyah\n        )\n    }\n\n    // MARK: Private\n\n    private func measurements(for input: LinePageGeometryInput) -> Measurements {\n        let availableWidth = input.availableSize.width\n        let availableHeight = input.availableSize.height\n        let effectiveHeaderFooterHeightRatio = input.displaySettings.showHeaderFooter ? headerFooterHeightRatio : 0\n\n        let sidelineWidth = input.displaySettings.showSidelines\n            ? floor(availableWidth * sidelineWidthRatio)\n            : 0\n        let layoutWidth = availableWidth - sidelineWidth\n\n        switch input.orientation {\n        case .portrait:\n            let initialHeaderFooterHeight = floor(effectiveHeaderFooterHeightRatio * availableHeight)\n            let initialPageHeight = availableHeight - (2 * initialHeaderFooterHeight)\n            let computedWidth = floor(initialPageHeight * pageMinWidthToHeightRatio)\n            let pageWidth = min(layoutWidth, computedWidth)\n            let maxPageHeight = round(pageWidth / pageMaxWidthToHeightRatio)\n\n            let headerFooterHeight: CGFloat\n            let pageHeight: CGFloat\n            if initialPageHeight > maxPageHeight {\n                headerFooterHeight = round((maxPageHeight + 2 * initialHeaderFooterHeight) * effectiveHeaderFooterHeightRatio)\n                pageHeight = maxPageHeight\n            } else {\n                headerFooterHeight = initialHeaderFooterHeight\n                pageHeight = initialPageHeight\n            }\n\n            let headerMargin = floor(pageWidth * headerFooterMarginRatio)\n            return Measurements(\n                pageWidth: pageWidth,\n                pageHeight: pageHeight,\n                headerFooterWidth: pageWidth - (2 * headerMargin),\n                headerFooterHeight: headerFooterHeight,\n                sidelineWidth: sidelineWidth\n            )\n        case .landscape:\n            let pageWidth = min(scrollableMaximumPageWidth, round(layoutWidth * scrollablePageWidthRatio))\n            let pageHeight = ceil(pageWidth * scrollablePageHeightToWidthRatio)\n            let headerFooterHeight = floor(pageWidth * effectiveHeaderFooterHeightRatio)\n            let headerMargin = floor(pageWidth * headerFooterMarginRatio)\n\n            return Measurements(\n                pageWidth: pageWidth,\n                pageHeight: pageHeight,\n                headerFooterWidth: pageWidth - (2 * headerMargin),\n                headerFooterHeight: headerFooterHeight,\n                sidelineWidth: sidelineWidth\n            )\n        }\n    }\n\n    private func contentSize(for input: LinePageGeometryInput, pageMeasurements: Measurements) -> CGSize {\n        let headerFooterHeight = input.displaySettings.showHeaderFooter ? pageMeasurements.headerFooterHeight : 0\n\n        switch input.orientation {\n        case .portrait:\n            return input.availableSize\n        case .landscape:\n            let contentInset = floor(headerFooterHeight * 0.5)\n            return CGSize(\n                width: input.availableSize.width,\n                height: input.verticalPadding\n                    + headerFooterHeight\n                    + pageMeasurements.pageHeight\n                    + headerFooterHeight\n                    + input.verticalPadding\n                    + contentInset\n            )\n        }\n    }\n\n    private func lineFrames(in pageFrame: CGRect, lineCount: Int) -> [LinePageLineFrame] {\n        let ranges = selectionLineRanges(in: pageFrame, lineCount: lineCount)\n        let imageLineHeight = pageFrame.width * lineHeightRatio\n        let lastLineIndex = CGFloat(max(lineCount - 1, 1))\n\n        return (0 ..< lineCount).map { lineIndex in\n            let imageY = floor((pageFrame.height - imageLineHeight) / lastLineIndex * CGFloat(lineIndex))\n            return LinePageLineFrame(\n                lineNumber: lineIndex + 1,\n                imageFrame: CGRect(\n                    x: pageFrame.minX,\n                    y: pageFrame.minY + imageY,\n                    width: pageFrame.width,\n                    height: imageLineHeight\n                ),\n                hitFrame: ranges[lineIndex].hitFrame\n            )\n        }\n    }\n\n    private func selectionLineRanges(in pageFrame: CGRect, lineCount: Int) -> [SelectionLineRange] {\n        let width = Int(pageFrame.width)\n        let height = Int(pageFrame.height)\n        let lineHeight = Int(CGFloat(width) * lineHeightRatio)\n        let lastLineIndex = max(lineCount - 1, 1)\n        let lineHeightWithoutOverlap = (height - lineHeight) / lastLineIndex\n        let offset = (lineHeight - lineHeightWithoutOverlap) / 2\n\n        return (0 ..< lineCount).map { lineIndex in\n            let fullLineStart = Int(floor(Double(height - lineHeight) / Double(lastLineIndex) * Double(lineIndex)))\n            let hitY = fullLineStart + offset\n            return SelectionLineRange(\n                lineNumber: lineIndex,\n                fullLineRange: CGFloat(fullLineStart) ... CGFloat(fullLineStart + lineHeight),\n                hitFrame: CGRect(\n                    x: pageFrame.minX,\n                    y: pageFrame.minY + CGFloat(hitY),\n                    width: pageFrame.width,\n                    height: CGFloat(lineHeightWithoutOverlap)\n                )\n            )\n        }\n    }\n\n    private func highlightRects(\n        for highlightedVerses: Set<AyahNumber>,\n        spans: [LinePageHighlightSpan],\n        in pageFrame: CGRect,\n        lineCount: Int\n    ) -> [LinePageHighlightRect] {\n        guard !highlightedVerses.isEmpty else {\n            return []\n        }\n\n        let drawLineHeight = pageFrame.width * lineHeightRatio\n        let lastLineIndex = CGFloat(max(lineCount - 1, 1))\n        let lineHeightWithoutOverlap = (pageFrame.height - drawLineHeight) / lastLineIndex\n        let yStart = (drawLineHeight - lineHeightWithoutOverlap) / 2\n\n        return spans.compactMap { span in\n            guard highlightedVerses.contains(span.ayah) else {\n                return nil\n            }\n\n            let lineIndex = CGFloat(span.line)\n            let x = pageFrame.minX + (span.left * pageFrame.width)\n            let width = ceil((span.right - span.left) * pageFrame.width)\n            let y = pageFrame.minY + yStart + (lineHeightWithoutOverlap * lineIndex)\n            return LinePageHighlightRect(\n                ayah: span.ayah,\n                rect: CGRect(x: x, y: y, width: width, height: lineHeightWithoutOverlap)\n            )\n        }\n    }\n\n    private func ayahMarkerPlacements(\n        markers: [LinePageAyahMarker],\n        in pageFrame: CGRect,\n        lineCount: Int\n    ) -> [LinePageAyahMarkerPlacement] {\n        let lastLineIndex = CGFloat(max(lineCount - 1, 1))\n        let lineHeight = pageFrame.width * lineHeightRatio\n        let markerDimension = 0.05 * pageFrame.width\n\n        return markers.map { marker in\n            let lineIndex = CGFloat(marker.line)\n            let x = pageFrame.minX + ((marker.centerX * pageFrame.width) - (markerDimension / 2))\n            let yStart = ((pageFrame.height - lineHeight) / lastLineIndex) * lineIndex\n            let y = pageFrame.minY + yStart + (marker.centerY * lineHeight) - (markerDimension / 2)\n\n            return LinePageAyahMarkerPlacement(\n                marker: marker,\n                frame: CGRect(x: x, y: y, width: markerDimension, height: markerDimension)\n            )\n        }\n    }\n\n    private func suraHeaderPlacements(\n        headers: [LinePageSuraHeader],\n        in pageFrame: CGRect,\n        lineCount: Int,\n        aspectRatio: CGFloat\n    ) -> [LinePageSuraHeaderPlacement] {\n        let lastLineIndex = CGFloat(max(lineCount - 1, 1))\n        let lineHeight = pageFrame.width * lineHeightRatio\n        let width = pageFrame.width * suraHeaderWidthRatio\n        let height = width * aspectRatio\n\n        return headers.map { header in\n            let lineIndex = CGFloat(header.line)\n            let x = pageFrame.minX + ((header.centerX * pageFrame.width) - (width / 2))\n            let yStart = ((pageFrame.height - lineHeight) / lastLineIndex) * lineIndex\n            let y = pageFrame.minY + yStart + (header.centerY * lineHeight) - (height / 2)\n\n            return LinePageSuraHeaderPlacement(\n                header: header,\n                frame: CGRect(x: x, y: y, width: width, height: height)\n            )\n        }\n    }\n\n    private func sidelinePlacements(\n        for sidelines: [LinePageGeometryData.Sideline],\n        in sidelineFrame: CGRect?,\n        parity: LinePageParity\n    ) -> [LinePageSidelinePlacement] {\n        guard let sidelineFrame else {\n            return []\n        }\n\n        let sortedSidelines = sidelines.sorted { lhs, rhs in\n            if lhs.targetLine == rhs.targetLine {\n                return lhs.intrinsicSize.height < rhs.intrinsicSize.height\n            }\n            return lhs.targetLine < rhs.targetLine\n        }\n        let lineHeight = sidelineFrame.height / 15\n\n        let locations = sortedSidelines.map { sideline -> ClosedRange<CGFloat> in\n            let targetLineTop = lineHeight * CGFloat(sideline.targetLine - 1)\n            let y = if sideline.direction == .up {\n                max(CGFloat.zero, targetLineTop + lineHeight - sideline.intrinsicSize.height)\n            } else {\n                targetLineTop\n            }\n            return y ... (y + sideline.intrinsicSize.height)\n        }\n\n        return sortedSidelines.enumerated().map { item in\n            let index = item.offset\n            let sideline = item.element\n            let location = locations[index]\n            let size = sidelineSize(\n                for: sideline,\n                at: index,\n                sortedSidelines: sortedSidelines,\n                locations: locations,\n                containerWidth: sidelineFrame.width,\n                lineHeight: lineHeight\n            )\n\n            let y: CGFloat\n            if locations.count > index + 1, locations[index + 1].lowerBound < (location.lowerBound + size.height) {\n                let updatedY = location.lowerBound + size.height\n                y = location.lowerBound - (updatedY - locations[index + 1].lowerBound)\n            } else if location.lowerBound + size.height > sidelineFrame.height {\n                y = location.lowerBound - ((location.lowerBound + size.height) - sidelineFrame.height)\n            } else {\n                y = location.lowerBound\n            }\n\n            let x = if parity == .odd {\n                sidelineFrame.width - size.width\n            } else {\n                CGFloat.zero\n            }\n\n            return LinePageSidelinePlacement(\n                sideline: sideline,\n                frame: CGRect(\n                    x: sidelineFrame.minX + x,\n                    y: sidelineFrame.minY + y,\n                    width: size.width,\n                    height: size.height\n                )\n            )\n        }\n    }\n\n    private func sidelineSize(\n        for sideline: LinePageGeometryData.Sideline,\n        at index: Int,\n        sortedSidelines: [LinePageGeometryData.Sideline],\n        locations: [ClosedRange<CGFloat>],\n        containerWidth: CGFloat,\n        lineHeight: CGFloat\n    ) -> CGSize {\n        let intrinsic = sideline.intrinsicSize\n        let overlapsNext = locations.count > index + 1 && locations[index + 1].lowerBound < locations[index].upperBound\n\n        if overlapsNext {\n            let originalLinesSpanned = Int(ceil(intrinsic.height / (1.35 * intrinsicLineHeight)))\n            let nextUsedLine: Int = if sideline.direction == .up {\n                (sortedSidelines.filter { $0.targetLine < sideline.targetLine }\n                    .map(\\.targetLine)\n                    .max() ?? 1) - 1\n            } else {\n                (sortedSidelines.filter { $0.targetLine > sideline.targetLine }\n                    .map(\\.targetLine)\n                    .min() ?? 16) - 1\n            }\n\n            let targetLinesToSpan = max(originalLinesSpanned, abs(nextUsedLine - sideline.targetLine))\n            let targetHeight = CGFloat(targetLinesToSpan) * lineHeight\n            if intrinsic.height - targetHeight < 25 {\n                return intrinsic\n            }\n            return CGSize(\n                width: (targetHeight / intrinsic.height) * intrinsic.width,\n                height: targetHeight\n            )\n        }\n\n        if intrinsic.width > containerWidth {\n            return CGSize(\n                width: containerWidth,\n                height: (containerWidth / intrinsic.width) * intrinsic.height\n            )\n        }\n\n        let originalLinesSpanned = Int(ceil(intrinsic.height / (1.35 * intrinsicLineHeight)))\n        let originalTargetHeight = CGFloat(originalLinesSpanned) * lineHeight\n        let targetHeight = abs(intrinsic.height + originalTargetHeight) / 2\n        return CGSize(\n            width: (targetHeight / intrinsic.height) * intrinsic.width,\n            height: targetHeight\n        )\n    }\n\n    private func selectionAnchors(\n        for spans: [LinePageHighlightSpan],\n        in pageFrame: CGRect,\n        lineCount: Int\n    ) -> [AyahNumber: LinePageSelectionAnchors] {\n        let lineRanges = Dictionary(uniqueKeysWithValues: selectionLineRanges(in: pageFrame, lineCount: lineCount).map {\n            ($0.lineNumber, $0.hitFrame)\n        })\n\n        let grouped = Dictionary(grouping: spans, by: \\.ayah)\n        return grouped.mapValues { spans in\n            let ordered = spans.sorted {\n                if $0.line == $1.line {\n                    return $0.left < $1.left\n                }\n                return $0.line < $1.line\n            }\n            let start = selectionRect(for: ordered.first!, lineRanges: lineRanges, pageWidth: pageFrame.width)\n            let end = selectionRect(for: ordered.last!, lineRanges: lineRanges, pageWidth: pageFrame.width)\n            return LinePageSelectionAnchors(start: start, end: end)\n        }\n    }\n\n    private func selectionRect(\n        for span: LinePageHighlightSpan,\n        lineRanges: [Int: CGRect],\n        pageWidth: CGFloat\n    ) -> CGRect {\n        let hitFrame = lineRanges[span.line] ?? .zero\n        let minX = hitFrame.minX + (span.left * pageWidth)\n        let maxX = hitFrame.minX + (span.right * pageWidth)\n        return CGRect(\n            x: minX,\n            y: hitFrame.minY,\n            width: maxX - minX,\n            height: hitFrame.height\n        )\n    }\n}\n\nprivate struct SelectionLineRange: Sendable {\n    let lineNumber: Int\n    let fullLineRange: ClosedRange<CGFloat>\n    let hitFrame: CGRect\n}\n\nprivate let headerFooterHeightRatio: CGFloat = 0.04\nprivate let pageMinWidthToHeightRatio: CGFloat = 1 / 1.60\nprivate let pageMaxWidthToHeightRatio: CGFloat = 1 / 1.84\nprivate let headerFooterMarginRatio: CGFloat = 0.027\nprivate let scrollablePageWidthRatio: CGFloat = 0.97\nprivate let scrollableMaximumPageWidth: CGFloat = 1080\nprivate let scrollablePageHeightToWidthRatio: CGFloat = 1.76\nprivate let sidelineWidthRatio: CGFloat = 0.1\nprivate let lineHeightRatio: CGFloat = 174 / 1080\nprivate let suraHeaderWidthRatio: CGFloat = 1038 / 1080\nprivate let intrinsicLineHeight: CGFloat = 174\n"
  },
  {
    "path": "Domain/ImageService/Sources/LinePageWordFrameAdapter.swift",
    "content": "//\n//  LinePageWordFrameAdapter.swift\n//\n//\n//  Created by OpenAI Codex on 2026-03-31.\n//\n\nimport CoreGraphics\nimport LinePagePersistence\nimport QuranGeometry\nimport QuranKit\nimport WordFrameService\n\npublic struct LinePageWordFrameAdapter {\n    // MARK: Lifecycle\n\n    public init() { }\n\n    // MARK: Public\n\n    public func wordFrames(\n        from highlightSpans: [LinePageHighlightSpan],\n        quran: Quran,\n        lineCount: Int\n    ) -> WordFrameCollection {\n        guard !highlightSpans.isEmpty else {\n            return WordFrameCollection(lines: [])\n        }\n\n        let orderedSpans = highlightSpans.sorted(by: spanSort)\n        var nextSegmentByAyah: [AyahNumber: Int] = [:]\n\n        let frames = orderedSpans.map { span in\n            let segmentNumber = nextSegmentByAyah[span.ayah, default: 0] + 1\n            nextSegmentByAyah[span.ayah] = segmentNumber\n            return syntheticWordFrame(for: span, quran: quran, lineCount: lineCount, segmentNumber: segmentNumber)\n        }\n\n        return processor.processWordFrames(frames)\n    }\n\n    // MARK: Private\n\n    private static let pageWidth: CGFloat = 1080\n    private static let pageHeightToWidthRatio: CGFloat = 1.76\n    private static let lineHeightRatio: CGFloat = 174 / 1080\n\n    private let processor = WordFrameProcessor()\n\n    private func spanSort(_ lhs: LinePageHighlightSpan, _ rhs: LinePageHighlightSpan) -> Bool {\n        if lhs.ayah != rhs.ayah {\n            return lhs.ayah < rhs.ayah\n        }\n        if lhs.line != rhs.line {\n            return lhs.line < rhs.line\n        }\n        // Preserve RTL ordering within the same line.\n        return lhs.left > rhs.left\n    }\n\n    private func syntheticWordFrame(\n        for span: LinePageHighlightSpan,\n        quran: Quran,\n        lineCount: Int,\n        segmentNumber: Int\n    ) -> WordFrame {\n        let lineFrame = canonicalLineFrame(for: span.line, lineCount: lineCount)\n        let minX = Int(floor(span.left * Self.pageWidth))\n        let maxX = Int(ceil(span.right * Self.pageWidth))\n        let minY = Int(floor(lineFrame.minY))\n        let maxY = Int(ceil(lineFrame.maxY))\n\n        return WordFrame(\n            line: span.line + 1,\n            word: Word(verse: span.ayah, wordNumber: segmentNumber),\n            minX: minX,\n            maxX: max(maxX, minX + 1),\n            minY: minY,\n            maxY: max(maxY, minY + 1)\n        )\n    }\n\n    private func canonicalLineFrame(for lineIndex: Int, lineCount: Int) -> CGRect {\n        let imageLineHeight = Self.pageWidth * Self.lineHeightRatio\n        let pageHeight = Self.pageWidth * Self.pageHeightToWidthRatio\n        let lastLineIndex = CGFloat(max(lineCount - 1, 1))\n        let imageY = floor((pageHeight - imageLineHeight) / lastLineIndex * CGFloat(lineIndex))\n        return CGRect(x: 0, y: imageY, width: Self.pageWidth, height: imageLineHeight)\n    }\n}\n"
  },
  {
    "path": "Domain/ImageService/Tests/ImageDataServiceTests.swift",
    "content": "//\n//  ImageDataServiceTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-01-09.\n//\n\nimport QuranGeometry\nimport QuranKit\nimport SnapshotTesting\nimport TestResources\nimport XCTest\n@testable import ImageService\n\nclass ImageDataServiceTests: XCTestCase {\n    // MARK: Internal\n\n    var service: ImageDataService!\n    let quran = Quran.hafsMadani1405\n\n    @MainActor\n    override func setUpWithError() throws {\n        service = ImageDataService(\n            ayahInfoDatabase: TestResources.resourceURL(\"hafs_1405_ayahinfo.db\"),\n            imagesURL: TestResources.testDataURL.appendingPathComponent(\"images\")\n        )\n    }\n\n    func testPageMarkers() async throws {\n        let quran = Reading.hafs_1421.quran\n        service = ImageDataService(\n            ayahInfoDatabase: TestResources.resourceURL(\"hafs_1421_ayahinfo_1120.db\"),\n            imagesURL: URL(string: \"invalid\")!\n        )\n\n        var surasHeaders = 0\n        for page in quran.pages {\n            let ayahNumbers = try await service.ayahNumbers(page)\n            let pageSuraHeaders = try await service.suraHeaders(page)\n            XCTAssertEqual(ayahNumbers.count, page.verses.count, \"Page \\(page.pageNumber)\")\n            surasHeaders += pageSuraHeaders.count\n        }\n        XCTAssertEqual(surasHeaders, quran.suras.count)\n    }\n\n    func testWordFrameCollection() async throws {\n        let page = quran.pages[0]\n        let image = try await service.imageForPage(page)\n        let wordFrames = image.wordFrames\n\n        XCTAssertEqual(wordFrames.lines[0].frames, wordFrames.wordFramesForVerse(page.firstVerse))\n        XCTAssertEqual(\n            CGRect(x: 705, y: 254.0, width: 46.0, height: 95.0),\n            wordFrames.wordFrameForWord(Word(verse: page.firstVerse, wordNumber: 2))?.rect\n        )\n        XCTAssertEqual([], wordFrames.wordFramesForVerse(quran.lastVerse))\n\n        let verticalScaling = WordFrameScale.scaling(imageSize: image.image.size, into: CGSize(width: 359, height: 668))\n        let horizontalScaling = WordFrameScale.scaling(imageSize: image.image.size, into: CGSize(width: 708, height: 1170.923076923077))\n\n        XCTAssertEqual(\n            Word(verse: AyahNumber(quran: quran, sura: 1, ayah: 7)!, wordNumber: 3),\n            wordFrames.wordAtLocation(CGPoint(x: 103, y: 235), imageScale: verticalScaling)\n        )\n\n        XCTAssertEqual(\n            Word(verse: AyahNumber(quran: quran, sura: 1, ayah: 3)!, wordNumber: 1),\n            wordFrames.wordAtLocation(CGPoint(x: 540, y: 290), imageScale: horizontalScaling)\n        )\n\n        XCTAssertNil(wordFrames.wordAtLocation(.zero, imageScale: verticalScaling))\n    }\n\n    @MainActor\n    func testGettingImageAtPage1() async throws {\n        let page = quran.pages[0]\n        let image = try await service.imageForPage(page)\n        XCTAssertEqual(image.startAyah, page.firstVerse)\n        try verifyImagePage(image)\n    }\n\n    @MainActor\n    func testGettingImageAtPage3() async throws {\n        let page = quran.pages[2]\n        let image = try await service.imageForPage(page)\n        XCTAssertEqual(image.startAyah, page.firstVerse)\n        try verifyImagePage(image)\n    }\n\n    @MainActor\n    func testGettingImageAtPage604() async throws {\n        let page = quran.pages.last!\n        let image = try await service.imageForPage(page)\n        XCTAssertEqual(image.startAyah, page.firstVerse)\n        try verifyImagePage(image)\n    }\n\n    // MARK: Private\n\n    @MainActor\n    private func verifyImagePage(_ imagePage: ImagePage, testName: String = #function) throws {\n        // assert the image\n        assertSnapshot(matching: imagePage.image, as: .image, testName: testName)\n\n        // assert the word frames values\n        let frames = imagePage.wordFrames.lines.flatMap(\\.frames).sorted { $0.word < $1.word }\n        assertSnapshot(matching: frames, as: .json, testName: testName)\n\n        if ProcessInfo.processInfo.environment[\"LocalSnapshots\"] != nil {\n            print(\"[Test] Asserting LocalSnapshots\")\n            // assert the drawn word frames\n            let highlightedImage = try drawFrames(imagePage.image, frames: imagePage.wordFrames, strokeWords: false)\n            assertSnapshot(matching: highlightedImage, as: .image, testName: testName)\n        }\n    }\n\n    private func drawFrames(_ image: UIImage, frames: WordFrameCollection, strokeWords: Bool) throws -> UIImage {\n        UIGraphicsBeginImageContextWithOptions(image.size, false, 0)\n        let fillColors: [UIColor] = [\n            .systemRed,\n            .systemBlue,\n            .systemGreen,\n            .systemOrange,\n            .systemPurple,\n            .systemTeal,\n        ]\n        let strokeColor = UIColor.gray\n        let verses = Set(frames.lines.flatMap(\\.frames).map(\\.word.verse)).sorted()\n        for (offset, verse) in verses.enumerated() {\n            let frames = try XCTUnwrap(frames.wordFramesForVerse(verse))\n            let color = fillColors[offset % fillColors.count]\n            color.setFill()\n            strokeColor.setStroke()\n            for frame in frames {\n                let path = UIBezierPath(rect: frame.rect)\n                path.fill()\n                if strokeWords {\n                    path.stroke()\n                }\n            }\n        }\n        image.draw(at: .zero)\n        let newImage = UIGraphicsGetImageFromCurrentImageContext()\n        UIGraphicsEndImageContext()\n        return try XCTUnwrap(newImage)\n    }\n}\n"
  },
  {
    "path": "Domain/ImageService/Tests/LinePageAssetServiceTests.swift",
    "content": "//\n//  LinePageAssetServiceTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2026-03-28.\n//\n\nimport QuranKit\nimport SystemDependencies\nimport UIKit\nimport XCTest\n@testable import ImageService\n\nfinal class LinePageAssetServiceTests: XCTestCase {\n    // MARK: Internal\n\n    override func tearDownWithError() throws {\n        try? FileManager.default.removeItem(at: rootURL)\n    }\n\n    func testRequiredStructureReturnsAvailableWhenDatabaseAndFirstLineExist() throws {\n        try createAyahInfoDatabase()\n        try createPage(pageNumber: 1, missingLines: Set(2 ... 15))\n\n        let service = makeService(requiredPageNumbers: [1, 2])\n\n        XCTAssertTrue(service.hasRequiredStructure())\n    }\n\n    func testRequiredStructureReturnsUnavailableWhenFirstLineIsMissing() throws {\n        try createAyahInfoDatabase()\n        try createPage(pageNumber: 1, missingLines: [1])\n\n        let service = makeService(requiredPageNumbers: [1, 2])\n\n        XCTAssertFalse(service.hasRequiredStructure())\n    }\n\n    func testAssetsForPageReturnsAvailableWhenSidelinesAreMissing() async throws {\n        try createAyahInfoDatabase()\n        try createPage(pageNumber: 1)\n\n        let service = makeService(requiredPageNumbers: [1])\n        let page = try XCTUnwrap(Page(quran: .hafsMadani1440, pageNumber: 1))\n\n        switch await service.assetsForPage(page) {\n        case .available(let assets):\n            XCTAssertEqual(assets.lines.count, 15)\n            XCTAssertTrue(assets.sidelines.isEmpty)\n            XCTAssertEqual(assets.ayahInfoDatabaseURL.lastPathComponent, \"ayahinfo_1440.db\")\n        case .unavailable:\n            XCTFail(\"Expected available assets\")\n        }\n    }\n\n    // MARK: Private\n\n    private lazy var rootURL = FileManager.default.temporaryDirectory\n        .appendingPathComponent(UUID().uuidString, isDirectory: true)\n\n    private func makeService(requiredPageNumbers: [Int]) -> LinePageAssetService {\n        LinePageAssetService(\n            readingDirectory: rootURL,\n            widthParameter: 1440,\n            requiredPageNumbers: requiredPageNumbers,\n            fileSystem: DefaultFileSystem()\n        )\n    }\n\n    private func createAyahInfoDatabase() throws {\n        let databasesDirectory = rootURL\n            .appendingPathComponent(\"images_1440\")\n            .appendingPathComponent(\"databases\", isDirectory: true)\n        try FileManager.default.createDirectory(at: databasesDirectory, withIntermediateDirectories: true, attributes: nil)\n        FileManager.default.createFile(\n            atPath: databasesDirectory.appendingPathComponent(\"ayahinfo_1440.db\").path,\n            contents: Data(\"db\".utf8)\n        )\n    }\n\n    private func createPage(pageNumber: Int, missingLines: Set<Int> = [], includeSidelines: Bool = false) throws {\n        let pageDirectory = rootURL\n            .appendingPathComponent(\"images_1440\")\n            .appendingPathComponent(\"width_1440\")\n            .appendingPathComponent(String(pageNumber), isDirectory: true)\n        try FileManager.default.createDirectory(at: pageDirectory, withIntermediateDirectories: true, attributes: nil)\n\n        for lineNumber in 1 ... 15 where !missingLines.contains(lineNumber) {\n            try makePNG().write(to: pageDirectory.appendingPathComponent(\"\\(lineNumber).png\"))\n        }\n\n        if includeSidelines {\n            let sidelinesDirectory = pageDirectory.appendingPathComponent(\"sidelines\", isDirectory: true)\n            try FileManager.default.createDirectory(at: sidelinesDirectory, withIntermediateDirectories: true, attributes: nil)\n            try makePNG().write(to: sidelinesDirectory.appendingPathComponent(\"3_up.png\"))\n        }\n    }\n\n    private func makePNG() throws -> Data {\n        let renderer = UIGraphicsImageRenderer(size: CGSize(width: 4, height: 4))\n        let image = renderer.image { context in\n            UIColor.black.setFill()\n            context.cgContext.fill(CGRect(x: 0, y: 0, width: 4, height: 4))\n        }\n        return try XCTUnwrap(image.pngData())\n    }\n}\n"
  },
  {
    "path": "Domain/ImageService/Tests/LinePageGeometryTests.swift",
    "content": "//\n//  LinePageGeometryTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2026-03-29.\n//\n\nimport LinePagePersistence\nimport QuranKit\nimport XCTest\n@testable import ImageService\n\nfinal class LinePageGeometryTests: XCTestCase {\n    // MARK: Internal\n\n    func testPortraitLayoutMatchesSizingRules() throws {\n        let layout = makeEngine().layout(\n            LinePageGeometryInput(\n                availableSize: CGSize(width: 400, height: 800),\n                orientation: .portrait,\n                pageParity: .odd,\n                displaySettings: LinePageDisplaySettings(showHeaderFooter: true, showSidelines: false),\n                data: makeData(),\n                suraHeaderAspectRatio: 0.25\n            )\n        )\n\n        XCTAssertEqual(layout.contentSize.width, 400)\n        XCTAssertEqual(layout.contentSize.height, 800)\n        XCTAssertEqual(layout.headerFrame, CGRect(x: 10, y: 0, width: 380, height: 32))\n        XCTAssertEqual(layout.pageFrame, CGRect(x: 0, y: 32, width: 400, height: 736))\n        XCTAssertEqual(layout.footerFrame, CGRect(x: 10, y: 768, width: 380, height: 32))\n        XCTAssertNil(layout.sidelineFrame)\n    }\n\n    func testLandscapeLayoutReservesSidelinesOnLeadingEdgeForOddPages() throws {\n        let layout = makeEngine().layout(\n            LinePageGeometryInput(\n                availableSize: CGSize(width: 900, height: 400),\n                orientation: .landscape,\n                verticalPadding: 20,\n                pageParity: .odd,\n                displaySettings: LinePageDisplaySettings(showHeaderFooter: true, showSidelines: true),\n                data: makeData(\n                    sidelines: [\n                        .init(targetLine: 3, direction: .up, intrinsicSize: CGSize(width: 50, height: 200)),\n                    ]\n                ),\n                suraHeaderAspectRatio: 0.25\n            )\n        )\n\n        XCTAssertEqual(layout.headerFrame, CGRect(x: 123, y: 20, width: 744, height: 31))\n        XCTAssertEqual(layout.pageFrame, CGRect(x: 102, y: 51, width: 786, height: 1384))\n        XCTAssertEqual(layout.footerFrame, CGRect(x: 123, y: 1435, width: 744, height: 31))\n        XCTAssertEqual(layout.sidelineFrame, CGRect(x: 0, y: 51, width: 90, height: 1384))\n        XCTAssertEqual(layout.contentSize.height, 1501)\n\n        let sideline = try XCTUnwrap(layout.sidelinePlacements.first)\n        XCTAssertEqual(sideline.frame.minX, 53.46666666666667, accuracy: 0.001)\n        XCTAssertEqual(sideline.frame.minY, 127.8, accuracy: 0.001)\n        XCTAssertEqual(sideline.frame.width, 36.53333333333333, accuracy: 0.001)\n        XCTAssertEqual(sideline.frame.height, 146.13333333333333, accuracy: 0.001)\n    }\n\n    func testHighlightsMarkersAndHeadersUseSharedGeometry() throws {\n        let highlightedAyah = try ayah(1, 1)\n        let markerAyah = try ayah(1, 2)\n        let layout = makeEngine().layout(\n            LinePageGeometryInput(\n                availableSize: CGSize(width: 400, height: 800),\n                orientation: .portrait,\n                pageParity: .odd,\n                displaySettings: LinePageDisplaySettings(showHeaderFooter: true, showSidelines: false),\n                data: makeData(),\n                highlights: LinePageHighlightState(\n                    highlightedVerses: [highlightedAyah, markerAyah]\n                ),\n                suraHeaderAspectRatio: 0.25\n            )\n        )\n\n        XCTAssertEqual(layout.highlightRects.count, 3)\n\n        let firstHighlight = layout.highlightRects[0]\n        XCTAssertEqual(firstHighlight.ayah, highlightedAyah)\n        XCTAssertEqual(\n            firstHighlight.rect,\n            expectedHighlightRect(for: makeData().highlightSpans[0], pageFrame: layout.pageFrame)\n        )\n\n        let firstMarker = try XCTUnwrap(layout.ayahMarkerPlacements.first { $0.marker.ayah == markerAyah })\n        XCTAssertEqual(\n            firstMarker.frame,\n            expectedMarkerFrame(for: firstMarker.marker, pageFrame: layout.pageFrame)\n        )\n\n        let header = try XCTUnwrap(layout.suraHeaderPlacements.first)\n        XCTAssertEqual(\n            header.frame,\n            expectedHeaderFrame(for: header.header, pageFrame: layout.pageFrame, aspectRatio: 0.25)\n        )\n    }\n\n    func testVerseHitTestingAndSelectionAnchorsFollowAyahSpans() throws {\n        let firstAyah = try ayah(1, 1)\n        let secondAyah = try ayah(1, 2)\n        let layout = makeEngine().layout(\n            LinePageGeometryInput(\n                availableSize: CGSize(width: 400, height: 800),\n                orientation: .portrait,\n                pageParity: .odd,\n                displaySettings: LinePageDisplaySettings(showHeaderFooter: true, showSidelines: false),\n                data: makeData(),\n                suraHeaderAspectRatio: 0.25\n            )\n        )\n\n        let data = makeData()\n        let firstRect = try XCTUnwrap(layout.selectionAnchors(for: firstAyah)).start\n        let secondRect = try XCTUnwrap(layout.selectionAnchors(for: secondAyah)).start\n        let firstPoint = CGPoint(x: firstRect.midX, y: firstRect.midY)\n        let secondPoint = CGPoint(x: secondRect.midX, y: secondRect.midY)\n\n        XCTAssertEqual(\n            layout.verse(at: firstPoint),\n            firstAyah\n        )\n        XCTAssertEqual(\n            layout.verse(at: secondPoint),\n            secondAyah\n        )\n        XCTAssertNil(\n            layout.verse(at: CGPoint(x: layout.pageFrame.minX + 40, y: firstPoint.y))\n        )\n        XCTAssertNil(\n            layout.verse(at: CGPoint(x: layout.pageFrame.maxX - 40, y: firstPoint.y))\n        )\n        XCTAssertNil(layout.verse(at: CGPoint(x: layout.pageFrame.minX - 1, y: layout.pageFrame.minY + 210)))\n\n        let firstAnchors = try XCTUnwrap(layout.selectionAnchors(for: firstAyah))\n        let firstSpan = data.highlightSpans[0]\n        assertEqual(firstAnchors.start, expectedSelectionRect(for: firstSpan, pageFrame: layout.pageFrame))\n        assertEqual(firstAnchors.end, expectedSelectionRect(for: firstSpan, pageFrame: layout.pageFrame))\n\n        let secondAnchors = try XCTUnwrap(layout.selectionAnchors(for: secondAyah))\n        assertEqual(\n            secondAnchors.start,\n            expectedSelectionRect(for: data.highlightSpans[1], pageFrame: layout.pageFrame)\n        )\n        assertEqual(\n            secondAnchors.end,\n            expectedSelectionRect(for: data.highlightSpans[2], pageFrame: layout.pageFrame)\n        )\n    }\n\n    func testVerseHitTestingSupportsLastLine() throws {\n        let lastAyah = try ayah(1, 7)\n        let data = LinePageGeometryData(\n            highlightSpans: [\n                .init(ayah: lastAyah, line: 14, left: 0.2, right: 0.8),\n            ],\n            ayahMarkers: [],\n            suraHeaders: [],\n            sidelines: []\n        )\n        let layout = makeEngine().layout(\n            LinePageGeometryInput(\n                availableSize: CGSize(width: 400, height: 800),\n                orientation: .portrait,\n                pageParity: .odd,\n                displaySettings: LinePageDisplaySettings(showHeaderFooter: true, showSidelines: false),\n                data: data,\n                suraHeaderAspectRatio: 0.25\n            )\n        )\n\n        let selectionRect = try XCTUnwrap(layout.selectionAnchors(for: lastAyah)).start\n        let point = CGPoint(x: selectionRect.midX, y: selectionRect.midY)\n        XCTAssertEqual(layout.verse(at: point), lastAyah)\n    }\n\n    func testHiddenHeaderFooterDoesNotReserveChromeSpace() throws {\n        let layout = makeEngine().layout(\n            LinePageGeometryInput(\n                availableSize: CGSize(width: 600, height: 800),\n                orientation: .portrait,\n                pageParity: .odd,\n                displaySettings: LinePageDisplaySettings(showHeaderFooter: false, showSidelines: false),\n                data: makeData(),\n                suraHeaderAspectRatio: 0.25\n            )\n        )\n\n        XCTAssertEqual(layout.contentSize.width, 600)\n        XCTAssertEqual(layout.contentSize.height, 800)\n        XCTAssertEqual(layout.pageFrame, CGRect(x: 50, y: 0, width: 500, height: 800))\n        XCTAssertEqual(layout.headerFrame, CGRect(x: 300, y: 0, width: 0, height: 0))\n        XCTAssertEqual(layout.footerFrame, CGRect(x: 300, y: 800, width: 0, height: 0))\n        XCTAssertNil(layout.sidelineFrame)\n    }\n\n    // MARK: Private\n\n    private let quran = Quran.hafsMadani1405\n    private let lineHeightRatio: CGFloat = 174 / 1080\n    private let suraHeaderWidthRatio: CGFloat = 1038 / 1080\n\n    private func makeEngine() -> LinePageGeometryEngine {\n        LinePageGeometryEngine()\n    }\n\n    private func makeData(\n        sidelines: [LinePageGeometryData.Sideline] = []\n    ) -> LinePageGeometryData {\n        LinePageGeometryData(\n            highlightSpans: [\n                .init(ayah: try! ayah(1, 1), line: 5, left: 0.2445, right: 0.7555),\n                .init(ayah: try! ayah(1, 2), line: 6, left: 0.156, right: 0.844),\n                .init(ayah: try! ayah(1, 2), line: 7, left: 0.422, right: 0.811),\n            ],\n            ayahMarkers: [\n                .init(ayah: try! ayah(1, 1), line: 5, centerX: 0.295139, centerY: 0.549879, codePoint: \"\\u{E900}\"),\n                .init(ayah: try! ayah(1, 2), line: 6, centerX: 0.205903, centerY: 0.557037, codePoint: \"\\u{E901}\"),\n            ],\n            suraHeaders: [\n                .init(sura: Sura(quran: quran, suraNumber: 1)!, line: 3, centerX: 0.5, centerY: 0.5),\n            ],\n            sidelines: sidelines\n        )\n    }\n\n    private func ayah(_ sura: Int, _ ayah: Int) throws -> AyahNumber {\n        try XCTUnwrap(AyahNumber(quran: quran, sura: sura, ayah: ayah))\n    }\n\n    private func expectedHighlightRect(for span: LinePageHighlightSpan, pageFrame: CGRect) -> CGRect {\n        let lineHeight = pageFrame.width * lineHeightRatio\n        let lineHeightWithoutOverlap = (pageFrame.height - lineHeight) / 14\n        let yStart = (lineHeight - lineHeightWithoutOverlap) / 2\n        let y = pageFrame.minY + yStart + (lineHeightWithoutOverlap * CGFloat(span.line))\n        return CGRect(\n            x: pageFrame.minX + (span.left * pageFrame.width),\n            y: y,\n            width: ceil((span.right - span.left) * pageFrame.width),\n            height: lineHeightWithoutOverlap\n        )\n    }\n\n    private func expectedMarkerFrame(for marker: LinePageAyahMarker, pageFrame: CGRect) -> CGRect {\n        let lineHeight = pageFrame.width * lineHeightRatio\n        let markerDimension = pageFrame.width * 0.05\n        let yStart = ((pageFrame.height - lineHeight) / 14) * CGFloat(marker.line)\n        return CGRect(\n            x: pageFrame.minX + (marker.centerX * pageFrame.width) - (markerDimension / 2),\n            y: pageFrame.minY + yStart + (marker.centerY * lineHeight) - (markerDimension / 2),\n            width: markerDimension,\n            height: markerDimension\n        )\n    }\n\n    private func expectedHeaderFrame(\n        for header: LinePageSuraHeader,\n        pageFrame: CGRect,\n        aspectRatio: CGFloat\n    ) -> CGRect {\n        let lineHeight = pageFrame.width * lineHeightRatio\n        let width = pageFrame.width * suraHeaderWidthRatio\n        let height = width * aspectRatio\n        let yStart = ((pageFrame.height - lineHeight) / 14) * CGFloat(header.line)\n        return CGRect(\n            x: pageFrame.minX + (header.centerX * pageFrame.width) - (width / 2),\n            y: pageFrame.minY + yStart + (header.centerY * lineHeight) - (height / 2),\n            width: width,\n            height: height\n        )\n    }\n\n    private func expectedSelectionRect(for span: LinePageHighlightSpan, pageFrame: CGRect) -> CGRect {\n        let hitFrame = expectedHitFrame(lineNumber: span.line, pageFrame: pageFrame)\n        return CGRect(\n            x: hitFrame.minX + (span.left * pageFrame.width),\n            y: hitFrame.minY,\n            width: (span.right - span.left) * pageFrame.width,\n            height: hitFrame.height\n        )\n    }\n\n    private func expectedHitFrame(lineNumber: Int, pageFrame: CGRect) -> CGRect {\n        let width = Int(pageFrame.width)\n        let height = Int(pageFrame.height)\n        let lineHeight = Int(CGFloat(width) * lineHeightRatio)\n        let lineHeightWithoutOverlap = (height - lineHeight) / 14\n        let offset = (lineHeight - lineHeightWithoutOverlap) / 2\n        let lineIndex = lineNumber\n        let fullLineStart = Int(floor(Double(height - lineHeight) / 14 * Double(lineIndex)))\n        return CGRect(\n            x: pageFrame.minX,\n            y: pageFrame.minY + CGFloat(fullLineStart + offset),\n            width: pageFrame.width,\n            height: CGFloat(lineHeightWithoutOverlap)\n        )\n    }\n\n    private func assertEqual(_ lhs: CGRect, _ rhs: CGRect, accuracy: CGFloat = 0.001) {\n        XCTAssertEqual(lhs.minX, rhs.minX, accuracy: accuracy)\n        XCTAssertEqual(lhs.minY, rhs.minY, accuracy: accuracy)\n        XCTAssertEqual(lhs.width, rhs.width, accuracy: accuracy)\n        XCTAssertEqual(lhs.height, rhs.height, accuracy: accuracy)\n    }\n}\n"
  },
  {
    "path": "Domain/ImageService/Tests/LinePageWordFrameAdapterTests.swift",
    "content": "//\n//  LinePageWordFrameAdapterTests.swift\n//\n//\n//  Created by OpenAI Codex on 2026-03-31.\n//\n\nimport LinePagePersistence\nimport QuranKit\nimport XCTest\n@testable import ImageService\n\nfinal class LinePageWordFrameAdapterTests: XCTestCase {\n    func testAdapterCreatesStableOrderedSyntheticWordFrames() throws {\n        let quran = Quran.hafsMadani1405\n        let ayah1 = try XCTUnwrap(AyahNumber(quran: quran, sura: 1, ayah: 1))\n        let ayah2 = try XCTUnwrap(AyahNumber(quran: quran, sura: 1, ayah: 2))\n\n        let wordFrames = LinePageWordFrameAdapter().wordFrames(\n            from: [\n                .init(ayah: ayah2, line: 3, left: 0.2, right: 0.5),\n                .init(ayah: ayah1, line: 0, left: 0.10, right: 0.35),\n                .init(ayah: ayah1, line: 0, left: 0.60, right: 0.90),\n                .init(ayah: ayah1, line: 2, left: 0.40, right: 0.80),\n            ],\n            quran: quran,\n            lineCount: 15\n        )\n\n        let firstAyahFrames = wordFrames.wordFramesForVerse(ayah1)\n        XCTAssertEqual(firstAyahFrames.map(\\.word.wordNumber), [1, 2, 3])\n        XCTAssertEqual(firstAyahFrames.map(\\.line), [1, 1, 3])\n\n        let firstLine = try XCTUnwrap(wordFrames.lineFramesVerVerse(ayah1).first)\n        XCTAssertEqual(Set(firstLine.frames.map(\\.word.verse)), [ayah1])\n        XCTAssertEqual(Set(firstLine.frames.map(\\.line)), [1])\n\n        let secondAyahFrames = wordFrames.wordFramesForVerse(ayah2)\n        XCTAssertEqual(secondAyahFrames.map(\\.word.wordNumber), [1])\n        XCTAssertEqual(secondAyahFrames.map(\\.line), [4])\n    }\n\n    func testAdapterReturnsEmptyCollectionWhenThereAreNoSpans() {\n        let wordFrames = LinePageWordFrameAdapter().wordFrames(\n            from: [],\n            quran: .hafsMadani1405,\n            lineCount: 15\n        )\n\n        XCTAssertEqual(wordFrames.lines, [])\n    }\n}\n"
  },
  {
    "path": "Domain/ImageService/Tests/WordFrameTests.swift",
    "content": "//\n//  WordFrameTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-04-05.\n//\n\nimport QuranGeometry\nimport QuranKit\nimport XCTest\n@testable import WordFrameService\n\nclass WordFrameTests: XCTestCase {\n    let word1 = Word(verse: Quran.hafsMadani1405.firstVerse, wordNumber: 1)\n    let word2 = Word(verse: Quran.hafsMadani1405.firstVerse, wordNumber: 2)\n\n    func testNonOverlappingFrames() {\n        // Case 1: Non-overlapping frames\n        // Before: [leftFrame]     [rightFrame]\n        var leftFrame = WordFrame(line: 1, word: word1, minX: 0, maxX: 10, minY: 0, maxY: 10)\n        var rightFrame = WordFrame(line: 1, word: word2, minX: 20, maxX: 30, minY: 0, maxY: 10)\n        WordFrame.unionHorizontally(leftFrame: &leftFrame, rightFrame: &rightFrame)\n        // After:  [leftFrame][rightFrame]\n\n        assertFrame(leftFrame, minX: 0, maxX: 15)\n        assertFrame(rightFrame, minX: 15, maxX: 30)\n    }\n\n    func testOverlappingFrames() {\n        // Case 2: Overlapping frames with non-overlapping parts\n        // Before: [leftFrame overlaps]\n        //                   [overlaps rightFrame]\n        var leftFrame = WordFrame(line: 1, word: word1, minX: 0, maxX: 20, minY: 0, maxY: 10)\n        var rightFrame = WordFrame(line: 1, word: word2, minX: 15, maxX: 35, minY: 0, maxY: 10)\n        WordFrame.unionHorizontally(leftFrame: &leftFrame, rightFrame: &rightFrame)\n        // After:  [leftFrame][rightFrame]\n\n        assertFrame(leftFrame, minX: 0, maxX: 15)\n        assertFrame(rightFrame, minX: 15, maxX: 35)\n    }\n}\n\nfunc assertFrame(_ frame: WordFrame, minX: Int, maxX: Int, file: StaticString = #filePath, line: UInt = #line) {\n    XCTAssertEqual(frame.minX, minX, \"minX\")\n    XCTAssertEqual(frame.maxX, maxX, \"minX\")\n}\n"
  },
  {
    "path": "Domain/ImageService/Tests/__Snapshots__/ImageDataServiceTests/testGettingImageAtPage1.2.json",
    "content": "[\n  {\n    \"frame\" : [\n      [\n        751,\n        254\n      ],\n      [\n        268,\n        95\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 1\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        705,\n        254\n      ],\n      [\n        46,\n        95\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 1\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        614,\n        254\n      ],\n      [\n        91,\n        95\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 1\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        505,\n        254\n      ],\n      [\n        109,\n        95\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 1\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        264,\n        254\n      ],\n      [\n        241,\n        95\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 1\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        810,\n        349\n      ],\n      [\n        209,\n        109\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 1\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        759,\n        349\n      ],\n      [\n        51,\n        109\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 1\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        650,\n        349\n      ],\n      [\n        109,\n        109\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 1\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        413,\n        349\n      ],\n      [\n        237,\n        109\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 1\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        264,\n        349\n      ],\n      [\n        149,\n        109\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 1\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        882,\n        458\n      ],\n      [\n        137,\n        107\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 1\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        740,\n        458\n      ],\n      [\n        142,\n        107\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 1\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        658,\n        458\n      ],\n      [\n        82,\n        107\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 1\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        548,\n        458\n      ],\n      [\n        110,\n        107\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 1\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        479,\n        458\n      ],\n      [\n        69,\n        107\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 1\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        343,\n        458\n      ],\n      [\n        136,\n        107\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 1\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        264,\n        458\n      ],\n      [\n        79,\n        107\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 1\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        928,\n        565\n      ],\n      [\n        91,\n        104\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 1\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        823,\n        565\n      ],\n      [\n        105,\n        104\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 1\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        701,\n        565\n      ],\n      [\n        122,\n        104\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 1\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        479,\n        565\n      ],\n      [\n        222,\n        104\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 1\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        397,\n        565\n      ],\n      [\n        82,\n        104\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 1\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        264,\n        565\n      ],\n      [\n        133,\n        104\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 1\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        871,\n        669\n      ],\n      [\n        148,\n        122\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 1\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        688,\n        669\n      ],\n      [\n        183,\n        122\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 1\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        608,\n        669\n      ],\n      [\n        80,\n        122\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 1\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        495,\n        669\n      ],\n      [\n        113,\n        122\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 1\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        406,\n        669\n      ],\n      [\n        89,\n        122\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 1\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        264,\n        669\n      ],\n      [\n        142,\n        122\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 1\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        800,\n        791\n      ],\n      [\n        219,\n        107\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 1\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        733,\n        791\n      ],\n      [\n        67,\n        107\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 1\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        500,\n        791\n      ],\n      [\n        233,\n        107\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 1\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        264,\n        791\n      ],\n      [\n        236,\n        107\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 1\n      },\n      \"word\" : 7\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        738,\n        898\n      ],\n      [\n        281,\n        87\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 1\n      },\n      \"word\" : 8\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        562,\n        898\n      ],\n      [\n        176,\n        87\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 1\n      },\n      \"word\" : 9\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        264,\n        898\n      ],\n      [\n        298,\n        87\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 1\n      },\n      \"word\" : 10\n    }\n  }\n]"
  },
  {
    "path": "Domain/ImageService/Tests/__Snapshots__/ImageDataServiceTests/testGettingImageAtPage3.2.json",
    "content": "[\n  {\n    \"frame\" : [\n      [\n        1136,\n        30\n      ],\n      [\n        56,\n        123\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 2\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        960,\n        30\n      ],\n      [\n        176,\n        123\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 2\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        825,\n        30\n      ],\n      [\n        135,\n        123\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 2\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        708,\n        30\n      ],\n      [\n        117,\n        123\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 2\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        555,\n        30\n      ],\n      [\n        153,\n        123\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 2\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        320,\n        30\n      ],\n      [\n        235,\n        123\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 2\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        275,\n        30\n      ],\n      [\n        45,\n        123\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 2\n      },\n      \"word\" : 7\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        228,\n        30\n      ],\n      [\n        47,\n        123\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 2\n      },\n      \"word\" : 8\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        99,\n        30\n      ],\n      [\n        129,\n        123\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 2\n      },\n      \"word\" : 9\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1147,\n        153\n      ],\n      [\n        45,\n        119\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 2\n      },\n      \"word\" : 10\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        991,\n        153\n      ],\n      [\n        156,\n        119\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 2\n      },\n      \"word\" : 11\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        886,\n        153\n      ],\n      [\n        105,\n        119\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 2\n      },\n      \"word\" : 12\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        775,\n        153\n      ],\n      [\n        111,\n        119\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 2\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        707,\n        153\n      ],\n      [\n        68,\n        119\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 2\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        640,\n        153\n      ],\n      [\n        67,\n        119\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 2\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        478,\n        153\n      ],\n      [\n        162,\n        119\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 2\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        380,\n        153\n      ],\n      [\n        98,\n        119\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 2\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        204,\n        153\n      ],\n      [\n        176,\n        119\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 2\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        196,\n        153\n      ],\n      [\n        8,\n        119\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 2\n      },\n      \"word\" : 7\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        99,\n        153\n      ],\n      [\n        97,\n        119\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 2\n      },\n      \"word\" : 8\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1009,\n        272\n      ],\n      [\n        183,\n        143\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 2\n      },\n      \"word\" : 9\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        861,\n        272\n      ],\n      [\n        148,\n        143\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 2\n      },\n      \"word\" : 10\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        857,\n        272\n      ],\n      [\n        4,\n        143\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 2\n      },\n      \"word\" : 11\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        732,\n        272\n      ],\n      [\n        125,\n        143\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 2\n      },\n      \"word\" : 12\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        577,\n        272\n      ],\n      [\n        155,\n        143\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 2\n      },\n      \"word\" : 13\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        421,\n        272\n      ],\n      [\n        156,\n        143\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 2\n      },\n      \"word\" : 14\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        314,\n        272\n      ],\n      [\n        107,\n        143\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 7,\n        \"sura\" : 2\n      },\n      \"word\" : 15\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        219,\n        272\n      ],\n      [\n        95,\n        143\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 8,\n        \"sura\" : 2\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        99,\n        272\n      ],\n      [\n        120,\n        143\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 8,\n        \"sura\" : 2\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1126,\n        415\n      ],\n      [\n        66,\n        129\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 8,\n        \"sura\" : 2\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1018,\n        415\n      ],\n      [\n        108,\n        129\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 8,\n        \"sura\" : 2\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        890,\n        415\n      ],\n      [\n        128,\n        129\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 8,\n        \"sura\" : 2\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        801,\n        415\n      ],\n      [\n        89,\n        129\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 8,\n        \"sura\" : 2\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        631,\n        415\n      ],\n      [\n        170,\n        129\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 8,\n        \"sura\" : 2\n      },\n      \"word\" : 7\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        516,\n        415\n      ],\n      [\n        115,\n        129\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 8,\n        \"sura\" : 2\n      },\n      \"word\" : 8\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        445,\n        415\n      ],\n      [\n        71,\n        129\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 8,\n        \"sura\" : 2\n      },\n      \"word\" : 9\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        381,\n        415\n      ],\n      [\n        64,\n        129\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 8,\n        \"sura\" : 2\n      },\n      \"word\" : 10\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        204,\n        415\n      ],\n      [\n        177,\n        129\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 8,\n        \"sura\" : 2\n      },\n      \"word\" : 11\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        99,\n        415\n      ],\n      [\n        105,\n        129\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 8,\n        \"sura\" : 2\n      },\n      \"word\" : 12\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        989,\n        544\n      ],\n      [\n        203,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 9,\n        \"sura\" : 2\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        911,\n        544\n      ],\n      [\n        78,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 9,\n        \"sura\" : 2\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        770,\n        544\n      ],\n      [\n        141,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 9,\n        \"sura\" : 2\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        621,\n        544\n      ],\n      [\n        149,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 9,\n        \"sura\" : 2\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        542,\n        544\n      ],\n      [\n        79,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 9,\n        \"sura\" : 2\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        333,\n        544\n      ],\n      [\n        209,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 9,\n        \"sura\" : 2\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        260,\n        544\n      ],\n      [\n        73,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 9,\n        \"sura\" : 2\n      },\n      \"word\" : 7\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        99,\n        544\n      ],\n      [\n        161,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 9,\n        \"sura\" : 2\n      },\n      \"word\" : 8\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1113,\n        677\n      ],\n      [\n        79,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 9,\n        \"sura\" : 2\n      },\n      \"word\" : 9\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        948,\n        677\n      ],\n      [\n        165,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 9,\n        \"sura\" : 2\n      },\n      \"word\" : 10\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        840,\n        677\n      ],\n      [\n        108,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 9,\n        \"sura\" : 2\n      },\n      \"word\" : 11\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        779,\n        677\n      ],\n      [\n        61,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 10,\n        \"sura\" : 2\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        619,\n        677\n      ],\n      [\n        160,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 10,\n        \"sura\" : 2\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        504,\n        677\n      ],\n      [\n        115,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 10,\n        \"sura\" : 2\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        320,\n        677\n      ],\n      [\n        184,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 10,\n        \"sura\" : 2\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        247,\n        677\n      ],\n      [\n        73,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 10,\n        \"sura\" : 2\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        110,\n        677\n      ],\n      [\n        137,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 10,\n        \"sura\" : 2\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        99,\n        677\n      ],\n      [\n        11,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 10,\n        \"sura\" : 2\n      },\n      \"word\" : 7\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1069,\n        812\n      ],\n      [\n        123,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 10,\n        \"sura\" : 2\n      },\n      \"word\" : 8\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        926,\n        812\n      ],\n      [\n        143,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 10,\n        \"sura\" : 2\n      },\n      \"word\" : 9\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        827,\n        812\n      ],\n      [\n        99,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 10,\n        \"sura\" : 2\n      },\n      \"word\" : 10\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        752,\n        812\n      ],\n      [\n        75,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 10,\n        \"sura\" : 2\n      },\n      \"word\" : 11\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        657,\n        812\n      ],\n      [\n        95,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 10,\n        \"sura\" : 2\n      },\n      \"word\" : 12\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        468,\n        812\n      ],\n      [\n        189,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 10,\n        \"sura\" : 2\n      },\n      \"word\" : 13\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        360,\n        812\n      ],\n      [\n        108,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 10,\n        \"sura\" : 2\n      },\n      \"word\" : 14\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        262,\n        812\n      ],\n      [\n        98,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 11,\n        \"sura\" : 2\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        185,\n        812\n      ],\n      [\n        77,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 11,\n        \"sura\" : 2\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        99,\n        812\n      ],\n      [\n        86,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 11,\n        \"sura\" : 2\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1144,\n        946\n      ],\n      [\n        48,\n        125\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 11,\n        \"sura\" : 2\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        970,\n        946\n      ],\n      [\n        174,\n        125\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 11,\n        \"sura\" : 2\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        917,\n        946\n      ],\n      [\n        53,\n        125\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 11,\n        \"sura\" : 2\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        760,\n        946\n      ],\n      [\n        157,\n        125\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 11,\n        \"sura\" : 2\n      },\n      \"word\" : 7\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        646,\n        946\n      ],\n      [\n        114,\n        125\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 11,\n        \"sura\" : 2\n      },\n      \"word\" : 8\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        557,\n        946\n      ],\n      [\n        89,\n        125\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 11,\n        \"sura\" : 2\n      },\n      \"word\" : 9\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        468,\n        946\n      ],\n      [\n        89,\n        125\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 11,\n        \"sura\" : 2\n      },\n      \"word\" : 10\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        203,\n        946\n      ],\n      [\n        265,\n        125\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 11,\n        \"sura\" : 2\n      },\n      \"word\" : 11\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        99,\n        946\n      ],\n      [\n        104,\n        125\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 11,\n        \"sura\" : 2\n      },\n      \"word\" : 12\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1104,\n        1071\n      ],\n      [\n        88,\n        137\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 12,\n        \"sura\" : 2\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1007,\n        1071\n      ],\n      [\n        97,\n        137\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 12,\n        \"sura\" : 2\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        939,\n        1071\n      ],\n      [\n        68,\n        137\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 12,\n        \"sura\" : 2\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        706,\n        1071\n      ],\n      [\n        233,\n        137\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 12,\n        \"sura\" : 2\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        576,\n        1071\n      ],\n      [\n        130,\n        137\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 12,\n        \"sura\" : 2\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        531,\n        1071\n      ],\n      [\n        45,\n        137\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 12,\n        \"sura\" : 2\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        375,\n        1071\n      ],\n      [\n        156,\n        137\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 12,\n        \"sura\" : 2\n      },\n      \"word\" : 7\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        269,\n        1071\n      ],\n      [\n        106,\n        137\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 12,\n        \"sura\" : 2\n      },\n      \"word\" : 8\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        180,\n        1071\n      ],\n      [\n        89,\n        137\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        99,\n        1071\n      ],\n      [\n        81,\n        137\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1107,\n        1208\n      ],\n      [\n        85,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        971,\n        1208\n      ],\n      [\n        136,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        885,\n        1208\n      ],\n      [\n        86,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        780,\n        1208\n      ],\n      [\n        105,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        642,\n        1208\n      ],\n      [\n        138,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 7\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        545,\n        1208\n      ],\n      [\n        97,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 8\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        425,\n        1208\n      ],\n      [\n        120,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 9\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        352,\n        1208\n      ],\n      [\n        73,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 10\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        255,\n        1208\n      ],\n      [\n        97,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 11\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        105,\n        1208\n      ],\n      [\n        150,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 12\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        99,\n        1208\n      ],\n      [\n        6,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 13\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1120,\n        1343\n      ],\n      [\n        72,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 14\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1019,\n        1343\n      ],\n      [\n        101,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 15\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        944,\n        1343\n      ],\n      [\n        75,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 16\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        764,\n        1343\n      ],\n      [\n        180,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 17\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        632,\n        1343\n      ],\n      [\n        132,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 18\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        583,\n        1343\n      ],\n      [\n        49,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 19\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        423,\n        1343\n      ],\n      [\n        160,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 20\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        313,\n        1343\n      ],\n      [\n        110,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 13,\n        \"sura\" : 2\n      },\n      \"word\" : 21\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        201,\n        1343\n      ],\n      [\n        112,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        99,\n        1343\n      ],\n      [\n        102,\n        134\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1077,\n        1477\n      ],\n      [\n        115,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        938,\n        1477\n      ],\n      [\n        139,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        833,\n        1477\n      ],\n      [\n        105,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        719,\n        1477\n      ],\n      [\n        114,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        626,\n        1477\n      ],\n      [\n        93,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 7\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        526,\n        1477\n      ],\n      [\n        100,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 8\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        459,\n        1477\n      ],\n      [\n        67,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 9\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        244,\n        1477\n      ],\n      [\n        215,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 10\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        151,\n        1477\n      ],\n      [\n        93,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 11\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        99,\n        1477\n      ],\n      [\n        52,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 12\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1063,\n        1610\n      ],\n      [\n        129,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 13\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        977,\n        1610\n      ],\n      [\n        86,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 14\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        897,\n        1610\n      ],\n      [\n        80,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 15\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        668,\n        1610\n      ],\n      [\n        229,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 16\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        559,\n        1610\n      ],\n      [\n        109,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 14,\n        \"sura\" : 2\n      },\n      \"word\" : 17\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        480,\n        1610\n      ],\n      [\n        79,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 15,\n        \"sura\" : 2\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        317,\n        1610\n      ],\n      [\n        163,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 15,\n        \"sura\" : 2\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        243,\n        1610\n      ],\n      [\n        74,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 15,\n        \"sura\" : 2\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        99,\n        1610\n      ],\n      [\n        144,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 15,\n        \"sura\" : 2\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1141,\n        1745\n      ],\n      [\n        51,\n        132\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 15,\n        \"sura\" : 2\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        967,\n        1745\n      ],\n      [\n        174,\n        132\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 15,\n        \"sura\" : 2\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        799,\n        1745\n      ],\n      [\n        168,\n        132\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 15,\n        \"sura\" : 2\n      },\n      \"word\" : 7\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        693,\n        1745\n      ],\n      [\n        106,\n        132\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 15,\n        \"sura\" : 2\n      },\n      \"word\" : 8\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        536,\n        1745\n      ],\n      [\n        157,\n        132\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 16,\n        \"sura\" : 2\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        425,\n        1745\n      ],\n      [\n        111,\n        132\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 16,\n        \"sura\" : 2\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        274,\n        1745\n      ],\n      [\n        151,\n        132\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 16,\n        \"sura\" : 2\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        99,\n        1745\n      ],\n      [\n        175,\n        132\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 16,\n        \"sura\" : 2\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1023,\n        1877\n      ],\n      [\n        169,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 16,\n        \"sura\" : 2\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        934,\n        1877\n      ],\n      [\n        89,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 16,\n        \"sura\" : 2\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        804,\n        1877\n      ],\n      [\n        130,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 16,\n        \"sura\" : 2\n      },\n      \"word\" : 7\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        617,\n        1877\n      ],\n      [\n        187,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 16,\n        \"sura\" : 2\n      },\n      \"word\" : 8\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        533,\n        1877\n      ],\n      [\n        84,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 16,\n        \"sura\" : 2\n      },\n      \"word\" : 9\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        439,\n        1877\n      ],\n      [\n        94,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 16,\n        \"sura\" : 2\n      },\n      \"word\" : 10\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        208,\n        1877\n      ],\n      [\n        231,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 16,\n        \"sura\" : 2\n      },\n      \"word\" : 11\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        99,\n        1877\n      ],\n      [\n        109,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 16,\n        \"sura\" : 2\n      },\n      \"word\" : 12\n    }\n  }\n]"
  },
  {
    "path": "Domain/ImageService/Tests/__Snapshots__/ImageDataServiceTests/testGettingImageAtPage604.2.json",
    "content": "[\n  {\n    \"frame\" : [\n      [\n        1144,\n        289\n      ],\n      [\n        62,\n        118\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 112\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1065,\n        289\n      ],\n      [\n        79,\n        118\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 112\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        985,\n        289\n      ],\n      [\n        80,\n        118\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 112\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        826,\n        289\n      ],\n      [\n        159,\n        118\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 112\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        717,\n        289\n      ],\n      [\n        109,\n        118\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 112\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        628,\n        289\n      ],\n      [\n        89,\n        118\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 112\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        406,\n        289\n      ],\n      [\n        222,\n        118\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 112\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        300,\n        289\n      ],\n      [\n        106,\n        118\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 112\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        237,\n        289\n      ],\n      [\n        63,\n        118\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 112\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        84,\n        289\n      ],\n      [\n        153,\n        118\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 112\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1098,\n        407\n      ],\n      [\n        108,\n        126\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 112\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        948,\n        407\n      ],\n      [\n        150,\n        126\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 112\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        838,\n        407\n      ],\n      [\n        110,\n        126\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 112\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        718,\n        407\n      ],\n      [\n        120,\n        126\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 112\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        590,\n        407\n      ],\n      [\n        128,\n        126\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 112\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        531,\n        407\n      ],\n      [\n        59,\n        126\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 112\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        345,\n        407\n      ],\n      [\n        186,\n        126\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 112\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        192,\n        407\n      ],\n      [\n        153,\n        126\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 112\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        84,\n        407\n      ],\n      [\n        108,\n        126\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 112\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1143,\n        822\n      ],\n      [\n        63,\n        124\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 113\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1027,\n        822\n      ],\n      [\n        116,\n        124\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 113\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        900,\n        822\n      ],\n      [\n        127,\n        124\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 113\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        748,\n        822\n      ],\n      [\n        152,\n        124\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 113\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        637,\n        822\n      ],\n      [\n        111,\n        124\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 113\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        552,\n        822\n      ],\n      [\n        85,\n        124\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 113\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        472,\n        822\n      ],\n      [\n        80,\n        124\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 113\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        434,\n        822\n      ],\n      [\n        38,\n        124\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 113\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        321,\n        822\n      ],\n      [\n        113,\n        124\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 113\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        212,\n        822\n      ],\n      [\n        109,\n        124\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 113\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        84,\n        822\n      ],\n      [\n        128,\n        124\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 113\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1122,\n        946\n      ],\n      [\n        84,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 113\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        981,\n        946\n      ],\n      [\n        141,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 113\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        909,\n        946\n      ],\n      [\n        72,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 113\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        774,\n        946\n      ],\n      [\n        135,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 113\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        661,\n        946\n      ],\n      [\n        113,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 113\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        536,\n        946\n      ],\n      [\n        125,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 113\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        417,\n        946\n      ],\n      [\n        119,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 113\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        189,\n        946\n      ],\n      [\n        228,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 113\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        84,\n        946\n      ],\n      [\n        105,\n        135\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 113\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        949,\n        1081\n      ],\n      [\n        257,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 113\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        842,\n        1081\n      ],\n      [\n        107,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 113\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        723,\n        1081\n      ],\n      [\n        119,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 113\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        615,\n        1081\n      ],\n      [\n        108,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 113\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        478,\n        1081\n      ],\n      [\n        137,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 113\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        418,\n        1081\n      ],\n      [\n        60,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 113\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        275,\n        1081\n      ],\n      [\n        143,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 113\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        84,\n        1081\n      ],\n      [\n        191,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 113\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1143,\n        1487\n      ],\n      [\n        63,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 114\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1029,\n        1487\n      ],\n      [\n        114,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 114\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        914,\n        1487\n      ],\n      [\n        115,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 114\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        755,\n        1487\n      ],\n      [\n        159,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 114\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        648,\n        1487\n      ],\n      [\n        107,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 1,\n        \"sura\" : 114\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        493,\n        1487\n      ],\n      [\n        155,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 114\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        325,\n        1487\n      ],\n      [\n        168,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 114\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        217,\n        1487\n      ],\n      [\n        108,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 2,\n        \"sura\" : 114\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        84,\n        1487\n      ],\n      [\n        133,\n        117\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 114\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        1041,\n        1604\n      ],\n      [\n        165,\n        140\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 114\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        931,\n        1604\n      ],\n      [\n        110,\n        140\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 3,\n        \"sura\" : 114\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        842,\n        1604\n      ],\n      [\n        89,\n        140\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 114\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        742,\n        1604\n      ],\n      [\n        100,\n        140\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 114\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        524,\n        1604\n      ],\n      [\n        218,\n        140\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 114\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        316,\n        1604\n      ],\n      [\n        208,\n        140\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 114\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        212,\n        1604\n      ],\n      [\n        104,\n        140\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 4,\n        \"sura\" : 114\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        84,\n        1604\n      ],\n      [\n        128,\n        140\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 114\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        849,\n        1744\n      ],\n      [\n        357,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 114\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        734,\n        1744\n      ],\n      [\n        115,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 114\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        575,\n        1744\n      ],\n      [\n        159,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 114\n      },\n      \"word\" : 4\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        347,\n        1744\n      ],\n      [\n        228,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 114\n      },\n      \"word\" : 5\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        84,\n        1744\n      ],\n      [\n        263,\n        133\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 5,\n        \"sura\" : 114\n      },\n      \"word\" : 6\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        875,\n        1877\n      ],\n      [\n        331,\n        113\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 114\n      },\n      \"word\" : 1\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        686,\n        1877\n      ],\n      [\n        189,\n        113\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 114\n      },\n      \"word\" : 2\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        447,\n        1877\n      ],\n      [\n        239,\n        113\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 114\n      },\n      \"word\" : 3\n    }\n  },\n  {\n    \"frame\" : [\n      [\n        84,\n        1877\n      ],\n      [\n        363,\n        113\n      ]\n    ],\n    \"word\" : {\n      \"verse\" : {\n        \"ayah\" : 6,\n        \"sura\" : 114\n      },\n      \"word\" : 4\n    }\n  }\n]"
  },
  {
    "path": "Domain/QuranAudioKit/Sources/AudioPlayer/GaplessAudioRequestBuilder.swift",
    "content": "//\n//  GaplessAudioRequestBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/28/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AudioTimingService\nimport QueuePlayer\nimport QuranAudio\nimport QuranKit\nimport QuranTextKit\nimport Utilities\n\nstruct GaplessAudioRequest: QuranAudioRequest {\n    let request: AudioRequest\n    let ayahs: [[AyahNumber]]\n    let reciter: Reciter\n\n    func getRequest() -> AudioRequest {\n        request\n    }\n\n    func getAyahNumberFrom(fileIndex: Int, frameIndex: Int) -> AyahNumber {\n        ayahs[fileIndex][frameIndex]\n    }\n\n    func getPlayerInfo(for fileIndex: Int) -> PlayerItemInfo {\n        PlayerItemInfo(\n            title: ayahs[fileIndex][0].sura.localizedName(),\n            artist: reciter.localizedName,\n            image: nil\n        )\n    }\n}\n\nstruct GaplessAudioRequestBuilder: QuranAudioRequestBuilder {\n    // MARK: Internal\n\n    let timingRetriever = ReciterTimingRetriever()\n\n    func buildRequest(\n        with reciter: Reciter,\n        from start: AyahNumber,\n        to end: AyahNumber,\n        frameRuns: Runs,\n        requestRuns: Runs\n    ) async throws -> QuranAudioRequest {\n        let range = try await timingRetriever.timing(for: reciter, from: start, to: end)\n        let surasPaths = urlsToPlay(reciter: reciter, suras: range.timings.keys)\n\n        var files: [AudioFile] = []\n        var ayahs: [[AyahNumber]] = []\n\n        for (path, sura) in surasPaths {\n            let suraTimings = range.timings[sura]!\n\n            var frames: [AudioFrame] = []\n            var fileAyahs: [AyahNumber] = []\n\n            for (offset, verse) in suraTimings.verses.enumerated() {\n                // start from 0 (beginning) if first ayah of the sura\n                let endTime = offset == suraTimings.verses.count - 1 ? suraTimings.endTime : nil\n\n                var startTimeSeconds = verse.time.seconds\n\n                // Do not include the basmalah when the first verse is repeated\n                if offset == 0 && verse.ayah.ayah == 1 && (requestRuns == .one || !ayahs.isEmpty) {\n                    startTimeSeconds = 0\n                }\n\n                let frame = AudioFrame(startTime: startTimeSeconds, endTime: endTime?.seconds)\n                frames.append(frame)\n                fileAyahs.append(verse.ayah)\n            }\n            files.append(AudioFile(url: path.url, frames: frames))\n            ayahs.append(fileAyahs)\n        }\n        let request = AudioRequest(files: files, endTime: range.endTime?.seconds, frameRuns: frameRuns, requestRuns: requestRuns)\n        let quranRequest = GaplessAudioRequest(request: request, ayahs: ayahs, reciter: reciter)\n        return quranRequest\n    }\n\n    // MARK: Private\n\n    private func urlsToPlay(reciter: Reciter, suras: some Collection<Sura>) -> [(path: RelativeFilePath, sura: Sura)] {\n        guard case AudioType.gapless = reciter.audioType else {\n            fatalError(\"Unsupported reciter type gapped. Only gapless reciters can be played here.\")\n        }\n\n        // loop over the files\n        var files: [(RelativeFilePath, Sura)] = []\n        for sura in suras.sorted() {\n            let localURL = reciter.localURL(sura: sura)\n            files.append((localURL, sura))\n        }\n        return files\n    }\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Sources/AudioPlayer/GappedAudioRequestBuilder.swift",
    "content": "//\n//  GappedAudioRequestBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/28/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport QueuePlayer\nimport QuranAudio\nimport QuranKit\nimport Utilities\n\nstruct GappedAudioRequest: QuranAudioRequest {\n    let request: AudioRequest\n    let ayahs: [AyahNumber]\n    let reciter: Reciter\n\n    func getRequest() -> AudioRequest {\n        request\n    }\n\n    func getAyahNumberFrom(fileIndex: Int, frameIndex: Int) -> AyahNumber {\n        ayahs[fileIndex]\n    }\n\n    func getPlayerInfo(for fileIndex: Int) -> PlayerItemInfo {\n        let ayah = ayahs[fileIndex]\n        return PlayerItemInfo(\n            title: ayah.localizedName,\n            artist: reciter.localizedName,\n            image: nil\n        )\n    }\n}\n\nfinal class GappedAudioRequestBuilder: QuranAudioRequestBuilder {\n    // MARK: Internal\n\n    func buildRequest(\n        with reciter: Reciter,\n        from start: AyahNumber,\n        to end: AyahNumber,\n        frameRuns: Runs,\n        requestRuns: Runs\n    ) async throws -> QuranAudioRequest {\n        let (urls, ayahs) = urlsToPlay(reciter: reciter, from: start, to: end, requestRuns: requestRuns)\n        let files = urls.map {\n            AudioFile(url: $0.url, frames: [AudioFrame(startTime: 0, endTime: nil)])\n        }\n        let request = AudioRequest(files: files, endTime: nil, frameRuns: frameRuns, requestRuns: requestRuns)\n        let quranRequest = GappedAudioRequest(request: request, ayahs: ayahs, reciter: reciter)\n        return quranRequest\n    }\n\n    // MARK: Private\n\n    private func urlsToPlay(reciter: Reciter, from start: AyahNumber, to end: AyahNumber, requestRuns: Runs) -> (urls: [RelativeFilePath], ayahs: [AyahNumber]) {\n        guard case AudioType.gapped = reciter.audioType else {\n            fatalError(\"Unsupported reciter type gapless. Only gapless reciters can be downloaded here.\")\n        }\n\n        var urls: [RelativeFilePath] = []\n        var ayahs: [AyahNumber] = []\n        let verses = start.array(to: end)\n        let surasDictionary = Dictionary(grouping: verses, by: { $0.sura })\n\n        for sura in surasDictionary.keys.sorted() {\n            let verses = surasDictionary[sura] ?? []\n\n            // add besm Allah for all except Al-Fatihah and At-Tawbah\n            if (requestRuns == .one || !ayahs.isEmpty) && sura.startsWithBesmAllah && verses[0] == sura.firstVerse {\n                urls.append(reciter.localURL(ayah: start.quran.firstVerse))\n                ayahs.append(verses[0])\n            }\n            for verse in verses {\n                urls.append(reciter.localURL(ayah: verse))\n                ayahs.append(verse)\n            }\n        }\n        return (urls, ayahs)\n    }\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Sources/AudioPlayer/QuranAudioPlayer.swift",
    "content": "//\n//  QuranAudioPlayer.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/28/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AVFoundation\nimport QueuePlayer\nimport QuranAudio\nimport QuranKit\nimport ReciterService\nimport VLogging\n\npublic struct QuranAudioPlayerActions: Sendable {\n    // MARK: Lifecycle\n\n    public init(\n        playbackEnded: @Sendable @MainActor @escaping () -> Void,\n        playbackPaused: @Sendable @MainActor @escaping () -> Void,\n        playbackResumed: @Sendable @MainActor @escaping () -> Void,\n        playing: @Sendable @MainActor @escaping (AyahNumber) -> Void\n    ) {\n        self.playbackEnded = playbackEnded\n        self.playbackPaused = playbackPaused\n        self.playbackResumed = playbackResumed\n        self.playing = playing\n    }\n\n    // MARK: Internal\n\n    let playbackEnded: @Sendable @MainActor () -> Void\n    let playbackPaused: @Sendable @MainActor () -> Void\n    let playbackResumed: @Sendable @MainActor () -> Void\n    let playing: @Sendable @MainActor (AyahNumber) -> Void\n}\n\n@MainActor\npublic class QuranAudioPlayer {\n    // MARK: Lifecycle\n\n    init(player: QueuingPlayer) {\n        self.player = player\n        unzipper = AudioUnzipper()\n    }\n\n    public convenience init() {\n        self.init(player: QueuePlayer())\n    }\n\n    // MARK: Public\n\n    public var actions: QuranAudioPlayerActions?\n\n    public func setActions(_ actions: QuranAudioPlayerActions) {\n        self.actions = actions\n    }\n\n    // MARK: - Playback Controls\n\n    public func pauseAudio() {\n        player.pause()\n    }\n\n    public func resumeAudio() {\n        player.resume()\n    }\n\n    public func stopAudio() {\n        player.stop()\n    }\n\n    public func stepForward() {\n        player.stepForward()\n    }\n\n    public func stepBackward() {\n        player.stepBackward()\n    }\n\n    public func setRate(_ rate: Float) {\n        player.setRate(rate)\n    }\n\n    // MARK: - Play\n\n    public func play(\n        reciter: Reciter,\n        rate: Float,\n        from start: AyahNumber,\n        to end: AyahNumber,\n        verseRuns: Runs,\n        listRuns: Runs\n    ) async throws {\n        let details: [String: Any] = [\n            \"startAyah\": start,\n            \"to\": end,\n            \"reciter\": reciter,\n            \"verseRuns\": verseRuns,\n            \"listRuns\": listRuns,\n        ]\n        logger.notice(\"Playing \\(details.map { \"\\($0): \\($1)\" }.joined(separator: \", \"))\")\n        try await unzipper.unzip(reciter: reciter)\n\n        let builder = getAudioRequestBuilder(for: reciter)\n        let audioRequest = try await builder.buildRequest(with: reciter, from: start, to: end, frameRuns: verseRuns, requestRuns: listRuns)\n        let request = audioRequest.getRequest()\n        willPlay(request)\n        self.audioRequest = audioRequest\n        player.actions = newPlayerActions()\n        player.play(request: request, rate: rate)\n    }\n\n    // MARK: Private\n\n    private let player: QueuingPlayer\n    private let unzipper: AudioUnzipper\n    private let nowPlaying = NowPlayingUpdater(center: .default())\n\n    private let gappedAudioRequestBuilder: QuranAudioRequestBuilder = GappedAudioRequestBuilder()\n    private let gaplessAudioRequestBuilder: QuranAudioRequestBuilder = GaplessAudioRequestBuilder()\n    private var audioRequest: QuranAudioRequest?\n\n    // MARK: - AudioPlayerActions\n\n    private func playbackEnded() {\n        nowPlaying.clear()\n        actions?.playbackEnded()\n        // not interested to get more notifications\n        player.actions = nil\n        audioRequest = nil\n    }\n\n    private func playbackRateChanged(rate: Float) {\n        nowPlaying.update(rate: rate)\n        if rate > 0.1 {\n            actions?.playbackResumed()\n        } else {\n            actions?.playbackPaused()\n        }\n    }\n\n    private func audioFrameChanged(fileIndex: Int, frameIndex: Int, playerItem: AVPlayerItem) {\n        guard let audioRequest else {\n            return\n        }\n\n        let info = audioRequest.getPlayerInfo(for: fileIndex)\n        nowPlaying.update(info: info)\n        nowPlaying.update(playingIndex: fileIndex)\n        nowPlaying.update(duration: playerItem.asset.duration.seconds)\n        nowPlaying.update(elapsedTime: playerItem.currentTime().seconds)\n\n        let ayah = audioRequest.getAyahNumberFrom(fileIndex: fileIndex, frameIndex: frameIndex)\n        actions?.playing(ayah)\n    }\n\n    private func willPlay(_ request: AudioRequest) {\n        nowPlaying.clear()\n        nowPlaying.update(count: request.files.count)\n    }\n\n    private func getAudioRequestBuilder(for reciter: Reciter) -> QuranAudioRequestBuilder {\n        switch reciter.audioType {\n        case .gapless: return gaplessAudioRequestBuilder\n        case .gapped: return gappedAudioRequestBuilder\n        }\n    }\n\n    private func newPlayerActions() -> QueuePlayerActions {\n        QueuePlayerActions(\n            playbackEnded: { [weak self] in\n                self?.playbackEnded()\n            },\n            playbackRateChanged: { [weak self] rate in\n                self?.playbackRateChanged(rate: rate)\n            },\n            audioFrameChanged: { [weak self] in\n                self?.audioFrameChanged(fileIndex: $0, frameIndex: $1, playerItem: $2)\n            }\n        )\n    }\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Sources/AudioPlayer/QuranAudioRequestBuilder.swift",
    "content": "//\n//  QuranAudioRequestBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/28/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport QueuePlayer\nimport QuranAudio\nimport QuranKit\n\n// TODO: Convert to struct.\nprotocol QuranAudioRequest: Sendable {\n    func getRequest() -> AudioRequest\n    func getAyahNumberFrom(fileIndex: Int, frameIndex: Int) -> AyahNumber\n    func getPlayerInfo(for fileIndex: Int) -> PlayerItemInfo\n}\n\nprotocol QuranAudioRequestBuilder {\n    func buildRequest(\n        with reciter: Reciter,\n        from start: AyahNumber,\n        to end: AyahNumber,\n        frameRuns: Runs,\n        requestRuns: Runs\n    ) async throws -> QuranAudioRequest\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Sources/Dependencies/QueuingPlayer.swift",
    "content": "//\n//  QueuingPlayer.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-02-08.\n//\n\nimport QueuePlayer\n\n@MainActor\nprotocol QueuingPlayer: AnyObject {\n    var actions: QueuePlayerActions? { get set }\n\n    func play(request: AudioRequest, rate: Float)\n    func pause()\n    func resume()\n    func stop()\n    func stepForward()\n    func stepBackward()\n    func setRate(_ rate: Float)\n}\n\nextension QueuePlayer: QueuingPlayer {\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Sources/Downloads/Download+Types.swift",
    "content": "//\n//  Download+Types.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 3/1/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport BatchDownloader\nimport QuranAudio\n\nextension DownloadRequest {\n    var isAudio: Bool {\n        Reciter.audioFiles.isParent(of: destination)\n    }\n}\n\nextension DownloadBatchResponse {\n    nonisolated var isAudio: Bool {\n        requests.contains(where: \\.isAudio)\n    }\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Sources/Downloads/QuranAudioDownloader.swift",
    "content": "//\n//  QuranAudioDownloader.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/21/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport BatchDownloader\nimport Foundation\nimport QuranAudio\nimport QuranKit\nimport SystemDependencies\nimport Utilities\n\npublic struct QuranAudioDownloader: Sendable {\n    // MARK: Lifecycle\n\n    public init(baseURL: URL, downloader: DownloadManager, fileSystem: FileSystem = DefaultFileSystem()) {\n        self.baseURL = baseURL\n        self.downloader = downloader\n        self.fileSystem = fileSystem\n    }\n\n    // MARK: Public\n\n    public func downloaded(reciter: Reciter, from start: AyahNumber, to end: AyahNumber) async -> Bool {\n        let files = filesForReciter(reciter, from: start, to: end)\n        return files.allSatisfy { fileSystem.fileExists(at: $0.destination) }\n    }\n\n    public func download(from start: AyahNumber, to end: AyahNumber, reciter: Reciter) async throws -> DownloadBatchResponse {\n        // get downloads\n        let files = reciter\n            .audioFiles(baseURL: baseURL, from: start, to: end)\n            .filter { !$0.local.isReachable }\n            .map { DownloadRequest(url: $0.remote, destination: $0.local) }\n        let request = DownloadBatchRequest(requests: files)\n        // create downloads\n        return try await downloader.download(request)\n    }\n\n    public func cancelAllAudioDownloads() async {\n        let downloads = await runningAudioDownloads()\n        await downloader.cancel(downloads: downloads)\n    }\n\n    public func runningAudioDownloads() async -> [DownloadBatchResponse] {\n        let batches = await downloader.getOnGoingDownloads()\n        let responses = batches.filter(\\.isAudio)\n        return responses\n    }\n\n    // MARK: Internal\n\n    let downloader: DownloadManager\n\n    // MARK: Private\n\n    private let fileSystem: FileSystem\n    private let baseURL: URL\n\n    private func filesForReciter(_ reciter: Reciter, from start: AyahNumber, to end: AyahNumber) -> [DownloadRequest] {\n        reciter.audioFiles(baseURL: baseURL, from: start, to: end)\n            .map {\n                DownloadRequest(url: $0.remote, destination: $0.local)\n            }\n    }\n}\n\nextension Set<DownloadBatchResponse> {\n    public func firstMatches(_ reciter: Reciter) -> DownloadBatchResponse? {\n        for batch in self {\n            if let download = batch.requests.first {\n                if reciter.matches(download) {\n                    return batch\n                }\n            }\n        }\n        return nil\n    }\n}\n\nextension [Reciter] {\n    public func firstMatches(_ batch: DownloadBatchResponse) -> Reciter? {\n        if let download = batch.requests.first {\n            return first { $0.matches(download) }\n        }\n        return nil\n    }\n}\n\nextension Reciter {\n    func matches(_ request: DownloadRequest) -> Bool {\n        localFolder() == request.reciterPath\n    }\n}\n\nprivate extension DownloadRequest {\n    var reciterPath: RelativeFilePath {\n        destination.deletingLastPathComponent()\n    }\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Sources/Preferences/AudioEnd+Localization.swift",
    "content": "//\n//  AudioEnd+Localization.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-11.\n//\n\nimport Localization\nimport QuranAudio\n\nextension AudioEnd {\n    public var name: String {\n        switch self {\n        case .juz:\n            return lAndroid(\"quran_juz2\")\n        case .sura:\n            return l(\"surah\")\n        case .page:\n            return lAndroid(\"quran_page\")\n        case .quran:\n            return l(\"quran_alquran\")\n        }\n    }\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Sources/Preferences/AudioPreferences.swift",
    "content": "//\n//  AudioPreferences.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-14.\n//\n\nimport Preferences\nimport QuranAudio\n\npublic class AudioPreferences {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Public\n\n    public static let shared = AudioPreferences()\n\n    @TransformedPreference(audioEndKey, transformer: .rawRepresentable(defaultValue: .juz))\n    public var audioEnd: AudioEnd\n\n    @Preference(audioPlaybackRateKey)\n    public var playbackRate: Float\n\n    // MARK: Private\n\n    private static let audioEndKey = PreferenceKey<Int>(key: \"audioEndKey\", defaultValue: AudioEnd.juz.rawValue)\n    private static let audioPlaybackRateKey = PreferenceKey<Float>(key: \"audioPlaybackRate\", defaultValue: 1.0)\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Sources/Preferences/PreferencesLastAyahFinder.swift",
    "content": "//\n//  PreferencesLastAyahFinder.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-04-16.\n//\n\nimport QuranKit\n\npublic struct PreferencesLastAyahFinder: LastAyahFinder {\n    // MARK: Lifecycle\n\n    private init() {\n    }\n\n    // MARK: Public\n\n    public static let shared = PreferencesLastAyahFinder()\n\n    public func findLastAyah(startAyah: AyahNumber) -> AyahNumber {\n        let pageLastVerse = pageFinder.findLastAyah(startAyah: startAyah)\n        let lastVerse = finder.findLastAyah(startAyah: startAyah)\n        return max(lastVerse, pageLastVerse)\n    }\n\n    // MARK: Private\n\n    private let preferences = AudioPreferences.shared\n\n    private var finder: LastAyahFinder {\n        switch preferences.audioEnd {\n        case .juz:\n            return JuzBasedLastAyahFinder()\n        case .sura:\n            return SuraBasedLastAyahFinder()\n        case .page:\n            return pageFinder\n        case .quran:\n            return QuranBasedLastAyahFinder()\n        }\n    }\n\n    private var pageFinder: LastAyahFinder {\n        PageBasedLastAyahFinder()\n    }\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/AudioRequest+Extension.swift",
    "content": "//\n//  AudioRequest+Extension.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-02-10.\n//\n\nimport Foundation\n@testable import QueuePlayer\n\nstruct EncodableAudioRequest: Encodable {\n    // MARK: Lifecycle\n\n    init(request: AudioRequest) {\n        self.request = request\n    }\n\n    // MARK: Internal\n\n    enum CodingKeys: String, CodingKey {\n        case files\n        case endTime\n        case frameRuns\n        case requestRuns\n    }\n\n    func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        try container.encode(request.files.map(EncodableAudioFile.init), forKey: .files)\n        try container.encode(request.endTime, forKey: .endTime)\n        try container.encode(EncodableRuns(runs: request.frameRuns), forKey: .frameRuns)\n        try container.encode(EncodableRuns(runs: request.requestRuns), forKey: .requestRuns)\n    }\n\n    // MARK: Private\n\n    private let request: AudioRequest\n}\n\nprivate struct EncodableAudioFile: Encodable {\n    // MARK: Lifecycle\n\n    init(file: AudioFile) {\n        self.file = file\n    }\n\n    // MARK: Internal\n\n    enum CodingKeys: String, CodingKey {\n        case frames\n        case url\n    }\n\n    func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        try container.encode(file.frames.map(EncodableAudioFrame.init), forKey: .frames)\n        try container.encode(file.url.path.replacingOccurrences(of: FileManager.documentsPath, with: \"\"), forKey: .url)\n    }\n\n    // MARK: Private\n\n    private let file: AudioFile\n}\n\nprivate struct EncodableAudioFrame: Encodable {\n    // MARK: Lifecycle\n\n    init(frame: AudioFrame) {\n        self.frame = frame\n    }\n\n    // MARK: Internal\n\n    enum CodingKeys: String, CodingKey {\n        case startTime\n        case endTime\n    }\n\n    func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        try container.encode(frame.startTime, forKey: .startTime)\n        try container.encode(frame.endTime, forKey: .endTime)\n    }\n\n    // MARK: Private\n\n    private let frame: AudioFrame\n}\n\nprivate struct EncodableRuns: Encodable {\n    // MARK: Lifecycle\n\n    init(runs: Runs) {\n        self.runs = runs\n    }\n\n    // MARK: Internal\n\n    func encode(to encoder: Encoder) throws {\n        var container = encoder.singleValueContainer()\n        try container.encode(runs.maxRuns)\n    }\n\n    // MARK: Private\n\n    private let runs: Runs\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/GaplessAudioRequestBuilderTests.swift",
    "content": "//\n//  GaplessAudioRequestBuilderTests.swift\n//\n//\n//  Created by Mohammad Abdurraafay on 2023-02-12.\n//\n\nimport QuranAudio\nimport QuranKit\nimport ReciterServiceFake\nimport XCTest\n@testable import QuranAudioKit\n\nclass GaplessAudioRequestBuilderTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUpWithError() throws {\n        try reciter.prepareGaplessReciterForTests(unZip: true)\n\n        audioRequestBuilder = GaplessAudioRequestBuilder()\n    }\n\n    override func tearDown() async throws {\n        Reciter.cleanUpAudio()\n    }\n\n    func testAudioFrameStartingFromZeroSecondsWhenThePlaybackIsNotRepeated() async throws {\n        let from = try XCTUnwrap(AyahNumber(sura: quran.suras[1], ayah: 1))\n        let to = try XCTUnwrap(AyahNumber(sura: quran.suras[1], ayah: 2))\n\n        let audioRequest = try await audioRequestBuilder.buildRequest(\n            with: reciter,\n            from: from,\n            to: to,\n            frameRuns: .one,\n            requestRuns: .one\n        )\n        let firstFrame = try XCTUnwrap(audioRequest.getRequest().files.first?.frames.first)\n        XCTAssertEqual(firstFrame.startTime, .zero)\n    }\n\n    func testAudioFrameIsNotStartingFromZeroSecondsWhenThePlaybackIsRepeated() async throws {\n        let from = try XCTUnwrap(AyahNumber(sura: quran.suras[1], ayah: 1))\n        let to = try XCTUnwrap(AyahNumber(sura: quran.suras[1], ayah: 2))\n\n        let audioRequest = try await audioRequestBuilder.buildRequest(\n            with: reciter,\n            from: from,\n            to: to,\n            frameRuns: .one,\n            requestRuns: .indefinite\n        )\n        let firstFrame = try XCTUnwrap(audioRequest.getRequest().files.first?.frames.first)\n        XCTAssertNotEqual(firstFrame.startTime, .zero)\n    }\n\n    // MARK: Private\n\n    private var audioRequestBuilder: QuranAudioRequestBuilder!\n    private var reciter = Reciter.gaplessReciter\n    private let quran = Quran.hafsMadani1405\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/GappedAudioRequestBuilderTests.swift",
    "content": "//\n//  GappedAudioRequestBuilderTests.swift\n//\n//\n//  Created by Mohammad Abdurraafay on 2023-02-11.\n//\n\nimport Foundation\nimport QuranAudio\nimport QuranKit\nimport XCTest\n@testable import QuranAudioKit\n\nclass GappedAudioRequestBuilderTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUpWithError() throws {\n        reciter = .gappedReciter\n        audioRequestBuilder = GappedAudioRequestBuilder()\n    }\n\n    override func tearDown() async throws {\n        audioRequestBuilder = nil\n        reciter = nil\n    }\n\n    func testAudioRequestContainsBismillahWhenThePlaybackIsNotRepeated() async throws {\n        let from = try XCTUnwrap(AyahNumber(sura: quran.suras[1], ayah: quran.suras[1].firstVerse.ayah))\n        let to = try XCTUnwrap(AyahNumber(sura: quran.suras[1], ayah: quran.suras[1].firstVerse.ayah))\n\n        let request = try await audioRequestBuilder.buildRequest(\n            with: reciter,\n            from: from,\n            to: to,\n            frameRuns: .one,\n            requestRuns: .one\n        )\n        let audioRequest = try XCTUnwrap(request as? GappedAudioRequest).request\n        let bismillahFile = audioRequest.files.first { audioFile in\n            audioFile.url.lastPathComponent == \"001001.mp3\"\n        }\n        XCTAssertNotNil(bismillahFile)\n    }\n\n    func testAudioRequestDoesNotContainsBismillahWhenThePlaybackIsRepeated() async throws {\n        let from = try XCTUnwrap(AyahNumber(sura: quran.suras[1], ayah: quran.suras[1].firstVerse.ayah))\n        let to = try XCTUnwrap(AyahNumber(sura: quran.suras[1], ayah: quran.suras[1].firstVerse.ayah))\n\n        let request = try await audioRequestBuilder.buildRequest(\n            with: reciter,\n            from: from,\n            to: to,\n            frameRuns: .one,\n            requestRuns: .indefinite\n        )\n        let audioRequest = try XCTUnwrap(request as? GappedAudioRequest).request\n        let bismillahFile = audioRequest.files.first { audioFile in\n            audioFile.url.lastPathComponent == \"001001.mp3\"\n        }\n        XCTAssertNil(bismillahFile)\n    }\n\n    func testAudioRequestContainsBismillahIfTheRepeatIsInContinuationFromPreviousSura() async throws {\n        let from = try XCTUnwrap(AyahNumber(sura: quran.firstSura, ayah: quran.firstSura.lastVerse.ayah))\n        let to = try XCTUnwrap(AyahNumber(sura: quran.suras[1], ayah: quran.suras[1].firstVerse.ayah))\n\n        let request = try await audioRequestBuilder.buildRequest(\n            with: reciter,\n            from: from,\n            to: to,\n            frameRuns: .one,\n            requestRuns: .indefinite\n        )\n        let audioRequest = try XCTUnwrap(request as? GappedAudioRequest).request\n        let bismillahFile = audioRequest.files.first { audioFile in\n            audioFile.url.lastPathComponent == \"001001.mp3\"\n        }\n        XCTAssertNotNil(bismillahFile)\n    }\n\n    // MARK: Private\n\n    private var audioRequestBuilder: QuranAudioRequestBuilder!\n    private var reciter: Reciter!\n    private let quran = Quran.hafsMadani1405\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/QueuePlayerFake.swift",
    "content": "//\n//  QueuePlayerFake.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-02-08.\n//\n\nimport QueuePlayer\n@testable import QuranAudioKit\n\n@MainActor\nclass QueuePlayerFake: QueuingPlayer {\n    // MARK: Lifecycle\n\n    nonisolated init() {\n    }\n\n    // MARK: Internal\n\n    enum PlayingState: Equatable, Encodable {\n        case playing(AudioRequest)\n        case paused(AudioRequest)\n        case stopped\n\n        // MARK: Internal\n\n        var isPaused: Bool {\n            switch self {\n            case .paused: return true\n            default: return false\n            }\n        }\n\n        var isPlaying: Bool {\n            switch self {\n            case .playing: return true\n            default: return false\n            }\n        }\n\n        var isStopped: Bool {\n            switch self {\n            case .stopped: return true\n            default: return false\n            }\n        }\n    }\n\n    var actions: QueuePlayerActions?\n\n    var state: PlayingState = .stopped\n    var location = 0\n\n    func play(request: AudioRequest, rate: Float) {\n        state = .playing(request)\n        location = 0\n    }\n\n    func pause() {\n        if case .playing(let request) = state {\n            state = .paused(request)\n        }\n    }\n\n    func resume() {\n        if case .paused(let request) = state {\n            state = .playing(request)\n        }\n    }\n\n    func stop() {\n        state = .stopped\n    }\n\n    func stepForward() {\n        location += 1\n    }\n\n    func stepBackward() {\n        location -= 1\n    }\n\n    func setRate(_ rate: Float) {\n    }\n}\n\nextension QueuePlayerFake.PlayingState {\n    private enum CaseCodingKeys: String, CodingKey {\n        case playing\n        case paused\n        case stopped\n    }\n\n    private enum AssociatedValueCodingKeys: String, CodingKey {\n        case _0\n    }\n\n    func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CaseCodingKeys.self)\n        switch self {\n        case .playing(let request):\n            var nested = container.nestedContainer(keyedBy: AssociatedValueCodingKeys.self, forKey: .playing)\n            try nested.encode(EncodableAudioRequest(request: request), forKey: ._0)\n        case .paused(let request):\n            var nested = container.nestedContainer(keyedBy: AssociatedValueCodingKeys.self, forKey: .paused)\n            try nested.encode(EncodableAudioRequest(request: request), forKey: ._0)\n        case .stopped:\n            _ = container.nestedContainer(keyedBy: AssociatedValueCodingKeys.self, forKey: .stopped)\n        }\n    }\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/QuranAudioDownloaderTests.swift",
    "content": "//\n//  QuranAudioDownloaderTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-06.\n//\n\nimport AsyncUtilitiesForTesting\nimport BatchDownloaderFake\nimport NetworkSupportFake\nimport QuranAudio\nimport QuranKit\nimport SystemDependenciesFake\nimport Utilities\nimport XCTest\n@testable import BatchDownloader\n@testable import QuranAudioKit\n\nclass QuranAudioDownloaderTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUp() async throws {\n        fileSystem = FileSystemFake()\n        testContext = BatchDownloaderFake.makeContext()\n        (batchDownloader, session) = await testContext.makeDownloader()\n        downloader = QuranAudioDownloader(\n            baseURL: Self.baseURL,\n            downloader: batchDownloader,\n            fileSystem: fileSystem\n        )\n    }\n\n    override func tearDownWithError() throws {\n        testContext.tearDown()\n        testContext = nil\n        Reciter.cleanUpAudio()\n        batchDownloader = nil\n        downloader = nil\n        session = nil\n    }\n\n    // MARK: - Downloading\n\n    func testDownloadGaplessReciter_1Sura_zip() async throws {\n        let reciter = gaplessReciter\n        let start = suras[0].firstVerse\n        let end = suras[3].lastVerse\n\n        let response = try await downloader.download(from: start, to: end, reciter: reciter)\n        let suraPaths = start.sura.array(to: end.sura).map { suraRemoteURL($0, reciter: reciter) }\n        XCTAssertEqual(Set(response.urls), Set([try databaseRemoteURL(reciter)] + suraPaths))\n    }\n\n    func testDownloadGaplessReciter_allSuras_noZip() async throws {\n        let reciter = gaplessReciter\n        try reciter.prepareGaplessReciterForTests()\n        let start = quran.firstVerse\n        let end = quran.lastVerse\n\n        let response = try await downloader.download(from: start, to: end, reciter: reciter)\n\n        let suraPaths = start.sura.array(to: end.sura).map { suraRemoteURL($0, reciter: reciter) }\n        XCTAssertEqual(Set(response.urls), Set(suraPaths))\n    }\n\n    func test_download_gappedReciter_firstSura() async throws {\n        let reciter = gappedReciter\n        let start = suras[0].firstVerse\n        let end = suras[0].lastVerse\n\n        let response = try await downloader.download(from: start, to: end, reciter: reciter)\n\n        let ayahPaths = start.array(to: end).map { ayahRemoteURL($0, reciter: reciter) }\n        XCTAssertEqual(Set(response.urls), Set(ayahPaths))\n    }\n\n    func test_download_gappedReciter_allVerses() async throws {\n        let reciter = gappedReciter\n        let start = quran.firstVerse\n        let end = quran.lastVerse\n\n        let response = try await downloader.download(from: start, to: end, reciter: reciter)\n\n        let ayahPaths = start.array(to: end).map { ayahRemoteURL($0, reciter: reciter) }\n        XCTAssertEqual(Set(response.urls), Set(ayahPaths))\n    }\n\n    func test_download_gappedReciter_fewMiddleVerses() async throws {\n        let reciter = gappedReciter\n        let start = quran.suras[1].verses[2]\n        let end = quran.suras[1].verses[5]\n\n        let response = try await downloader.download(from: start, to: end, reciter: reciter)\n\n        let ayahPaths = start.array(to: end).map { ayahRemoteURL($0, reciter: reciter) }\n        let firstVersePath = ayahRemoteURL(quran.firstVerse, reciter: reciter)\n        XCTAssertEqual(Set(response.urls), Set(ayahPaths + [firstVersePath]))\n    }\n\n    // MARK: - downloaded\n\n    func test_downloaded_gaplessReciter() async {\n        let reciter = gaplessReciter\n        let start = suras[0].firstVerse\n        let end = suras[3].lastVerse\n        let suraPaths = start.sura.array(to: end.sura).map { suraLocalURL($0, reciter: reciter) }\n        fileSystem.files = Set([reciter.gaplessDatabaseZipPath.url] + suraPaths)\n\n        let downloaded = await downloader.downloaded(reciter: reciter, from: start, to: end)\n        XCTAssertTrue(downloaded)\n\n        // Try without the database file.\n        fileSystem.files = Set(suraPaths)\n        let downloaded2 = await downloader.downloaded(reciter: reciter, from: start, to: end)\n        XCTAssertFalse(downloaded2)\n    }\n\n    func test_downloaded_gappedReciter() async {\n        let reciter = gappedReciter\n        let start = suras[0].firstVerse\n        let end = suras[0].lastVerse\n        let ayahPaths = start.array(to: end).map { ayahLocalURL($0, reciter: reciter) }\n        fileSystem.files = Set(ayahPaths)\n\n        let downloaded = await downloader.downloaded(reciter: reciter, from: start, to: end)\n        XCTAssertTrue(downloaded)\n\n        // Try without any files.\n        fileSystem.files = []\n        let downloaded2 = await downloader.downloaded(reciter: reciter, from: start, to: end)\n        XCTAssertFalse(downloaded2)\n    }\n\n    // MARK: - runningAudioDownloads\n\n    func test_runningAudioDownloads_empty() async {\n        let downloads = await downloader.runningAudioDownloads()\n        XCTAssertEqual(downloads, [])\n    }\n\n    func test_runningAudioDownloads_downloading() async throws {\n        let start = suras[0].firstVerse\n        let end = suras[0].lastVerse\n\n        let gappedResponse = try await downloader.download(from: start, to: end, reciter: gappedReciter)\n        let gaplessResponse = try await downloader.download(from: start, to: end, reciter: gaplessReciter)\n\n        let downloads = await downloader.runningAudioDownloads()\n        XCTAssertEqual(Set(downloads), Set([gappedResponse, gaplessResponse]))\n    }\n\n    func test_download_matching() async throws {\n        let start = suras[0].firstVerse\n        let end = suras[0].lastVerse\n\n        let gappedResponse = try await downloader.download(from: start, to: end, reciter: gappedReciter)\n        let gaplessResponse = try await downloader.download(from: start, to: end, reciter: gaplessReciter)\n        let downloads = Set(await downloader.runningAudioDownloads())\n        let reciters = [gappedReciter, gaplessReciter]\n\n        XCTAssertEqual(downloads.firstMatches(gappedReciter), gappedResponse)\n        XCTAssertEqual(downloads.firstMatches(gaplessReciter), gaplessResponse)\n        XCTAssertEqual(reciters.firstMatches(gappedResponse), gappedReciter)\n        XCTAssertEqual(reciters.firstMatches(gaplessResponse), gaplessReciter)\n    }\n\n    // MARK: - cancelAllAudioDownloads\n\n    func test_cancelAllAudioDownloads() async throws {\n        let start = suras[0].firstVerse\n        let end = suras[0].lastVerse\n\n        _ = try await downloader.download(from: start, to: end, reciter: gappedReciter)\n        _ = try await downloader.download(from: start, to: end, reciter: gaplessReciter)\n\n        await downloader.cancelAllAudioDownloads()\n        await Task.megaYield()\n\n        let downloads = await downloader.runningAudioDownloads()\n        XCTAssertEqual(downloads, [])\n    }\n\n    // MARK: Private\n\n    private static let baseURL = URL(validURL: \"http://example.com\")\n\n    private var downloader: QuranAudioDownloader!\n    private var batchDownloader: DownloadManager!\n    private var session: NetworkSessionFake!\n    private var fileSystem: FileSystemFake!\n    private var testContext: BatchDownloaderTestContext!\n\n    private let quran = Quran.hafsMadani1405\n    private let suras = Quran.hafsMadani1405.suras\n\n    private let request = DownloadRequest(\n        url: baseURL.appendingPathComponent(\"mishari_alafasy/001.mp3\"),\n        destination: RelativeFilePath(\"audio_files/mishari_alafasy/001.mp3\", isDirectory: false)\n    )\n\n    private let gappedReciter: Reciter = .gappedReciter\n    private let gaplessReciter: Reciter = .gaplessReciter\n\n    // MARK: - Helpers\n\n    private func databaseRemoteURL(_ reciter: Reciter) throws -> URL {\n        try XCTUnwrap(reciter.databaseRemoteURL(baseURL: Self.baseURL))\n    }\n\n    private func suraRemoteURL(_ sura: Sura, reciter: Reciter) -> URL {\n        reciter.audioURL.appendingPathComponent(sura.suraNumber.as3DigitString() + \".mp3\")\n    }\n\n    private func suraLocalURL(_ sura: Sura, reciter: Reciter) -> URL {\n        reciter.localFolder().appendingPathComponent(sura.suraNumber.as3DigitString() + \".mp3\", isDirectory: false).url\n    }\n\n    private func ayahRemoteURL(_ ayah: AyahNumber, reciter: Reciter) -> URL {\n        reciter.audioURL.appendingPathComponent(ayah.sura.suraNumber.as3DigitString() + ayah.ayah.as3DigitString() + \".mp3\")\n    }\n\n    private func ayahLocalURL(_ ayah: AyahNumber, reciter: Reciter) -> URL {\n        reciter.localFolder().appendingPathComponent(ayah.sura.suraNumber.as3DigitString() + ayah.ayah.as3DigitString() + \".mp3\", isDirectory: false).url\n    }\n}\n\nprivate extension DownloadBatchResponse {\n    nonisolated var urls: [URL?] {\n        requests.map(\\.request.url)\n    }\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/QuranAudioPlayerDelegateClosures.swift",
    "content": "//\n//  QuranAudioPlayerDelegateClosures.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-02-08.\n//\n\nimport Locking\nimport QuranKit\n@testable import QuranAudioKit\n\n@MainActor\nclass QuranAudioPlayerDelegateClosures {\n    // MARK: Lifecycle\n\n    nonisolated init() {\n    }\n\n    // MARK: Internal\n\n    enum Event: Equatable {\n        case onPlaybackPaused\n        case onPlaybackResumed\n        case onPlaying(AyahNumber)\n        case onPlaybackEnded\n    }\n\n    var onPlaybackPausedBlock: (() -> Void)?\n    var onPlaybackResumedBlock: (() -> Void)?\n    var onPlayingBlock: (() -> Void)?\n    var onPlaybackEndedBlock: (() -> Void)?\n\n    var eventsDiffSinceLastCalled: [Event] {\n        events.sync { value in\n            let lastValue = value\n            // clear the value\n            value = []\n            return lastValue\n        }\n    }\n\n    func makeActions() -> QuranAudioPlayerActions {\n        QuranAudioPlayerActions(\n            playbackEnded: { [weak self] in self?.onPlaybackEnded() },\n            playbackPaused: { [weak self] in self?.onPlaybackPaused() },\n            playbackResumed: { [weak self] in self?.onPlaybackResumed() },\n            playing: { [weak self] in self?.onPlaying(ayah: $0) }\n        )\n    }\n\n    func onPlaybackPaused() {\n        events.sync { $0.append(.onPlaybackPaused) }\n        onPlaybackPausedBlock?()\n    }\n\n    func onPlaybackResumed() {\n        events.sync { $0.append(.onPlaybackResumed) }\n        onPlaybackResumedBlock?()\n    }\n\n    func onPlaying(ayah: AyahNumber) {\n        events.sync { $0.append(.onPlaying(ayah)) }\n        onPlayingBlock?()\n    }\n\n    func onPlaybackEnded() {\n        events.sync { $0.append(.onPlaybackEnded) }\n        onPlaybackEndedBlock?()\n    }\n\n    // MARK: Private\n\n    private var events: Protected<[Event]> = Protected([])\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/QuranAudioPlayerTests.swift",
    "content": "//\n//  QuranAudioPlayerTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-02-08.\n//\n\nimport AVFoundation\nimport QuranAudio\nimport QuranKit\nimport SnapshotTesting\nimport XCTest\n@testable import QueuePlayer\n@testable import QuranAudioKit\n\nclass QuranAudioPlayerTests: XCTestCase {\n    // MARK: Internal\n\n    @MainActor\n    override func setUp() async throws {\n        queuePlayer = QueuePlayerFake()\n        delegate = QuranAudioPlayerDelegateClosures()\n\n        player = QuranAudioPlayer(player: queuePlayer)\n        player.setActions(delegate.makeActions())\n    }\n\n    @MainActor\n    override func tearDownWithError() throws {\n        Reciter.cleanUpAudio()\n    }\n\n    func testPlayingDownloadedGaplessReciter1FullSura() async throws {\n        try await runDownloadedGaplessTestCase(\n            from: suras[0].firstVerse,\n            to: suras[0].lastVerse,\n            files: [\"001.mp3\"]\n        )\n    }\n\n    func testPlayingDownloadedGaplessReciter1SuraEndsEarly() async throws {\n        try await runDownloadedGaplessTestCase(\n            from: suras[0].verses[1],\n            to: suras[0].verses[4],\n            files: [\"001.mp3\"]\n        )\n    }\n\n    func testPlayingDownloadedGaplessReciter3FullSura() async throws {\n        try await runDownloadedGaplessTestCase(\n            from: suras[111].firstVerse,\n            to: suras[113].lastVerse,\n            files: [\"112.mp3\",\n                    \"113.mp3\",\n                    \"114.mp3\"]\n        )\n    }\n\n    func testPlayingDownloadedGaplessReciter2Suras1stSuraHasEndTimestamp() async throws {\n        try await runDownloadedGaplessTestCase(\n            from: suras[76].verses[48],\n            to: suras[77].verses[2],\n            files: [\"077.mp3\",\n                    \"078.mp3\"]\n        )\n    }\n\n    func testPlayingDownloadedGaplessReciter1SurasHasEndTimestamp() async throws {\n        try await runDownloadedGaplessTestCase(\n            from: suras[76].verses[48],\n            to: suras[76].lastVerse,\n            files: [\"077.mp3\"]\n        )\n    }\n\n    func testPlayingDownloadedGaplessReciter1SurasHasEndTimestampStopBeforeEnd() async throws {\n        try await runDownloadedGaplessTestCase(\n            from: suras[76].verses[48],\n            to: suras[76].verses[48],\n            files: [\"077.mp3\"]\n        )\n    }\n\n    func testPlayingDownloadedGappedReciter1FullSura() async throws {\n        try await runDownloadedGappedTestCase(\n            from: suras[0].firstVerse,\n            to: suras[0].lastVerse,\n            files: [\n                \"001001.mp3\",\n                \"001002.mp3\",\n                \"001003.mp3\",\n                \"001004.mp3\",\n                \"001005.mp3\",\n                \"001006.mp3\",\n                \"001007.mp3\",\n            ]\n        )\n    }\n\n    func testPlayingDownloadedGappedReciter1SuraEndsEarly() async throws {\n        try await runDownloadedGappedTestCase(\n            from: suras[0].verses[1],\n            to: suras[0].verses[4],\n            files: [\n                \"001001.mp3\", // always downloads besmAllah\n                \"001002.mp3\",\n                \"001003.mp3\",\n                \"001004.mp3\",\n                \"001005.mp3\",\n            ]\n        )\n    }\n\n    func testPlayingDownloadedGappedReciter3FullSura() async throws {\n        try await runDownloadedGappedTestCase(\n            from: suras[111].firstVerse,\n            to: suras[113].lastVerse,\n            files: [\n                \"001001.mp3\", // always downloads besmAllah\n                \"112001.mp3\",\n                \"112002.mp3\",\n                \"112003.mp3\",\n                \"112004.mp3\",\n                \"113001.mp3\",\n                \"113002.mp3\",\n                \"113003.mp3\",\n                \"113004.mp3\",\n                \"113005.mp3\",\n                \"114001.mp3\",\n                \"114002.mp3\",\n                \"114003.mp3\",\n                \"114004.mp3\",\n                \"114005.mp3\",\n                \"114006.mp3\",\n            ]\n        )\n    }\n\n    func testPlayingDownloadedGappedReciterAtTawbah() async throws {\n        try await runDownloadedGappedTestCase(\n            from: suras[8].verses[0],\n            to: suras[8].verses[2],\n            files: [\n                \"001001.mp3\", // always downloads besmAllah\n                \"009001.mp3\",\n                \"009002.mp3\",\n                \"009003.mp3\",\n            ]\n        )\n    }\n\n    @MainActor\n    func testAudioPlaybackControls() async throws {\n        for i in 0 ..< 2 {\n            // play\n            try await runDownloadedTestCase(gapless: i == 0)\n\n            XCTAssertEqual(queuePlayer.location, 0)\n\n            // step forward\n            player.stepForward()\n            XCTAssertEqual(queuePlayer.state.isPlaying, true)\n            XCTAssertEqual(queuePlayer.location, 1)\n\n            // pause\n            player.pauseAudio()\n            XCTAssertEqual(queuePlayer.state.isPaused, true)\n            XCTAssertEqual(queuePlayer.location, 1)\n\n            // resume\n            player.resumeAudio()\n            XCTAssertEqual(queuePlayer.state.isPlaying, true)\n            XCTAssertEqual(queuePlayer.location, 1)\n\n            // step backward\n            player.stepBackward()\n            XCTAssertEqual(queuePlayer.state.isPlaying, true)\n            XCTAssertEqual(queuePlayer.location, 0)\n\n            // stop\n            player.stopAudio()\n            XCTAssertEqual(queuePlayer.state.isStopped, true)\n            XCTAssertEqual(queuePlayer.location, 0)\n        }\n    }\n\n    @MainActor\n    func testRespondsToQueuePlayerDelegate() async throws {\n        let frameChanges = [(file: 0, frame: 2), (file: 2, frame: 0)]\n        for i in 0 ..< 2 {\n            // play\n            try await runDownloadedTestCase(gapless: i == 0)\n\n            // pause\n            queuePlayer.actions?.playbackRateChanged(0)\n            XCTAssertEqual(delegate.eventsDiffSinceLastCalled, [.onPlaybackPaused])\n\n            // resume\n            queuePlayer.actions?.playbackRateChanged(1)\n            XCTAssertEqual(delegate.eventsDiffSinceLastCalled, [.onPlaybackResumed])\n\n            // frame update\n            let playerItem = AVPlayerItem(url: FileManager.documentsURL)\n            let frameChange = frameChanges[i]\n            queuePlayer.actions?.audioFrameChanged(frameChange.file, frameChange.frame, playerItem)\n            XCTAssertEqual(delegate.eventsDiffSinceLastCalled, [.onPlaying(AyahNumber(quran: quran, sura: 1, ayah: 3)!)])\n\n            // end playback\n            queuePlayer.actions?.playbackEnded()\n            XCTAssertEqual(delegate.eventsDiffSinceLastCalled, [.onPlaybackEnded])\n\n            // cannot end playback again or change frame\n            queuePlayer.actions?.playbackEnded()\n            XCTAssertEqual(delegate.eventsDiffSinceLastCalled, [])\n        }\n    }\n\n    // MARK: Private\n\n    private var player: QuranAudioPlayer!\n    private var queuePlayer: QueuePlayerFake!\n    private var delegate: QuranAudioPlayerDelegateClosures!\n\n    private let quran = Quran.hafsMadani1405\n    private let suras = Quran.hafsMadani1405.suras\n    private let gappedReciter: Reciter = .gappedReciter\n    private let gaplessReciter: Reciter = .gaplessReciter\n\n    private func runDownloadedTestCase(gapless: Bool) async throws {\n        if gapless {\n            try await runDownloadedGaplessTestCase(\n                from: suras[0].firstVerse,\n                to: suras[0].lastVerse,\n                files: [\"001.mp3\"],\n                snaphot: false\n            )\n        } else {\n            try await runDownloadedGappedTestCase(\n                from: suras[0].firstVerse,\n                to: suras[0].lastVerse,\n                files: [\n                    \"001001.mp3\",\n                    \"001002.mp3\",\n                    \"001003.mp3\",\n                    \"001004.mp3\",\n                    \"001005.mp3\",\n                    \"001006.mp3\",\n                    \"001007.mp3\",\n                ],\n                snaphot: false\n            )\n        }\n    }\n\n    @MainActor\n    private func runDownloadedGappedTestCase(\n        from: AyahNumber,\n        to: AyahNumber,\n        files: [String],\n        snaphot: Bool = true,\n        testName: String = #function\n    ) async throws {\n        let reciter = gappedReciter\n\n        // test playing audio for downloaded gapped reciter\n        try await player.play(reciter: reciter, rate: 1.0, from: from, to: to, verseRuns: .one, listRuns: .one)\n\n        if snaphot {\n            let state = queuePlayer.state\n            assertSnapshot(matching: state, as: .json, testName: testName)\n        }\n    }\n\n    @MainActor\n    private func runDownloadedGaplessTestCase(\n        from: AyahNumber,\n        to: AyahNumber,\n        files: [String],\n        snaphot: Bool = true,\n        testName: String = #function\n    ) async throws {\n        let reciter = gaplessReciter\n        try reciter.prepareGaplessReciterForTests()\n\n        // test playing audio for downloaded gapless reciter\n        try await player.play(reciter: reciter, rate: 1.0, from: from, to: to, verseRuns: .one, listRuns: .one)\n\n        if snaphot {\n            let state = queuePlayer.state\n            assertSnapshot(matching: state, as: .json, testName: testName)\n        }\n    }\n}\n"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/__Snapshots__/QuranAudioPlayerTests/testPlayingDownloadedGaplessReciter1FullSura.1.json",
    "content": "{\n  \"playing\" : {\n    \"_0\" : {\n      \"endTime\" : null,\n      \"files\" : [\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 12.206\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 17.732\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 22.33\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 26.881\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 33.568\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 39.01\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/mishari_alafasy\\/001.mp3\"\n        }\n      ],\n      \"frameRuns\" : 1,\n      \"requestRuns\" : 1\n    }\n  }\n}"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/__Snapshots__/QuranAudioPlayerTests/testPlayingDownloadedGaplessReciter1SuraEndsEarly.1.json",
    "content": "{\n  \"playing\" : {\n    \"_0\" : {\n      \"endTime\" : 33.568,\n      \"files\" : [\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 12.206\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 17.732\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 22.33\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 26.881\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/mishari_alafasy\\/001.mp3\"\n        }\n      ],\n      \"frameRuns\" : 1,\n      \"requestRuns\" : 1\n    }\n  }\n}"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/__Snapshots__/QuranAudioPlayerTests/testPlayingDownloadedGaplessReciter1SurasHasEndTimestamp.1.json",
    "content": "{\n  \"playing\" : {\n    \"_0\" : {\n      \"endTime\" : 284.899,\n      \"files\" : [\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 269.197\n            },\n            {\n              \"endTime\" : 284.899,\n              \"startTime\" : 275.881\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/mishari_alafasy\\/077.mp3\"\n        }\n      ],\n      \"frameRuns\" : 1,\n      \"requestRuns\" : 1\n    }\n  }\n}"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/__Snapshots__/QuranAudioPlayerTests/testPlayingDownloadedGaplessReciter1SurasHasEndTimestampStopBeforeEnd.1.json",
    "content": "{\n  \"playing\" : {\n    \"_0\" : {\n      \"endTime\" : 275.881,\n      \"files\" : [\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 269.197\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/mishari_alafasy\\/077.mp3\"\n        }\n      ],\n      \"frameRuns\" : 1,\n      \"requestRuns\" : 1\n    }\n  }\n}"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/__Snapshots__/QuranAudioPlayerTests/testPlayingDownloadedGaplessReciter2Suras1stSuraHasEndTimestamp.1.json",
    "content": "{\n  \"playing\" : {\n    \"_0\" : {\n      \"endTime\" : 33.093,\n      \"files\" : [\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 269.197\n            },\n            {\n              \"endTime\" : 284.899,\n              \"startTime\" : 275.881\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/mishari_alafasy\\/077.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 21.519\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 27.112\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/mishari_alafasy\\/078.mp3\"\n        }\n      ],\n      \"frameRuns\" : 1,\n      \"requestRuns\" : 1\n    }\n  }\n}"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/__Snapshots__/QuranAudioPlayerTests/testPlayingDownloadedGaplessReciter3FullSura.1.json",
    "content": "{\n  \"playing\" : {\n    \"_0\" : {\n      \"endTime\" : null,\n      \"files\" : [\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 10.034\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 12.681\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 15.811\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/mishari_alafasy\\/112.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 10.806\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 14.607\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 19.894\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 26.256\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/mishari_alafasy\\/113.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 13.324\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 18.951\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 24.57\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 32.968\n            },\n            {\n              \"endTime\" : null,\n              \"startTime\" : 41.413\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/mishari_alafasy\\/114.mp3\"\n        }\n      ],\n      \"frameRuns\" : 1,\n      \"requestRuns\" : 1\n    }\n  }\n}"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/__Snapshots__/QuranAudioPlayerTests/testPlayingDownloadedGappedReciter1FullSura.1.json",
    "content": "{\n  \"playing\" : {\n    \"_0\" : {\n      \"endTime\" : null,\n      \"files\" : [\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/001001.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/001002.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/001003.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/001004.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/001005.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/001006.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/001007.mp3\"\n        }\n      ],\n      \"frameRuns\" : 1,\n      \"requestRuns\" : 1\n    }\n  }\n}"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/__Snapshots__/QuranAudioPlayerTests/testPlayingDownloadedGappedReciter1SuraEndsEarly.1.json",
    "content": "{\n  \"playing\" : {\n    \"_0\" : {\n      \"endTime\" : null,\n      \"files\" : [\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/001002.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/001003.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/001004.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/001005.mp3\"\n        }\n      ],\n      \"frameRuns\" : 1,\n      \"requestRuns\" : 1\n    }\n  }\n}"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/__Snapshots__/QuranAudioPlayerTests/testPlayingDownloadedGappedReciter3FullSura.1.json",
    "content": "{\n  \"playing\" : {\n    \"_0\" : {\n      \"endTime\" : null,\n      \"files\" : [\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/001001.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/112001.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/112002.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/112003.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/112004.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/001001.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/113001.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/113002.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/113003.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/113004.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/113005.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/001001.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/114001.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/114002.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/114003.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/114004.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/114005.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/114006.mp3\"\n        }\n      ],\n      \"frameRuns\" : 1,\n      \"requestRuns\" : 1\n    }\n  }\n}"
  },
  {
    "path": "Domain/QuranAudioKit/Tests/__Snapshots__/QuranAudioPlayerTests/testPlayingDownloadedGappedReciterAtTawbah.1.json",
    "content": "{\n  \"playing\" : {\n    \"_0\" : {\n      \"endTime\" : null,\n      \"files\" : [\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/009001.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/009002.mp3\"\n        },\n        {\n          \"frames\" : [\n            {\n              \"endTime\" : null,\n              \"startTime\" : 0\n            }\n          ],\n          \"url\" : \"\\/audio_files\\/reciter1\\/009003.mp3\"\n        }\n      ],\n      \"frameRuns\" : 1,\n      \"requestRuns\" : 1\n    }\n  }\n}"
  },
  {
    "path": "Domain/QuranResources/QuranResources.swift",
    "content": "//\n//  QuranResources.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-24.\n//\n\nimport Foundation\n\npublic enum QuranResources {\n    public static let quranUthmaniV2Database = Bundle.module\n        .url(forResource: \"Databases/quran.ar.uthmani.v2.db\", withExtension: \"\")!\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Sources/Localization/QuranKit+Localization.swift",
    "content": "//\n//  QuranKit+Localization.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-10.\n//\n\nimport Foundation\nimport Localization\nimport QuranKit\n\nextension AyahNumber {\n    public var localizedAyahNumber: String { lFormat(\"quran_ayah\", table: .android, ayah) }\n    public var localizedName: String {\n        let suraName = sura.localizedName()\n        return \"\\(suraName), \\(localizedAyahNumber)\"\n    }\n\n    public var localizedNameWithSuraNumber: String {\n        let localizedSura = sura.localizedName(withNumber: true)\n        return \"\\(localizedSura) - \\(localizedAyahNumber)\"\n    }\n}\n\nextension Juz {\n    public var localizedName: String {\n        lFormat(\"juz2_description\", table: .android, NumberFormatter.shared.format(juzNumber))\n    }\n}\n\nextension Page {\n    public var localizedName: String {\n        \"\\(lAndroid(\"quran_page\")) \\(NumberFormatter.shared.format(pageNumber))\"\n    }\n\n    public var localizedNumber: String {\n        NumberFormatter.shared.format(pageNumber)\n    }\n\n    public var localizedQuarterName: String {\n        let juzDescription = startJuz.localizedName\n        if let quarter {\n            return [juzDescription, quarter.localizedName].joined(separator: \", \")\n        } else {\n            return juzDescription\n        }\n    }\n}\n\nextension Hizb {\n    public var localizedName: String {\n        \"\\(lAndroid(\"quran_hizb\")) \\(NumberFormatter.shared.format(hizbNumber))\"\n    }\n}\n\nextension Quarter {\n    public var localizedName: String {\n        let rub = quarterNumber - 1\n        let reminder = rub % 4\n\n        let fraction: String? = switch reminder {\n        case 1: lAndroid(\"quran_rob3\")\n        case 2: lAndroid(\"quran_nos\")\n        case 3: lAndroid(\"quran_talt_arb3\")\n        default: nil\n        }\n\n        let hizbString = hizb.localizedName\n        let components = [fraction, hizbString].compactMap { $0 }\n        return components.joined(separator: \" \")\n    }\n}\n\nextension Sura {\n    public var localizedSuraNumber: String {\n        NumberFormatter.shared.format(suraNumber)\n    }\n\n    public func localizedName(withPrefix: Bool = false, withNumber: Bool = false, language: Language? = nil) -> String {\n        var suraName = l(\"sura_names[\\(suraNumber - 1)]\", table: .suras, language: language)\n        if withPrefix {\n            suraName = lFormat(\"quran_sura_title\", table: .android, language: language, suraName)\n        }\n        if withNumber {\n            suraName = \"\\(localizedSuraNumber). \\(suraName)\"\n        }\n        return suraName\n    }\n}\n\nextension Sura {\n    public var arabicSuraName: String {\n        let codePoint = Self.decoratedSurasCodePoints[suraNumber - 1]\n        let scalar = UnicodeScalar(codePoint)!\n        return String(scalar)\n    }\n\n    private static let decoratedSurasCodePoints = [\n        0xE904, 0xE905, 0xE906, 0xE907, 0xE908, 0xE90B,\n        0xE90C, 0xE90D, 0xE90E, 0xE90F, 0xE910, 0xE911,\n        0xE912, 0xE913, 0xE914, 0xE915, 0xE916, 0xE917,\n        0xE918, 0xE919, 0xE91A, 0xE91B, 0xE91C, 0xE91D,\n        0xE91E, 0xE91F, 0xE920, 0xE921, 0xE922, 0xE923,\n        0xE924, 0xE925, 0xE926, 0xE92E, 0xE92F, 0xE930,\n        0xE931, 0xE909, 0xE90A, 0xE927, 0xE928, 0xE929,\n        0xE92A, 0xE92B, 0xE92C, 0xE92D, 0xE932, 0xE902,\n        0xE933, 0xE934, 0xE935, 0xE936, 0xE937, 0xE938,\n        0xE939, 0xE93A, 0xE93B, 0xE93C, 0xE900, 0xE901,\n        0xE941, 0xE942, 0xE943, 0xE944, 0xE945, 0xE946,\n        0xE947, 0xE948, 0xE949, 0xE94A, 0xE94B, 0xE94C,\n        0xE94D, 0xE94E, 0xE94F, 0xE950, 0xE951, 0xE952,\n        0xE93D, 0xE93E, 0xE93F, 0xE940, 0xE953, 0xE954,\n        0xE955, 0xE956, 0xE957, 0xE958, 0xE959, 0xE95A,\n        0xE95B, 0xE95C, 0xE95D, 0xE95E, 0xE95F, 0xE960,\n        0xE961, 0xE962, 0xE963, 0xE964, 0xE965, 0xE966,\n        0xE967, 0xE968, 0xE969, 0xE96A, 0xE96B, 0xE96C,\n        0xE96D, 0xE96E, 0xE96F, 0xE970, 0xE971, 0xE972,\n    ]\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Sources/Preferences/FontSizePreferences.swift",
    "content": "//\n//  FontSizePreferences.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-11-24.\n//\n\nimport Preferences\nimport QuranText\n\npublic struct FontSizePreferences {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Public\n\n    public static let shared = FontSizePreferences()\n\n    @TransformedPreference(translationFontSizeKey, transformer: .rawRepresentable(defaultValue: defaultValue))\n    public var translationFontSize: FontSize\n\n    @TransformedPreference(arabicFontSizeKey, transformer: .rawRepresentable(defaultValue: defaultValue))\n    public var arabicFontSize: FontSize\n\n    // MARK: Private\n\n    private static let defaultValue = FontSize.large\n    private static let translationFontSizeKey = PreferenceKey<Int>(key: \"translationFontSize\", defaultValue: defaultValue.rawValue)\n    private static let arabicFontSizeKey = PreferenceKey<Int>(key: \"arabicFont\", defaultValue: defaultValue.rawValue)\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Sources/Preferences/QuranContentStatePreferences.swift",
    "content": "//\n//  QuranContentStatePreferences.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-11-24.\n//\n\nimport Preferences\nimport QuranText\n\npublic struct QuranContentStatePreferences {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Public\n\n    public static let shared = QuranContentStatePreferences()\n\n    @TransformedPreference(showQuranTranslationView, transformer: quranModeTransfomer)\n    public var quranMode: QuranMode\n\n    @Preference(twoPagesEnabled)\n    public var twoPagesEnabled: Bool\n\n    @Preference(verticalScrollingEnabled)\n    public var verticalScrollingEnabled: Bool\n\n    // MARK: Private\n\n    private static let showQuranTranslationView = PreferenceKey<Bool>(key: \"showQuranTranslationView\", defaultValue: false)\n    private static let twoPagesEnabled = PreferenceKey<Bool>(key: \"twoPagesEnabled\", defaultValue: TwoPagesUtils.settingDefaultValue)\n    private static let verticalScrollingEnabled = PreferenceKey<Bool>(key: \"verticalScrollingEnabled\", defaultValue: false)\n\n    private static let quranModeTransfomer = PreferenceTransformer<Bool, QuranMode>(\n        rawToValue: { $0 ? .translation : .arabic },\n        valueToRaw: { $0 == .translation }\n    )\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Sources/Search/Recents/SearchRecentsService.swift",
    "content": "//\n//  SearchRecentsService.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/17/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Preferences\nimport Utilities\n\npublic class SearchRecentsService {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Public\n\n    public static let shared = SearchRecentsService()\n\n    public let popularTerms: [String] = [\n        \"الرحمن\",\n        \"الحي القيوم\",\n        \"يس\",\n        \"7\",\n        \"5:88\",\n        \"تبارك\",\n        \"عم\",\n        \"أعوذ\",\n    ]\n\n    @TransformedPreference(searchRecentItems, transformer: searchRecentItemsTransfomer)\n    public var recentSearchItems: [String]\n\n    public func addToRecents(_ term: String) {\n        var recents = recentSearchItems\n        if let index = recents.firstIndex(of: term) {\n            recents.remove(at: index)\n        }\n        recents.insert(term, at: 0)\n        if recents.count > maxCount {\n            recents = recents.dropLast(recents.count - maxCount)\n        }\n        recentSearchItems = recents\n    }\n\n    public func reset() {\n        Preferences.shared.removeValueForKey(Self.searchRecentItems)\n    }\n\n    // MARK: Private\n\n    private static let searchRecentItems = PreferenceKey<[String]>(key: \"com.quran.searchRecentItems\", defaultValue: [])\n    private static let searchRecentItemsTransfomer = PreferenceTransformer<[String], [String]>(\n        rawToValue: { $0.orderedUnique() },\n        valueToRaw: { $0 }\n    )\n\n    private let maxCount: Int = 5\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Sources/Search/Searchers/CompositeSearcher.swift",
    "content": "//\n//  CompositeSearcher.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-11-17.\n//\n\nimport Foundation\nimport QuranKit\nimport QuranText\nimport TranslationService\nimport VerseTextPersistence\nimport VLogging\n\npublic struct CompositeSearcher {\n    // MARK: Lifecycle\n\n    init(\n        quranVerseTextPersistence: VerseTextPersistence,\n        localTranslationRetriever: LocalTranslationsRetriever,\n        versePersistenceBuilder: @escaping (Translation) -> TranslationVerseTextPersistence\n    ) {\n        let numberSearcher = NumberSearcher(quranVerseTextPersistence: quranVerseTextPersistence)\n        let quranSearcher = PersistenceSearcher(versePersistence: quranVerseTextPersistence, source: .quran)\n        let suraSearcher = SuraSearcher()\n        let translationSearcher = TranslationSearcher(\n            localTranslationRetriever: localTranslationRetriever,\n            versePersistenceBuilder: versePersistenceBuilder\n        )\n\n        let simpleSearchers: [Searcher] = [numberSearcher, suraSearcher, quranSearcher]\n        self.simpleSearchers = simpleSearchers\n        translationsSearcher = translationSearcher\n    }\n\n    public init(databasesURL: URL, quranFileURL: URL) {\n        let persistence = GRDBQuranVerseTextPersistence(fileURL: quranFileURL)\n        let localTranslationRetriever = TranslationService.LocalTranslationsRetriever(databasesURL: databasesURL)\n        self.init(\n            quranVerseTextPersistence: persistence,\n            localTranslationRetriever: localTranslationRetriever,\n            versePersistenceBuilder: { translation in\n                GRDBTranslationVerseTextPersistence(fileURL: translation.localPath.url)\n            }\n        )\n    }\n\n    // MARK: Public\n\n    public func autocomplete(term: String, quran: Quran) async -> [String] {\n        guard let term = SearchTerm(term) else {\n            return []\n        }\n        logger.info(\"Autocompleting term: \\(term.compactQuery)\")\n\n        let autocompletions = await simpleSearchers.asyncMap { searcher in\n            try? await searcher.autocomplete(term: term, quran: quran)\n        }\n        var results = autocompletions.compactMap { $0 }.flatMap { $0 }\n\n        if shouldPerformTranslationSearch(simpleSearchResults: results, term: term.compactQuery) {\n            results += (try? await translationsSearcher.autocomplete(term: term, quran: quran)) ?? []\n        }\n        if !results.contains(term.compactQuery) {\n            results.insert(term.compactQuery, at: 0)\n        }\n        return results.orderedUnique()\n    }\n\n    public func search(for term: String, quran: Quran) async throws -> [SearchResults] {\n        guard let term = SearchTerm(term) else {\n            return []\n        }\n        logger.info(\"Search for: \\(term.compactQuery)\")\n\n        let searchResults = try await simpleSearchers.asyncMap { searcher in\n            try await searcher.search(for: term, quran: quran)\n        }\n        var results = searchResults\n            .flatMap { $0 }\n            .filter { !$0.items.isEmpty } // Remove empty search results\n        if shouldPerformTranslationSearch(simpleSearchResults: results, term: term.compactQuery) {\n            results += try await translationsSearcher.search(for: term, quran: quran)\n                .filter { !$0.items.isEmpty } // Remove empty search results\n        }\n\n        return groupedResults(results)\n    }\n\n    // MARK: Private\n\n    private let simpleSearchers: [Searcher]\n    private let translationsSearcher: Searcher\n\n    private func groupedResults(_ results: [SearchResults]) -> [SearchResults] {\n        var resultsPerSource: [SearchResults.Source: [SearchResult]] = [:]\n        for result in results {\n            var list = resultsPerSource[result.source] ?? []\n            list.append(contentsOf: result.items)\n            resultsPerSource[result.source] = list\n        }\n        return resultsPerSource\n            .map { source, items in SearchResults(source: source, items: items) }\n            .sorted { $0.source < $1.source }\n    }\n\n    private func shouldPerformTranslationSearch(simpleSearchResults: [some Any], term: String) -> Bool {\n        simpleSearchResults.isEmpty || (!term.containsArabic() && !term.containsOnlyNumbers())\n    }\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Sources/Search/Searchers/NumberSearcher.swift",
    "content": "//\n//  NumberSearcher.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-11-16.\n//\n\nimport Foundation\nimport QuranKit\nimport QuranText\nimport VerseTextPersistence\n\nstruct NumberSearcher: Searcher {\n    // MARK: Internal\n\n    let quranVerseTextPersistence: VerseTextPersistence\n\n    func autocomplete(term: SearchTerm, quran: Quran) throws -> [String] {\n        if Int(term.compactQuery) != nil {\n            return term.buildAutocompletions(searchResults: [term.compactQuery])\n        }\n        return []\n    }\n\n    func search(for term: SearchTerm, quran: Quran) async throws -> [SearchResults] {\n        let items: [SearchResult] = try await search(for: term, quran: quran)\n        return [SearchResults(source: .quran, items: items)]\n    }\n\n    // MARK: Private\n\n    private static let numberParser: NumberFormatter = {\n        let formatter = NumberFormatter()\n        formatter.locale = Locale(identifier: \"en\")\n        return formatter\n    }()\n\n    private func search(for term: SearchTerm, quran: Quran) async throws -> [SearchResult] {\n        let components = parseIntArray(term.compactQuery)\n        guard !components.isEmpty else {\n            return []\n        }\n        if components.count == 2 {\n            return [try await parseVerseResult(\n                sura: components[0],\n                verse: components[1],\n                quran: quran\n            )].compactMap { $0 }\n        } else {\n            return [\n                parseSuraResult(sura: components[0], quran: quran),\n                parseJuzResult(juz: components[0], quran: quran),\n                parseHizbResult(hizb: components[0], quran: quran),\n                parsePageResult(page: components[0], quran: quran),\n            ].compactMap { $0 }\n        }\n    }\n\n    private func parseVerseResult(sura: Int, verse: Int, quran: Quran) async throws -> SearchResult? {\n        guard let verse = quran.verses.first(where: { $0.sura.suraNumber == sura && $0.ayah == verse }) else {\n            return nil\n        }\n        let ayahText = try await quranVerseTextPersistence.textForVerse(verse)\n        return SearchResult(text: ayahText, ranges: [], ayah: verse)\n    }\n\n    private func parseSuraResult(sura: Int, quran: Quran) -> SearchResult? {\n        guard let sura = quran.suras.first(where: { $0.suraNumber == sura }) else {\n            return nil\n        }\n        return SearchResult(text: sura.localizedName(withPrefix: true), ranges: [], ayah: sura.firstVerse)\n    }\n\n    private func parsePageResult(page: Int, quran: Quran) -> SearchResult? {\n        guard let page = quran.pages.first(where: { $0.pageNumber == page }) else {\n            return nil\n        }\n        return SearchResult(text: page.localizedName, ranges: [], ayah: page.firstVerse)\n    }\n\n    private func parseJuzResult(juz: Int, quran: Quran) -> SearchResult? {\n        guard let juz = quran.juzs.first(where: { $0.juzNumber == juz }) else {\n            return nil\n        }\n        return SearchResult(text: juz.localizedName, ranges: [], ayah: juz.firstVerse)\n    }\n\n    private func parseHizbResult(hizb: Int, quran: Quran) -> SearchResult? {\n        guard let hizb = quran.hizbs.first(where: { $0.hizbNumber == hizb }) else {\n            return nil\n        }\n        return SearchResult(text: hizb.localizedName, ranges: [], ayah: hizb.firstVerse)\n    }\n\n    private func parseIntArray(_ term: String) -> [Int] {\n        let components = term.components(separatedBy: \":\")\n        guard !components.isEmpty, components.count <= 2 else {\n            return []\n        }\n        let result = components.compactMap { parseInt($0) }\n        if result.count != components.count {\n            return []\n        }\n        return result\n    }\n\n    private func parseInt(_ value: String) -> Int? {\n        guard let number = Self.numberParser.number(from: value) else {\n            return nil\n        }\n        switch CFNumberGetType(number) {\n        case .charType, .intType, .nsIntegerType, .shortType, .sInt8Type, .sInt16Type, .sInt32Type, .sInt64Type:\n            return number.intValue\n        default: return nil\n        }\n    }\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Sources/Search/Searchers/PersistenceSearcher.swift",
    "content": "//\n//  PersistenceSearcher.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-11-16.\n//\n\nimport QuranKit\nimport QuranText\nimport VerseTextPersistence\n\nstruct PersistenceSearcher: Searcher {\n    let versePersistence: SearchableTextPersistence\n    let source: SearchResults.Source\n\n    func autocomplete(term: SearchTerm, quran: Quran) async throws -> [String] {\n        let matches = try await versePersistence.autocomplete(term: term.persistenceQuery)\n        return term.buildAutocompletions(searchResults: matches)\n    }\n\n    func search(for term: SearchTerm, quran: Quran) async throws -> [SearchResults] {\n        // Replace certainCharacters with similar other\n        let persistenceSearchTerm = term.persistenceQueryReplacingArabicSimilarityCharactersWithUnderscore()\n        if persistenceSearchTerm.isEmpty {\n            return []\n        }\n        let matches = try await versePersistence.search(for: persistenceSearchTerm, quran: quran)\n\n        // Use the passed in term to match the original letters not underscoes.\n        let items = term.buildSearchResults(verses: matches)\n        return [SearchResults(source: source, items: items)]\n    }\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Sources/Search/Searchers/SearchTerm.swift",
    "content": "//\n//  SearchTerm.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-11-16.\n//\n\nimport Foundation\nimport QuranKit\nimport QuranText\n\nprivate enum SearchRegex {\n    /// Match unicode category Separators (Z).\n    static let spaceRegex = \"\\\\p{Z}+\"\n    /// Match unicode categories Marks (M), Punctuation (P), Symbols (S), Control (C) and Arabic Tatweel character.\n    static let invalidSearchRegex = \"[\\\\p{M}\\\\p{P}\\\\p{S}\\\\p{C}\\u{0640}]\"\n    static let arabicSimilarityRegex = \"[\\u{0627}\\u{0623}\\u{0621}\\u{062a}\\u{0629}\\u{0647}\\u{0649}\\u{0626}]\"\n    static let arabicSimilarityReplacements: [Character: String] = [\n        // given: ا\n        // match: آأإاﻯ\n        \"\\u{0627}\": \"\\u{0622}\\u{0623}\\u{0625}\\u{0627}\\u{0649}\",\n\n        // given: ﺃ\n        // match: ﺃﺀﺆﺋ\n        \"\\u{0623}\": \"\\u{0621}\\u{0623}\\u{0624}\\u{0626}\",\n\n        // given: ﺀ\n        // match: ﺀﺃﺆ\n        \"\\u{0621}\": \"\\u{0621}\\u{0623}\\u{0624}\\u{0626}\",\n\n        // given: ﺕ\n        // match: ﺕﺓ\n        \"\\u{062a}\": \"\\u{062a}\\u{0629}\",\n\n        // given: ﺓ\n        // match: ﺓتﻫ\n        \"\\u{0629}\": \"\\u{0629}\\u{062a}\\u{0647}\",\n\n        // given: ه\n        // match: ةه\n        \"\\u{0647}\": \"\\u{0647}\\u{0629}\",\n\n        // given: ﻯ\n        // match: ﻯي\n        \"\\u{0649}\": \"\\u{0649}\\u{064a}\",\n\n        // given: ئ\n        // match: ئﻯي\n        \"\\u{0626}\": \"\\u{0626}\\u{0649}\\u{064a}\",\n    ]\n}\n\nstruct SearchTerm {\n    // MARK: Lifecycle\n\n    init?(_ value: String) {\n        compactQuery = value.trimmedWords()\n        if compactQuery.isEmpty {\n            return nil\n        }\n        persistenceQuery = compactQuery.removeInvalidSearchCharacters()\n        guard let resultRegex = Self.regexForArabicSimilarityCharacters(persistenceQuery) else {\n            return nil\n        }\n        queryRegex = resultRegex\n    }\n\n    // MARK: Internal\n\n    var compactQuery: String\n    var persistenceQuery: String\n\n    static func regexForArabicSimilarityCharacters(_ value: String) -> NSRegularExpression? {\n        let cleanedValue = value.removeInvalidSearchCharacters()\n        var regex = \"\"\n        for char in cleanedValue {\n            if let replacement = SearchRegex.arabicSimilarityReplacements[char] {\n                regex += \"[\\(replacement)]\"\n            } else {\n                regex += String(char)\n            }\n            regex += SearchRegex.invalidSearchRegex + \"*\"\n        }\n        return try? NSRegularExpression(pattern: \"(\" + regex + \")\", options: .caseInsensitive)\n    }\n\n    func persistenceQueryReplacingArabicSimilarityCharactersWithUnderscore() -> String {\n        persistenceQuery.replacingOccurrences(\n            of: SearchRegex.arabicSimilarityRegex,\n            with: \"_\",\n            options: .regularExpression\n        )\n    }\n\n    func buildAutocompletions(searchResults: [String]) -> [String] {\n        var result: [String] = []\n        var added: Set<String> = []\n        for searchResult in searchResults {\n            for text in [searchResult, searchResult.decomposedStringWithCompatibilityMapping] {\n                let suffixes = text.caseInsensitiveComponents(separatedBy: queryRegex)\n                for suffixIndex in 1 ..< suffixes.count {\n                    let suffix = suffixes[suffixIndex]\n                    // Include only first 5 words\n                    let suffixWords = suffix.components(separatedBy: \" \").prefix(5).joined(separator: \" \")\n                    let charSetToTrim = CharacterSet.whitespaces.union(.alphanumerics).inverted\n                    let trimmedSuffix = suffixWords.trimmingCharacters(in: charSetToTrim)\n                    if trimmedSuffix.isEmpty && suffixWords != trimmedSuffix {\n                        continue\n                    }\n                    let subrow = persistenceQuery + trimmedSuffix\n                    if !added.contains(subrow) {\n                        added.insert(subrow)\n                        result.append(subrow)\n                    }\n                }\n            }\n        }\n        return result\n    }\n\n    func buildSearchResults(verses: [(verse: AyahNumber, text: String)]) -> [SearchResult] {\n        var results: [SearchResult] = []\n        for verse in verses {\n            for text in [verse.text, verse.text.decomposedStringWithCompatibilityMapping] {\n                let ranges = text.split(separatedBy: queryRegex)\n                if !ranges.isEmpty {\n                    let result = SearchResult(text: text, ranges: ranges, ayah: verse.verse)\n                    results.append(result)\n                    break\n                }\n            }\n        }\n        return results\n    }\n\n    // MARK: Private\n\n    private var queryRegex: NSRegularExpression\n}\n\nextension String {\n    func removeInvalidSearchCharacters() -> String {\n        var cleanedTerm = replacingOccurrences(of: SearchRegex.invalidSearchRegex, with: \"\", options: .regularExpression)\n            .replacingOccurrences(of: SearchRegex.spaceRegex, with: \" \", options: .regularExpression)\n\n        if let upTo = cleanedTerm.index(cleanedTerm.startIndex, offsetBy: 1000, limitedBy: cleanedTerm.endIndex) {\n            cleanedTerm = String(cleanedTerm[..<upTo])\n        }\n        return cleanedTerm.lowercased()\n    }\n\n    func caseInsensitiveComponents(separatedBy separator: NSRegularExpression) -> [Substring] {\n        let ranges = split(separatedBy: separator)\n        var lowerBound = startIndex\n        var components: [Substring] = []\n        for range in ranges {\n            let upperBound = range.lowerBound\n            let text = self[lowerBound ..< upperBound]\n            components.append(text)\n            lowerBound = range.upperBound\n        }\n        components.append(self[lowerBound ..< endIndex])\n        return components\n    }\n\n    func split(separatedBy regex: NSRegularExpression) -> [Range<String.Index>] {\n        let nsRange = NSRange(startIndex..., in: self)\n        let matches = regex.matches(in: self, range: nsRange)\n\n        return matches.compactMap {\n            Range($0.range, in: self)\n        }\n    }\n\n    func containsArabic() -> Bool {\n        range(of: \"\\\\p{Arabic}\", options: .regularExpression) != nil\n    }\n\n    func containsOnlyNumbers() -> Bool {\n        removeInvalidSearchCharacters().range(of: \"^[0-9]+$\", options: .regularExpression) != nil\n    }\n\n    func trimmedWords() -> String {\n        components(separatedBy: \" \")\n            .map { $0.trimmingCharacters(in: .whitespaces) }\n            .filter { !$0.isEmpty }\n            .joined(separator: \" \")\n    }\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Sources/Search/Searchers/Searcher.swift",
    "content": "//\n//  Searcher.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-11-16.\n//\n\nimport QuranKit\nimport QuranText\n\nprotocol Searcher {\n    func autocomplete(term: SearchTerm, quran: Quran) async throws -> [String]\n    func search(for term: SearchTerm, quran: Quran) async throws -> [SearchResults]\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Sources/Search/Searchers/SuraSearcher.swift",
    "content": "//\n//  SuraSearcher.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-11-16.\n//\n\nimport QuranKit\nimport QuranText\n\nstruct SuraSearcher: Searcher {\n    func autocomplete(term: SearchTerm, quran: Quran) throws -> [String] {\n        let defaultSuraNames = quran.suras.map { $0.localizedName(withPrefix: true) }\n        let arabicSuraNames = quran.suras.map { $0.localizedName(withPrefix: true, language: .arabic) }\n        var suraNames = Set(defaultSuraNames)\n        arabicSuraNames.forEach { suraNames.insert($0) }\n        let surasCompletions = term.buildAutocompletions(searchResults: Array(suraNames))\n        return surasCompletions\n    }\n\n    func search(for term: SearchTerm, quran: Quran) throws -> [SearchResults] {\n        let items = quran.suras.flatMap { sura -> [SearchResult] in\n            let defaultSuraName = sura.localizedName(withPrefix: true)\n            let arabicSuraName = sura.localizedName(withPrefix: true, language: .arabic)\n            let suraNames: Set<String> = [defaultSuraName, arabicSuraName]\n            return suraNames.flatMap { suraName in\n                let results = term.buildSearchResults(verses: [(verse: sura.firstVerse, text: suraName)])\n                return results\n            }\n        }\n        return [SearchResults(source: .quran, items: items)]\n    }\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Sources/Search/Searchers/TranslationSearcher.swift",
    "content": "//\n//  TranslationSearcher.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-11-17.\n//\n\nimport QuranKit\nimport QuranText\nimport TranslationService\nimport VerseTextPersistence\n\nstruct TranslationSearcher: Searcher {\n    // MARK: Internal\n\n    let localTranslationRetriever: LocalTranslationsRetriever\n    let versePersistenceBuilder: (Translation) -> SearchableTextPersistence\n\n    func autocomplete(term: SearchTerm, quran: Quran) async throws -> [String] {\n        let translations = try await getDownloadedTranslations()\n        for translation in translations {\n            let persistence = versePersistenceBuilder(translation)\n            let persistenceSearcher = PersistenceSearcher(versePersistence: persistence, source: .translation(translation))\n            let results = try await persistenceSearcher.autocomplete(term: term, quran: quran)\n            if !results.isEmpty {\n                return results\n            }\n        }\n        return []\n    }\n\n    func search(for term: SearchTerm, quran: Quran) async throws -> [SearchResults] {\n        let translations = try await getDownloadedTranslations()\n        let results = try await translations.asyncMap { translation -> [SearchResults] in\n            let persistence = versePersistenceBuilder(translation)\n            let persistenceSearcher = PersistenceSearcher(versePersistence: persistence, source: .translation(translation))\n            let results = try await persistenceSearcher.search(for: term, quran: quran)\n            return results\n        }\n        return results.flatMap { $0 }\n    }\n\n    // MARK: Private\n\n    private func getDownloadedTranslations() async throws -> [Translation] {\n        let translations = try await localTranslationRetriever.getLocalTranslations()\n        return translations.filter(\\.isDownloaded)\n    }\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Sources/ShareableText/ShareableVerseTextRetriever.swift",
    "content": "//\n//  ShareableVerseTextRetriever.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/4/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\nimport Localization\nimport QuranKit\nimport QuranText\nimport TranslationService\nimport VerseTextPersistence\n\npublic struct ShareableVerseTextRetriever {\n    // MARK: Lifecycle\n\n    public init(databasesURL: URL, quranFileURL: URL) {\n        textService = QuranTextDataService(databasesURL: databasesURL, quranFileURL: quranFileURL)\n        shareableVersePersistence = GRDBQuranVerseTextPersistence(mode: .share, fileURL: quranFileURL)\n        localTranslationsRetriever = LocalTranslationsRetriever(databasesURL: databasesURL)\n    }\n\n    init(\n        textService: QuranTextDataService,\n        shareableVersePersistence: VerseTextPersistence,\n        localTranslationsRetriever: LocalTranslationsRetriever\n    ) {\n        self.textService = textService\n        self.shareableVersePersistence = shareableVersePersistence\n        self.localTranslationsRetriever = localTranslationsRetriever\n    }\n\n    // MARK: Public\n\n    public func textForVerses(_ verses: [AyahNumber]) async throws -> [String] {\n        async let arabicText = arabicScript(for: verses)\n        async let translationText = translations(for: verses)\n\n        let result = try await [arabicText, translationText].flatMap { $0 }\n        return result + [\"\", versesSummary(verses)]\n    }\n\n    // MARK: Private\n\n    private let preferences = QuranContentStatePreferences.shared\n    private let selectedTranslationsPreferences = SelectedTranslationsPreferences.shared\n    private let textService: QuranTextDataService\n    private let shareableVersePersistence: VerseTextPersistence\n    private let localTranslationsRetriever: LocalTranslationsRetriever\n\n    private func versesSummary(_ verses: [AyahNumber]) -> String {\n        if verses.count == 1 {\n            return verses[0].localizedName\n        }\n        return \"\\(verses[0].localizedName) - \\(verses.last!.localizedName)\"\n    }\n\n    private func arabicText(for verse: AyahNumber) async throws -> String {\n        let verseNumber = NumberFormatter.arabicNumberFormatter.format(verse.ayah)\n\n        // Avoid the arabic text to be displayed in the wrong direction in LTR languages\n        let rightToLeftMark = \"\\u{202B}\"\n        let endMark = \"\\u{202C}\"\n\n        let arabicVerse = try await shareableVersePersistence.textForVerse(verse) + \"﴿ \\(verseNumber) ﴾\"\n\n        return \"\\(rightToLeftMark)\\(arabicVerse)\\(endMark)\"\n    }\n\n    private func arabicScript(for verses: [AyahNumber]) async throws -> [String] {\n        // TODO: improve performance by parallize the loading\n        let arabicAyahsText = try await verses.asyncMap { try await arabicText(for: $0) }\n            .joined(separator: \" \")\n        return [arabicAyahsText]\n    }\n\n    private func translations(for verses: [AyahNumber]) async throws -> [String] {\n        guard preferences.quranMode == .translation else {\n            return []\n        }\n\n        let translations = try await selectedTranslations()\n        let verseTexts = try await textService.textForVerses(verses, translations: translations)\n        let orderedVerseTexts = verses.compactMap { verseTexts[$0] }\n        return versesTranslationsText(translations: translations, verseTexts: orderedVerseTexts)\n    }\n\n    private func versesTranslationsText(translations: [Translation], verseTexts: [VerseText]) -> [String] {\n        var components = [\"\"]\n\n        for (index, translation) in translations.enumerated() {\n            // translator\n            components.append(\"• \\(translation.translationName):\")\n\n            // translation text for all verses\n            components.append(contentsOf: verseTexts.map { stringFromTranslationText($0.translations[index]) })\n\n            // separate multiple translations\n            components.append(\"\")\n        }\n\n        return components.dropLast()\n    }\n\n    private func selectedTranslations() async throws -> [Translation] {\n        let localTranslations = try await localTranslationsRetriever.getLocalTranslations()\n        return selectedTranslationsPreferences.selectedTranslations(from: localTranslations)\n    }\n\n    private func stringFromTranslationText(_ text: TranslationText) -> String {\n        switch text {\n        case .reference(let verse):\n            return lFormat(\"translation.text.see-referenced-verse\", verse.ayah)\n        case .string(let string):\n            return string.text\n        }\n    }\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Sources/TranslationText/QuranTextDataService.swift",
    "content": "//\n//  QuranTextDataService.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-11-22.\n//\n\nimport Crashing\nimport Foundation\nimport Localization\nimport QuranKit\nimport QuranText\nimport TranslationService\nimport VerseTextPersistence\n\npublic struct QuranTextDataService {\n    // MARK: Lifecycle\n\n    public init(databasesURL: URL, quranFileURL: URL) {\n        self.init(databasesURL: databasesURL, arabicPersistence: GRDBQuranVerseTextPersistence(fileURL: quranFileURL))\n    }\n\n    init(databasesURL: URL, arabicPersistence: VerseTextPersistence) {\n        self.init(\n            localTranslationRetriever: LocalTranslationsRetriever(databasesURL: databasesURL),\n            arabicPersistence: arabicPersistence,\n            translationsPersistenceBuilder: { translation in\n                GRDBTranslationVerseTextPersistence(fileURL: translation.localPath.url)\n            }\n        )\n    }\n\n    init(\n        localTranslationRetriever: LocalTranslationsRetriever,\n        arabicPersistence: VerseTextPersistence,\n        translationsPersistenceBuilder: @escaping (Translation) -> TranslationVerseTextPersistence\n    ) {\n        self.localTranslationRetriever = localTranslationRetriever\n        self.arabicPersistence = arabicPersistence\n        self.translationsPersistenceBuilder = translationsPersistenceBuilder\n    }\n\n    // MARK: Public\n\n    public func textForVerses(_ verses: [AyahNumber], translations: [Translation]) async throws -> [AyahNumber: VerseText] {\n        let translatedVerses = try await textForVerses(verses, translations: { translations })\n        return Dictionary(uniqueKeysWithValues: (0 ..< verses.count).map { i in (verses[i], translatedVerses.verses[i]) })\n    }\n\n    // MARK: Internal\n\n    // regex to detect quran text in translation text\n    static let quranRegex = try! NSRegularExpression(pattern: #\"([«{﴿][\\s\\S]*?[﴾}»])\"#)\n    // regex to detect footnotes in translation text\n    static let footnotesRegex = try! NSRegularExpression(pattern: #\"\\[\\[[\\s\\S]*?]]\"#)\n\n    let localTranslationRetriever: LocalTranslationsRetriever\n    let arabicPersistence: VerseTextPersistence\n    let translationsPersistenceBuilder: (Translation) -> TranslationVerseTextPersistence\n    let selectedTranslationsPreferences = SelectedTranslationsPreferences.shared\n\n    // MARK: Private\n\n    private func textForVerses(\n        _ verses: [AyahNumber],\n        translations: @escaping @Sendable () async throws -> [Translation]\n    ) async throws -> TranslatedVerses {\n        // get Arabic text\n        // get translations text\n        // merge them\n        async let asyncArabicText = retrieveArabicText(verses: verses)\n        async let asyncTranslationsText = Task {\n            let localTranslations = try await translations()\n            return await fetchTranslationsText(verses: verses, translations: localTranslations)\n        }.value\n\n        let (arabicText, translationsText) = try await (asyncArabicText, asyncTranslationsText)\n        let translatedVerse = TranslatedVerses(\n            translations: translationsText.map(\\.0),\n            verses: merge(verses: verses, translations: translationsText, arabic: arabicText)\n        )\n        return translatedVerse\n    }\n\n    private func merge(verses: [AyahNumber], translations: [(Translation, [TranslationText])], arabic: [String]) -> [VerseText] {\n        var versesText: [VerseText] = []\n\n        for i in 0 ..< verses.count {\n            let verse = verses[i]\n            let arabicText = arabic[i]\n            let ayahTranslations = translations.map { translation, ayahs in\n                ayahs[i]\n            }\n            let prefix = verse == verse.sura.firstVerse && verse.sura.startsWithBesmAllah ? [verse.quran.arabicBesmAllah] : []\n            let verseText = VerseText(arabicText: arabicText, translations: ayahTranslations, arabicPrefix: prefix, arabicSuffix: [])\n            versesText.append(verseText)\n        }\n        return versesText\n    }\n\n    private func retrieveArabicText(verses: [AyahNumber]) async throws -> [String] {\n        let versesText = try await arabicPersistence.textForVerses(verses)\n        var verseTextList: [String] = []\n        for verse in verses {\n            let text = versesText[verse]!\n            verseTextList.append(text)\n        }\n        return verseTextList\n    }\n\n    private func fetchTranslationsText(\n        verses: [AyahNumber],\n        translations: [Translation]\n    ) async -> [(Translation, [TranslationText])] {\n        await withTaskGroup(of: (Translation, [TranslationText]).self) { group in\n            for translation in translations {\n                group.addTask {\n                    await fetchTranslation(verses: verses, translation: translation)\n                }\n            }\n            let result = await group.collect()\n            return result.sortedAs(translations.map(\\.id), by: \\.0.id)\n        }\n    }\n\n    private func fetchTranslation(\n        verses: [AyahNumber],\n        translation: Translation\n    ) async -> (Translation, [TranslationText]) {\n        let translationPersistence = translationsPersistenceBuilder(translation)\n\n        var verseTextList: [TranslationText] = []\n        do {\n            let versesText = try await translationPersistence.textForVerses(verses)\n            // TODO: Use TaskGroup.\n            for verse in verses {\n                let text = versesText[verse] ?? .string(l(\"error.translation.text-not-available\"))\n                verseTextList.append(translationText(text))\n            }\n        } catch {\n            crasher.recordError(\n                error,\n                reason: \"Issue getting verse \\(verses), translation: \\(translation.id)\"\n            )\n            let errorText = l(\"error.translation.text-retrieval\")\n            for _ in verses {\n                verseTextList.append(.string(TranslationString(text: errorText, quranRanges: [], footnoteRanges: [], footnotes: [])))\n            }\n        }\n        return (translation, verseTextList)\n    }\n\n    private func translationText(_ from: TranslationTextPersistenceModel) -> TranslationText {\n        switch from {\n        case .string(let string):\n            return .string(translationString(string))\n        case .reference(let verse):\n            return .reference(verse)\n        }\n    }\n\n    private func translationString(_ originalString: String) -> TranslationString {\n        let footnoteTextRanges = originalString.ranges(of: Self.footnotesRegex)\n        let footnotes = footnoteTextRanges.map { originalString[$0] }\n        let (string, footnoteRanges) = originalString.replacing(\n            sortedRanges: footnoteTextRanges)\n        { _, index -> String in\n            lFormat(\"translation.text.footnote-number\", index + 1)\n        }\n\n        let quranRanges = string.ranges(of: Self.quranRegex)\n        return TranslationString(text: string, quranRanges: quranRanges, footnoteRanges: footnoteRanges, footnotes: footnotes)\n    }\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Sources/TwoPages/TwoPagesUtils.swift",
    "content": "//\n//  TwoPagesUtils.swift\n//\n//\n//  Created by Zubair Khan on 2022-11-12.\n//\n\nimport UIKit\n\npublic enum TwoPagesUtils {\n    public static var settingDefaultValue: Bool {\n        // Enable by default, if not an iPhone\n        UIDevice.current.userInterfaceIdiom != .phone\n    }\n\n    public static func hasEnoughHorizontalSpace() -> Bool {\n        UIScreen.main.bounds.width > 900\n    }\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Tests/CompositeSearcherTests.swift",
    "content": "//\n//  CompositeSearcherTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-01-16.\n//\n\nimport Localization\nimport QuranKit\nimport QuranText\nimport SnapshotTesting\nimport TranslationServiceFake\nimport VerseTextPersistence\nimport XCTest\n@testable import QuranTextKit\n\nclass CompositeSearcherTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUp() async throws {\n        try await super.setUp()\n\n        localTranslationsFake = LocalTranslationsFake()\n        let translationsRetriever = localTranslationsFake.retriever\n        try await localTranslationsFake.setTranslations(translations)\n\n        let persistence = GRDBQuranVerseTextPersistence(mode: .arabic, fileURL: TestData.quranTextURL)\n\n        searcher = CompositeSearcher(\n            quranVerseTextPersistence: persistence,\n            localTranslationRetriever: translationsRetriever,\n            versePersistenceBuilder: TestData.translationsPersistenceBuilder\n        )\n    }\n\n    override func tearDown() {\n        super.tearDown()\n        localTranslationsFake.tearDown()\n        localTranslationsFake = nil\n        searcher = nil\n    }\n\n    func testNumbers() async throws {\n        await autocompleteNumber(\"4\")\n        await autocompleteNumber(\"44\")\n        await autocompleteNumber(\"444\")\n        await autocompleteNumber(\"4444\")\n        await autocompleteNumber(\"3:4\")\n\n        try await testSearch(term: \"1\")\n        try await testSearch(term: \"33\")\n        try await testSearch(term: \"68:1\") // Verse\n    }\n\n    func testSearchInvalidNumber() async throws {\n        let result = try await searcher.search(for: \"605\", quran: quran)\n        XCTAssertEqual(result, [])\n    }\n\n    func testMatchOneSura() async throws {\n        await testAutocomplete(term: \"Al-Ahzab\")\n        try await testSearch(term: \"Al-Ahzab\")\n    }\n\n    func testMatchMultipleSuras() async throws {\n        await testAutocomplete(term: \"Yu\")\n        try await testSearch(term: \"Yu\")\n    }\n\n    func testMatchSuraAndQuran() async throws {\n        await testAutocomplete(term: \"الفات\") // Al-fatiha\n        await testAutocomplete(term: \"الاحۡ\") // Al-Ahzab\n        await testAutocomplete(term: \"الأَعۡلَ\") // Al-A'la\n\n        try await testSearch(term: \"الفات\") // Al-fatiha\n        try await testSearch(term: \"الاحۡ\") // Al-Ahzab\n        try await testSearch(term: \"الأَعۡلَ\") // Al-A'la\n    }\n\n    func testMatchArabicSuraName() async throws {\n        await testAutocomplete(term: \"النحل\")\n        try await testSearch(term: \"النحل\")\n    }\n\n    func testMatchSuraAndQuranWithIncorrectTashkeel() async throws {\n        await testAutocomplete(term: \"فُتح\")\n        try await testSearch(term: \"فُتح\")\n    }\n\n    func testMatchArabicQuran() async throws {\n        let term = \"لكنا\"\n        await testAutocomplete(term: term)\n        try await testSearch(term: term)\n    }\n\n    func testMatchTranslation() async throws {\n        await testAutocomplete(term: \"All\")\n        try await testSearch(term: \"All\")\n    }\n\n    func test_autocomplete_allSuras_prefixed() async {\n        await enumerateAllSuras { sura, language in\n            // Autocomplete sura name unchanged.\n            let suraName = sura.localizedName(withPrefix: false, language: language)\n            let suraNamePrefix = prefixSuraName(suraName)\n            let result = await searcher.autocomplete(term: suraNamePrefix, quran: quran)\n                .map { $0.removeInvalidSearchCharacters() }\n            let strippedSuraName = suraName.removeInvalidSearchCharacters()\n            XCTAssertTrue(result.contains(strippedSuraName), \"[\\(language)] \\(result) doesn't contain \\(strippedSuraName)\")\n        }\n    }\n\n    func test_match_allSuras_removeInvalidSearchCharacters() async throws {\n        try await enumerateAllSuras { sura, language in\n            let suraName = sura.localizedName(withPrefix: false, language: language)\n            let fullSuraName = sura.localizedName(withPrefix: true, language: language)\n            let cleanedSuraName = suraName.removeInvalidSearchCharacters()\n            let cleanedSuraNamePrefix = prefixSuraName(cleanedSuraName)\n\n            // Check autocomplete partial pure letters and spaces sura name results contains the full sura name.\n            let autocompleteResult = await searcher.autocomplete(term: cleanedSuraNamePrefix, quran: quran)\n                .map { $0.removeInvalidSearchCharacters() }\n            XCTAssertTrue(autocompleteResult.contains(cleanedSuraName), \"[\\(language)] \\(autocompleteResult) doesn't contain \\(cleanedSuraName)\")\n\n            // Check search partial pure letters and spaces sura name results contains the full sura name.\n            let searchResult = try await searcher.search(for: cleanedSuraNamePrefix, quran: quran)\n                .flatMap { $0.items.map(\\.text) }\n            XCTAssertTrue(searchResult.contains(fullSuraName), \"[\\(language)] \\(searchResult) doesn't contain \\(fullSuraName)\")\n        }\n    }\n\n    // MARK: Private\n\n    private var searcher: CompositeSearcher!\n    private var localTranslationsFake: LocalTranslationsFake!\n    private let quran = Quran.hafsMadani1405\n\n    private let translations = [\n        TestData.khanTranslation,\n        TestData.sahihTranslation,\n    ]\n\n    private func autocompleteNumber(_ number: String) async {\n        let result = await searcher.autocomplete(term: number, quran: quran)\n        XCTAssertEqual(result, [number])\n    }\n\n    @MainActor\n    private func testAutocomplete(term: String, record: Bool = false, testName: String = #function) async {\n        let result = await searcher.autocomplete(term: term, quran: quran)\n\n        // assert the text\n        assertSnapshot(matching: result.sorted(), as: .json, record: record, testName: testName)\n    }\n\n    @MainActor\n    private func testSearch(term: String, record: Bool = false, testName: String = #function) async throws {\n        let result = try await searcher.search(for: term, quran: quran)\n\n        // assert the text\n        assertSnapshot(matching: EncodableSearchResults(results: result), as: .json, record: record, testName: testName)\n    }\n\n    private func enumerateAllSuras(_ block: (Sura, Language) async throws -> Void) async rethrows {\n        for language in [Language.arabic, Language.english] {\n            for sura in quran.suras {\n                try await block(sura, language)\n            }\n        }\n    }\n\n    private func prefixSuraName(_ suraName: String) -> String {\n        suraName.count == 1 ? suraName : String(suraName.prefix(suraName.count - 1))\n    }\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Tests/Encoding.swift",
    "content": "//\n//  Encoding.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-01-16.\n//\n\nimport QuranText\n\nstruct EncodableSearchResults: Encodable {\n    // MARK: Internal\n\n    let results: [SearchResults]\n\n    // MARK: Encodable\n\n    func encode(to encoder: Encoder) throws {\n        var container = encoder.unkeyedContainer()\n        for result in results {\n            try container.encode(EncodableSearchResult(result: result))\n        }\n    }\n}\n\nprivate struct EncodableSearchResult: Encodable {\n    // MARK: Internal\n\n    let result: SearchResults\n\n    // MARK: Private\n\n    private enum CodingKeys: String, CodingKey {\n        case source\n        case items\n    }\n\n    func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        try container.encode(EncodableSearchSource(source: result.source), forKey: .source)\n        try container.encode(result.items.map(EncodableSearchResultItem.init), forKey: .items)\n    }\n}\n\nprivate struct EncodableSearchSource: Encodable {\n    // MARK: Internal\n\n    let source: SearchResults.Source\n\n    // MARK: Private\n\n    private enum CodingKeys: String, CodingKey {\n        case rawKey\n    }\n\n    func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        switch source {\n        case .quran:\n            try container.encode(source.name.lowercased(), forKey: .rawKey)\n        case .translation(let translation):\n            try container.encode(\"\\(source.name.lowercased()): \\(translation.id)\", forKey: .rawKey)\n        }\n    }\n}\n\nprivate struct EncodableSearchResultItem: Encodable {\n    // MARK: Internal\n\n    let result: SearchResult\n\n    // MARK: Private\n\n    private enum CodingKeys: String, CodingKey {\n        case text\n        case ayah\n    }\n\n    func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        try container.encode(result.text, forKey: .text)\n        try container.encode(result.ayah, forKey: .ayah)\n    }\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Tests/QuartersDataRetrieverTests.swift",
    "content": "//\n//  QuartersDataRetrieverTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-06.\n//\n\nimport QuranKit\nimport XCTest\n@testable import QuranTextKit\n\nfinal class QuartersDataRetrieverTests: XCTestCase {\n    // MARK: Internal\n\n    func testQuarterLocalization() {\n        XCTAssertEqual(\"Hizb 1\", quran.quarters[0].localizedName)\n        XCTAssertEqual(\"¼ Hizb 1\", quran.quarters[1].localizedName)\n        XCTAssertEqual(\"½ Hizb 1\", quran.quarters[2].localizedName)\n        XCTAssertEqual(\"¾ Hizb 1\", quran.quarters[3].localizedName)\n        XCTAssertEqual(\"Hizb 2\", quran.quarters[4].localizedName)\n    }\n\n    func testPageQuarterInfo() {\n        XCTAssertEqual(\"Juz' 1, Hizb 1\", quran.pages[0].localizedQuarterName)\n        XCTAssertEqual(\"Juz' 1\", quran.pages[1].localizedQuarterName)\n        XCTAssertEqual(\"Juz' 1\", quran.pages[2].localizedQuarterName)\n        XCTAssertEqual(\"Juz' 1\", quran.pages[3].localizedQuarterName)\n        XCTAssertEqual(\"Juz' 1, ¼ Hizb 1\", quran.pages[4].localizedQuarterName)\n        XCTAssertEqual(\"Juz' 1\", quran.pages[5].localizedQuarterName)\n        XCTAssertEqual(\"Juz' 1, ½ Hizb 1\", quran.pages[6].localizedQuarterName)\n        XCTAssertEqual(\"Juz' 1\", quran.pages[7].localizedQuarterName)\n        XCTAssertEqual(\"Juz' 1, ¾ Hizb 1\", quran.pages[8].localizedQuarterName)\n        XCTAssertEqual(\"Juz' 1\", quran.pages[9].localizedQuarterName)\n        XCTAssertEqual(\"Juz' 1, Hizb 2\", quran.pages[10].localizedQuarterName)\n        XCTAssertEqual(\"Juz' 1\", quran.pages[11].localizedQuarterName)\n        XCTAssertEqual(\"Juz' 30, ¾ Hizb 60\", quran.pages[598].localizedQuarterName)\n        XCTAssertEqual(\"Juz' 30\", quran.pages[599].localizedQuarterName)\n    }\n\n    // MARK: Private\n\n    private let quran = Quran.hafsMadani1405\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Tests/QuranTextDataServiceTests.swift",
    "content": "//\n//  QuranTextDataServiceTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-18.\n//\n\nimport QuranKit\nimport QuranText\nimport TranslationServiceFake\nimport VerseTextPersistence\nimport XCTest\n@testable import QuranTextKit\n@testable import TranslationService\n\nfinal class QuranTextDataServiceTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUp() async throws {\n        try await super.setUp()\n\n        localTranslationsFake = LocalTranslationsFake()\n        let localtranslationsRetriever = localTranslationsFake.retriever\n        let persistence = GRDBQuranVerseTextPersistence(mode: .arabic, fileURL: TestData.quranTextURL)\n        textService = QuranTextDataService(\n            localTranslationRetriever: localtranslationsRetriever,\n            arabicPersistence: persistence,\n            translationsPersistenceBuilder: TestData.translationsPersistenceBuilder\n        )\n\n        let selectedTranslationsPreferences = SelectedTranslationsPreferences.shared\n        selectedTranslationsPreferences.selectedTranslationIds = translations.map(\\.id)\n\n        try await localTranslationsFake.setTranslations(translations)\n    }\n\n    override func tearDown() {\n        super.tearDown()\n        localTranslationsFake.tearDown()\n        localTranslationsFake = nil\n        textService = nil\n    }\n\n    func testArabicNoTranslation() async throws {\n        let tests = [\n            [quran.suras[0].verses[0]],\n            [quran.suras[0].verses[1]],\n            [quran.suras[0].verses[1], quran.suras[0].verses[2]],\n            [quran.suras[1].verses[0]],\n        ]\n        for verses in tests {\n            let versesText = try await textService.textForVerses(verses, translations: [])\n\n            let expectedVerses = verses.map {\n                VerseText(\n                    arabicText: TestData.quranTextAt($0),\n                    translations: [],\n                    arabicPrefix: $0 == quran.suras[1].verses[0] ? [TestData.quranTextAt(quran.firstVerse)] : [],\n                    arabicSuffix: []\n                )\n            }\n            let expected = Dictionary(uniqueKeysWithValues: zip(verses, expectedVerses))\n            XCTAssertEqual(expected, versesText)\n        }\n    }\n\n    func testWithTranslations() async throws {\n        let tests = [\n            [quran.suras[0].verses[1]],\n            [quran.suras[0].verses[1], quran.suras[0].verses[2]],\n        ]\n        for verses in tests {\n            let versesText = try await textService.textForVerses(verses, translations: translations)\n\n            let expectedVerses = verses.map { verse in\n                VerseText(\n                    arabicText: TestData.quranTextAt(verse),\n                    translations: translations.map {\n                        .string(TranslationString(text: TestData.translationTextAt($0, verse), quranRanges: [], footnoteRanges: [], footnotes: []))\n                    },\n                    arabicPrefix: [],\n                    arabicSuffix: []\n                )\n            }\n            let expected = Dictionary(uniqueKeysWithValues: zip(verses, expectedVerses))\n            XCTAssertEqual(expected, versesText)\n        }\n    }\n\n    func testTranslationWithFooterAndVerses() async throws {\n        let translations = [TestData.khanTranslation]\n        try await localTranslationsFake.setTranslations(translations)\n\n        let verse = quran.suras[0].verses[5]\n        let versesText = try await textService.textForVerses([verse], translations: translations)\n\n        let translationText = TestData.translationTextAt(translations[0], verse)\n        let textWithoutFootnotes = \"Guide us to the Straight Way.  {ABC} [1] {DE} [2] FG\"\n        let string = TranslationString(\n            text: textWithoutFootnotes,\n            quranRanges: [\n                textWithoutFootnotes.range(of: \"{ABC}\"),\n                textWithoutFootnotes.range(of: \"{DE}\"),\n            ].compactMap { $0 },\n            footnoteRanges: [\n                textWithoutFootnotes.range(of: \"[1]\"),\n                textWithoutFootnotes.range(of: \"[2]\"),\n            ].compactMap { $0 },\n            footnotes: [\n                translationText.range(of: \"[[Footer1]]\"),\n                translationText.range(of: \"[[Footer2]]\"),\n            ].compactMap { $0 }.map { translationText[$0] }\n        )\n        let expectedVerse = VerseText(\n            arabicText: TestData.quranTextAt(verse),\n            translations: [.string(string)],\n            arabicPrefix: [],\n            arabicSuffix: []\n        )\n        let expected = [verse: expectedVerse]\n        XCTAssertEqual(expected, versesText)\n    }\n\n    // MARK: Private\n\n    private var textService: QuranTextDataService!\n    private var localTranslationsFake: LocalTranslationsFake!\n    private let quran = Quran.hafsMadani1405\n\n    private let translations = [\n        TestData.khanTranslation,\n        TestData.sahihTranslation,\n    ]\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Tests/SearchRecentsServiceTests.swift",
    "content": "//\n//  SearchRecentsServiceTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-01-18.\n//\n\nimport SnapshotTesting\nimport XCTest\n@testable import QuranTextKit\n\nclass SearchRecentsServiceTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUpWithError() throws {\n        service = SearchRecentsService.shared\n        service.reset()\n    }\n\n    func testPopularTerms() {\n        assertSnapshot(matching: service.popularTerms, as: .json)\n\n        service.recentSearchItems = [\"1\", \"2\"]\n        assertSnapshot(matching: service.popularTerms, as: .json)\n    }\n\n    func testRecents() {\n        XCTAssertEqual(service.recentSearchItems, [])\n\n        // adding elements in sorted way\n        service.addToRecents(\"1\")\n        service.addToRecents(\"4\")\n        XCTAssertEqual(service.recentSearchItems, [\"4\", \"1\"])\n\n        // repeated elements are moved to the front\n        service.addToRecents(\"3\")\n        service.addToRecents(\"1\")\n        service.addToRecents(\"5\")\n        XCTAssertEqual(service.recentSearchItems, [\"5\", \"1\", \"3\", \"4\"])\n\n        service.addToRecents(\"6\")\n        service.addToRecents(\"7\")\n        XCTAssertEqual(service.recentSearchItems, [\"7\", \"6\", \"5\", \"1\", \"3\"])\n    }\n\n    // MARK: Private\n\n    private var service: SearchRecentsService!\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Tests/ShareableVerseTextRetrieverTests.swift",
    "content": "//\n//  ShareableVerseTextRetrieverTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-19.\n//\n\nimport QuranKit\nimport TranslationService\nimport TranslationServiceFake\nimport VerseTextPersistence\nimport XCTest\n@testable import QuranTextKit\n\nfinal class ShareableVerseTextRetrieverTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUp() async throws {\n        try await super.setUp()\n\n        localTranslationsFake = LocalTranslationsFake()\n        let localtranslationsRetriever = localTranslationsFake.retriever\n        let persistence = GRDBQuranVerseTextPersistence(mode: .share, fileURL: TestData.quranTextURL)\n        textService = QuranTextDataService(\n            localTranslationRetriever: localtranslationsRetriever,\n            arabicPersistence: persistence,\n            translationsPersistenceBuilder: TestData.translationsPersistenceBuilder\n        )\n\n        shareableTextRetriever = ShareableVerseTextRetriever(\n            textService: textService,\n            shareableVersePersistence: persistence,\n            localTranslationsRetriever: localtranslationsRetriever\n        )\n\n        let selectedTranslationsPreferences = SelectedTranslationsPreferences.shared\n        selectedTranslationsPreferences.selectedTranslationIds = translations.map(\\.id)\n\n        try await localTranslationsFake.setTranslations(translations)\n    }\n\n    override func tearDown() {\n        super.tearDown()\n        localTranslationsFake.tearDown()\n        localTranslationsFake = nil\n        textService = nil\n        shareableTextRetriever = nil\n    }\n\n    func testShareArabicText() async throws {\n        statePreferences.quranMode = .arabic\n        let tests = [\n            (\n                verses: [quran.suras[0].verses[2]],\n                result: [\"\\(rightToLeftMark)ٱلرَّحۡمَـٰنِ ٱلرَّحِیمِ﴿ ٣ ﴾\\(endMark)\",\n                         \"\",\n                         \"Al-Fātihah, Ayah 3\"]\n            ),\n            (\n                verses: [quran.suras[0].verses[0], quran.suras[0].verses[1], quran.suras[0].verses[2]],\n                result: [\"\\(rightToLeftMark)بِسۡمِ ٱللَّهِ ٱلرَّحۡمَـٰنِ ٱلرَّحِیمِ﴿ ١ ﴾\\(endMark) \\(rightToLeftMark)ٱلۡحَمۡدُ لِلَّهِ رَبِّ ٱلۡعَـٰلَمِینَ﴿ ٢ ﴾\\(endMark) \\(rightToLeftMark)ٱلرَّحۡمَـٰنِ ٱلرَّحِیمِ﴿ ٣ ﴾\\(endMark)\",\n                         \"\",\n                         \"Al-Fātihah, Ayah 1 - Al-Fātihah, Ayah 3\"]\n            ),\n        ]\n        for test in tests {\n            let versesText = try await shareableTextRetriever.textForVerses(test.verses)\n            XCTAssertEqual(test.result, versesText)\n        }\n    }\n\n    func testShareTranslationText() async throws {\n        statePreferences.quranMode = .translation\n\n        let tests = [\n            (\n                verses: [quran.suras[0].verses[2]],\n                result: [\"\\(rightToLeftMark)ٱلرَّحۡمَـٰنِ ٱلرَّحِیمِ﴿ ٣ ﴾\\(endMark)\",\n                         \"\",\n                         \"• Khan & Hilai:\",\n                         TestData.translationTextAt(translations[0], quran.suras[0].verses[2]),\n                         \"\",\n                         \"• Sahih International:\",\n                         TestData.translationTextAt(translations[1], quran.suras[0].verses[2]),\n                         \"\",\n                         \"Al-Fātihah, Ayah 3\"]\n            ),\n            (\n                verses: [quran.suras[0].verses[0], quran.suras[0].verses[1], quran.suras[0].verses[2]],\n                result: [\"\\(rightToLeftMark)بِسۡمِ ٱللَّهِ ٱلرَّحۡمَـٰنِ ٱلرَّحِیمِ﴿ ١ ﴾\\(endMark) \\(rightToLeftMark)ٱلۡحَمۡدُ لِلَّهِ رَبِّ ٱلۡعَـٰلَمِینَ﴿ ٢ ﴾\\(endMark) \\(rightToLeftMark)ٱلرَّحۡمَـٰنِ ٱلرَّحِیمِ﴿ ٣ ﴾\\(endMark)\",\n                         \"\",\n                         \"• Khan & Hilai:\",\n                         TestData.translationTextAt(translations[0], quran.suras[0].verses[0]),\n                         TestData.translationTextAt(translations[0], quran.suras[0].verses[1]),\n                         TestData.translationTextAt(translations[0], quran.suras[0].verses[2]),\n                         \"\",\n                         \"• Sahih International:\",\n                         TestData.translationTextAt(translations[1], quran.suras[0].verses[0]),\n                         TestData.translationTextAt(translations[1], quran.suras[0].verses[1]),\n                         TestData.translationTextAt(translations[1], quran.suras[0].verses[2]),\n                         \"\",\n                         \"Al-Fātihah, Ayah 1 - Al-Fātihah, Ayah 3\"]\n            ),\n        ]\n        for test in tests {\n            let versesText = try await shareableTextRetriever.textForVerses(test.verses)\n            XCTAssertEqual(test.result, versesText)\n        }\n    }\n\n    func testShareTranslationTextReferenceVerse() async throws {\n        statePreferences.quranMode = .translation\n\n        try await localTranslationsFake.setTranslations([TestData.khanTranslation])\n\n        let numberReference = try await shareableTextRetriever.textForVerses([quran.suras[1].verses[49]])\n        XCTAssertEqual(numberReference, [\"\\(rightToLeftMark)وَإِذۡ فَرَقۡنَا بِكُمُ ٱلۡبَحۡرَ فَأَنجَیۡنَـٰكُمۡ وَأَغۡرَقۡنَاۤ ءَالَ فِرۡعَوۡنَ وَأَنتُمۡ تَنظُرُونَ﴿ ٥٠ ﴾\\(endMark)\",\n                                         \"\",\n                                         \"• Khan & Hilai:\",\n                                         \"See ayah 38.\",\n                                         \"\",\n                                         \"Al-Baqarah, Ayah 50\"])\n\n        let verseSavedAsTextReference = try await shareableTextRetriever.textForVerses([quran.suras[1].verses[50]])\n        XCTAssertEqual(verseSavedAsTextReference, [\"\\(rightToLeftMark)وَإِذۡ وَ ٰ⁠عَدۡنَا مُوسَىٰۤ أَرۡبَعِینَ لَیۡلَةࣰ ثُمَّ ٱتَّخَذۡتُمُ ٱلۡعِجۡلَ مِنۢ بَعۡدِهِۦ وَأَنتُمۡ ظَـٰلِمُونَ﴿ ٥١ ﴾\\(endMark)\",\n                                                   \"\",\n                                                   \"• Khan & Hilai:\",\n                                                   \"See ayah 38.\",\n                                                   \"\",\n                                                   \"Al-Baqarah, Ayah 51\"])\n    }\n\n    // MARK: Private\n\n    private var shareableTextRetriever: ShareableVerseTextRetriever!\n    private var textService: QuranTextDataService!\n    private var localTranslationsFake: LocalTranslationsFake!\n    private let quran = Quran.hafsMadani1405\n    private let statePreferences = QuranContentStatePreferences.shared\n    private let rightToLeftMark = \"\\u{202B}\"\n    private let endMark = \"\\u{202C}\"\n    private let translations = [\n        TestData.khanTranslation,\n        TestData.sahihTranslation,\n    ]\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Tests/TestData.swift",
    "content": "//\n//  TestData.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-19.\n//\n\nimport QuranKit\nimport QuranResources\nimport QuranText\nimport TestResources\nimport TranslationServiceFake\nimport VerseTextPersistence\n\nenum TestData {\n    static let khanTranslation = TranslationTestData.khanTranslation\n    static let sahihTranslation = TranslationTestData.sahihTranslation\n\n    static let translationsPersistenceBuilder = { (translation: Translation) -> TranslationVerseTextPersistence in\n        let url = TestResources.resourceURL(translation.fileName)\n        return GRDBTranslationVerseTextPersistence(fileURL: url)\n    }\n\n    static let quranTextURL = QuranResources.quranUthmaniV2Database\n\n    static func quranTextAt(_ verse: AyahNumber) -> String {\n        quranText[verse] ?? \"Not added to TestData.swift\"\n    }\n\n    static func translationTextAt(_ translation: Translation, _ verse: AyahNumber) -> String {\n        let translationTextDict = translationText[translation]!\n        return translationTextDict[verse]!\n    }\n}\n\nprivate let quran = Quran.hafsMadani1405\n\nprivate let quranText: [AyahNumber: String] = [\n    quran.suras[0].verses[0]: \"بِسۡمِ ٱللَّهِ ٱلرَّحۡمَٰنِ ٱلرَّحِيمِ\",\n    quran.suras[0].verses[1]: \"ٱلۡحَمۡدُ لِلَّهِ رَبِّ ٱلۡعَٰلَمِينَ\",\n    quran.suras[0].verses[5]: \"ٱهۡدِنَا ٱلصِّرَٰطَ ٱلۡمُسۡتَقِيمَ\",\n    quran.suras[0].verses[2]: \"ٱلرَّحۡمَٰنِ ٱلرَّحِيمِ\",\n    quran.suras[1].verses[0]: \"الٓمٓ\",\n]\n\nprivate let translationText: [Translation: [AyahNumber: String]] = [\n    TestData.khanTranslation: [\n        quran.suras[0].verses[0]: \"In the Name of Allah, the Most Beneficent, the Most Merciful.\",\n        quran.suras[0].verses[1]: \"All the praises and thanks be to Allah, the Lord of the 'Alamin (mankind, jinns and all that exists).\",\n        quran.suras[0].verses[2]: \"The Most Beneficent, the Most Merciful.\",\n        quran.suras[0].verses[5]: \"Guide us to the Straight Way.  {ABC} [[Footer1]] {DE} [[Footer2]] FG\",\n    ],\n    TestData.sahihTranslation: [\n        quran.suras[0].verses[0]: \"In the name of Allah, the Entirely Merciful, the Especially Merciful.\",\n        quran.suras[0].verses[1]: \"[All] praise is [due] to Allah, Lord of the worlds -\",\n        quran.suras[0].verses[2]: \"The Entirely Merciful, the Especially Merciful,\",\n    ],\n]\n"
  },
  {
    "path": "Domain/QuranTextKit/Tests/TwoPagesUtilsTests.swift",
    "content": "//\n//  TwoPagesUtilsTests.swift\n//\n//\n//  Created by Zubair Khan on 2022-11-12.\n//\n\nimport XCTest\n@testable import QuranTextKit\n\nclass TwoPagesUtilsTests: XCTestCase {\n    func testHasEnoughHorizontalSpace() throws {\n        let hasEnoughSpace = TwoPagesUtils.hasEnoughHorizontalSpace()\n        if UIScreen.main.bounds.width > 900 {\n            XCTAssertTrue(hasEnoughSpace)\n        } else {\n            XCTAssertFalse(hasEnoughSpace)\n        }\n    }\n}\n"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchArabicQuran.1.json",
    "content": "[\n  \"لكنا\",\n  \"لكنا أهدى منهم فقد جاءكم\",\n  \"لكنا عباد الله المخلصين\",\n  \"لكنا مؤمنين\",\n  \"لكنا هو الله ربي ولا\"\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchArabicQuran.2.json",
    "content": "[\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 6\n        },\n        \"text\" : \"ألم يروا كم أهلكنا من قبلهم من قرن مكناهم في الأرض ما لم نمكن لكم وأرسلنا السماء عليهم مدرارا وجعلنا الأنهار تجري من تحتهم فأهلكناهم بذنوبهم وأنشأنا من بعدهم قرنا آخرين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 157,\n          \"sura\" : 6\n        },\n        \"text\" : \"أو تقولوا لو أنا أنزل علينا الكتاب لكنا أهدى منهم فقد جاءكم بينة من ربكم وهدى ورحمة فمن أظلم ممن كذب بآيات الله وصدف عنها سنجزي الذين يصدفون عن آياتنا سوء العذاب بما كانوا يصدفون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 7\n        },\n        \"text\" : \"وكم من قرية أهلكناها فجاءها بأسنا بياتا أو هم قائلون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 155,\n          \"sura\" : 7\n        },\n        \"text\" : \"واختار موسى قومه سبعين رجلا لميقاتنا فلما أخذتهم الرجفة قال رب لو شئت أهلكتهم من قبل وإياي أتهلكنا بما فعل السفهاء منا إن هي إلا فتنتك تضل بها من تشاء وتهدي من تشاء أنت ولينا فاغفر لنا وارحمنا وأنت خير الغافرين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 173,\n          \"sura\" : 7\n        },\n        \"text\" : \"أو تقولوا إنما أشرك آباؤنا من قبل وكنا ذرية من بعدهم أفتهلكنا بما فعل المبطلون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 8\n        },\n        \"text\" : \"كدأب آل فرعون والذين من قبلهم كذبوا بآيات ربهم فأهلكناهم بذنوبهم وأغرقنا آل فرعون وكل كانوا ظالمين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 10\n        },\n        \"text\" : \"ولقد أهلكنا القرون من قبلكم لما ظلموا وجاءتهم رسلهم بالبينات وما كانوا ليؤمنوا كذلك نجزي القوم المجرمين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 15\n        },\n        \"text\" : \"وما أهلكنا من قرية إلا ولها كتاب معلوم\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 17\n        },\n        \"text\" : \"وكم أهلكنا من القرون من بعد نوح وكفى بربك بذنوب عباده خبيرا بصيرا\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 18\n        },\n        \"text\" : \"لكنا هو الله ربي ولا أشرك بربي أحدا\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 18\n        },\n        \"text\" : \"وتلك القرى أهلكناهم لما ظلموا وجعلنا لمهلكهم موعدا\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 19\n        },\n        \"text\" : \"وكم أهلكنا قبلهم من قرن هم أحسن أثاثا ورئيا\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 19\n        },\n        \"text\" : \"وكم أهلكنا قبلهم من قرن هل تحس منهم من أحد أو تسمع لهم ركزا\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 20\n        },\n        \"text\" : \"قالوا ما أخلفنا موعدك بملكنا ولكنا حملنا أوزارا من زينة القوم فقذفناها فكذلك ألقى السامري\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 128,\n          \"sura\" : 20\n        },\n        \"text\" : \"أفلم يهد لهم كم أهلكنا قبلهم من القرون يمشون في مساكنهم إن في ذلك لآيات لأولي النهى\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 134,\n          \"sura\" : 20\n        },\n        \"text\" : \"ولو أنا أهلكناهم بعذاب من قبله لقالوا ربنا لولا أرسلت إلينا رسولا فنتبع آياتك من قبل أن نذل ونخزى\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 21\n        },\n        \"text\" : \"ما آمنت قبلهم من قرية أهلكناها أفهم يؤمنون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 21\n        },\n        \"text\" : \"ثم صدقناهم الوعد فأنجيناهم ومن نشاء وأهلكنا المسرفين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 21\n        },\n        \"text\" : \"وحرام على قرية أهلكناها أنهم لا يرجعون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 22\n        },\n        \"text\" : \"فكأين من قرية أهلكناها وهي ظالمة فهي خاوية على عروشها وبئر معطلة وقصر مشيد\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 139,\n          \"sura\" : 26\n        },\n        \"text\" : \"فكذبوه فأهلكناهم إن في ذلك لآية وما كان أكثرهم مؤمنين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 200,\n          \"sura\" : 26\n        },\n        \"text\" : \"كذلك سلكناه في قلوب المجرمين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 208,\n          \"sura\" : 26\n        },\n        \"text\" : \"وما أهلكنا من قرية إلا لها منذرون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 28\n        },\n        \"text\" : \"ولقد آتينا موسى الكتاب من بعد ما أهلكنا القرون الأولى بصائر للناس وهدى ورحمة لعلهم يتذكرون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 28\n        },\n        \"text\" : \"ولكنا أنشأنا قرونا فتطاول عليهم العمر وما كنت ثاويا في أهل مدين تتلو عليهم آياتنا ولكنا كنا مرسلين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 28\n        },\n        \"text\" : \"وكم أهلكنا من قرية بطرت معيشتها فتلك مساكنهم لم تسكن من بعدهم إلا قليلا وكنا نحن الوارثين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 32\n        },\n        \"text\" : \"أولم يهد لهم كم أهلكنا من قبلهم من القرون يمشون في مساكنهم إن في ذلك لآيات أفلا يسمعون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 34\n        },\n        \"text\" : \"وقال الذين كفروا لن نؤمن بهذا القرآن ولا بالذي بين يديه ولو ترى إذ الظالمون موقوفون عند ربهم يرجع بعضهم إلى بعض القول يقول الذين استضعفوا للذين استكبروا لولا أنتم لكنا مؤمنين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 36\n        },\n        \"text\" : \"ألم يروا كم أهلكنا قبلهم من القرون أنهم إليهم لا يرجعون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 169,\n          \"sura\" : 37\n        },\n        \"text\" : \"لكنا عباد الله المخلصين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 38\n        },\n        \"text\" : \"كم أهلكنا من قبلهم من قرن فنادوا ولات حين مناص\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 43\n        },\n        \"text\" : \"فأهلكنا أشد منهم بطشا ومضى مثل الأولين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 44\n        },\n        \"text\" : \"أهم خير أم قوم تبع والذين من قبلهم أهلكناهم إنهم كانوا مجرمين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 45\n        },\n        \"text\" : \"وقالوا ما هي إلا حياتنا الدنيا نموت ونحيا وما يهلكنا إلا الدهر وما لهم بذلك من علم إن هم إلا يظنون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 46\n        },\n        \"text\" : \"ولقد أهلكنا ما حولكم من القرى وصرفنا الآيات لعلهم يرجعون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 47\n        },\n        \"text\" : \"وكأين من قرية هي أشد قوة من قريتك التي أخرجتك أهلكناهم فلا ناصر لهم\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 50\n        },\n        \"text\" : \"وكم أهلكنا قبلهم من قرن هم أشد منهم بطشا فنقبوا في البلاد هل من محيص\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 54\n        },\n        \"text\" : \"ولقد أهلكنا أشياعكم فهل من مدكر\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"quran\"\n    }\n  }\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchArabicSuraName.1.json",
    "content": "[\n  \"النحل\",\n  \"النحل أن اتخذي من الجبال\"\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchArabicSuraName.2.json",
    "content": "[\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 16\n        },\n        \"text\" : \"سُورَةُ ⁨النَّحۡلِ⁩\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 16\n        },\n        \"text\" : \"وأوحى ربك إلى النحل أن اتخذي من الجبال بيوتا ومن الشجر ومما يعرشون\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"quran\"\n    }\n  }\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchMultipleSuras.1.json",
    "content": "[\n  \"Yu\",\n  \"yub (Job), \",\n  \"yunus\",\n  \"yunus (Jonah) and Lout (Lot\",\n  \"yunus (Jonah) was one of\",\n  \"yunus (Jonah), Harun (Aaron), and\",\n  \"yunus (Jonah); when they believed\",\n  \"yusha' (Joshua) and Kalab (Caleb\",\n  \"yusta'tabun (i.e. they shall not\",\n  \"yusuf\",\n  \"yusuf (Joseph) and his brethren\",\n  \"yusuf (Joseph) and his brother\",\n  \"yusuf (Joseph) by our belongings\",\n  \"yusuf (Joseph) did come to\",\n  \"yusuf (Joseph) in the land\",\n  \"yusuf (Joseph) keep in himself\",\n  \"yusuf (Joseph) or cast him\",\n  \"yusuf (Joseph) said to his\",\n  \"yusuf (Joseph) said: \\\"I asked\",\n  \"yusuf (Joseph) until you become\",\n  \"yusuf (Joseph)! Turn away from\",\n  \"yusuf (Joseph)!\\\" And he lost\",\n  \"yusuf (Joseph), - when we\",\n  \"yusuf (Joseph), Musa (Moses), and\",\n  \"yusuf (Joseph), and this is\",\n  \"yusuf (Joseph), but if you\",\n  \"yusuf (Joseph), he betook his\",\n  \"yusuf (Joseph), if only you\",\n  \"yusuf (Joseph), the man of\",\n  \"yusuf (Joseph). He could not\",\n  \"yusuf (Joseph)? Therefore I will\",\n  \"yusuf (Joseph)?\\\" He said: \\\"I\",\n  \"yusuf (Joseph)?\\\" The women said\",\n  \"yusuf (Joseph)] attained his full\",\n  \"yusuf (Joseph)] began (the search\",\n  \"yusuf (Joseph)] said: \\\"For seven\",\n  \"yusuf (Joseph)] said: \\\"It was\",\n  \"yusuf (Joseph)] said: \\\"Return to\",\n  \"yusuf (Joseph)] said: \\\"Set me\",\n  \"yusuf (Joseph)] stayed in prison\",\n  \"yusuf (Joseph)] to forget the\",\n  \"yusuf (Joseph)] to you aforetime\",\n  \"yusuf (Joseph)] told his servants\",\n  \"yusuf (Joseph)] who did steal\",\n  \"yusuf (Joseph)], they said: \\\"O\",\n  \"yusuf (Joseph)]: \\\"Come out before\",\n  \"yusuf's (Joseph) brethren came and\",\n  \"yusuf's (Joseph) brothers] said: \\\"If\",\n  \"yusuf's (Joseph) brothers] said: \\\"The\",\n  \"yusuf's (Joseph) men] said: \\\"What\",\n  \"yusuf's (Joseph)] shirt torn at\"\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchMultipleSuras.2.json",
    "content": "[\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 10\n        },\n        \"text\" : \"Surah Yūnus\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 12\n        },\n        \"text\" : \"Surah Yūsuf\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"quran\"\n    }\n  },\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 3\n        },\n        \"text\" : \"It is not (possible) for any human being to whom Allah has given the Book and Al-Hukma (the knowledge and understanding of the laws of religion, etc.) and Prophethood to say to the people: \\\"Be my worshippers rather than Allah's.\\\" On the contrary (he would say): \\\"Be you Rabbaniyun (learned men of religion who practise what they know and also preach others), because you are teaching the Book, and you are studying it.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 163,\n          \"sura\" : 4\n        },\n        \"text\" : \"Verily, We have inspired you (O Muhammad SAW) as We inspired Nuh (Noah) and the Prophets after him; We (also) inspired Ibrahim (Abraham), Isma'il (Ishmael), Ishaque (Isaac), Ya'qub (Jacob), and Al-Asbat [the twelve sons of Ya'qub (Jacob)], 'Iesa (Jesus), Ayub (Job), Yunus (Jonah), Harun (Aaron), and Sulaiman (Solomon), and to Dawud (David) We gave the Zabur (Psalms).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 5\n        },\n        \"text\" : \"Two men of those who feared (Allah and) on whom Allah had bestowed His Grace [they were Yusha' (Joshua) and Kalab (Caleb)] said: \\\"Assault them through the gate, for when you are in, victory will be yours, and put your trust in Allah if you are believers indeed.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 6\n        },\n        \"text\" : \"And We bestowed upon him Ishaque (Isaac) and Ya'qub (Jacob), each of them We guided, and before him, We guided Nuh (Noah), and among his progeny Dawud (David), Sulaiman (Solomon), Ayub (Job), Yusuf (Joseph), Musa (Moses), and Harun (Aaron). Thus do We reward the good-doers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 6\n        },\n        \"text\" : \"And Isma'il (Ishmael) and Al-Yas'a (Elisha), and Yunus (Jonah) and Lout (Lot), and each one of them We preferred above the 'Alamin (mankind and jinns) (of their times).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 10\n        },\n        \"text\" : \"Was there any town (community) that believed (after seeing the punishment), and its Faith (at that moment) saved it (from the punishment)? (The answer is none,) - except the people of Yunus (Jonah); when they believed, We removed from them the torment of disgrace in the life of the (present) world, and permitted them to enjoy for a while.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 12\n        },\n        \"text\" : \"(Remember) when Yusuf (Joseph) said to his father: \\\"O my father! Verily, I saw (in a dream) eleven stars and the sun and the moon, I saw them prostrating themselves to me.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 12\n        },\n        \"text\" : \"Verily, in Yusuf (Joseph) and his brethren, there were Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) for those who ask.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 12\n        },\n        \"text\" : \"When they said: \\\"Truly, Yusuf (Joseph) and his brother (Benjamin) are loved more by our father than we, but we are 'Usbah (a strong group). Really, our father is in a plain error.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 12\n        },\n        \"text\" : \"\\\"Kill Yusuf (Joseph) or cast him out to some (other) land, so that the favour of your father may be given to you alone, and after that you will be righteous folk (by intending repentance before committing the sin).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 12\n        },\n        \"text\" : \"One from among them said: \\\"Kill not Yusuf (Joseph), but if you must do something, throw him down to the bottom of a well, he will be picked up by some caravan of travellers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said: \\\"O our father! Why do you not trust us with Yusuf (Joseph), - when we are indeed his well-wishers?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said:\\\"O our father! We went racing with one another, and left Yusuf (Joseph) by our belongings and a wolf devoured him; but you will never believe us even when we speak the truth.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 12\n        },\n        \"text\" : \"And he (the man) from Egypt who bought him, said to his wife: \\\"Make his stay comfortable, may be he will profit us or we shall adopt him as a son.\\\" Thus did We establish Yusuf (Joseph) in the land, that We might teach him the interpretation of events. And Allah has full power and control over His Affairs, but most of men know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 12\n        },\n        \"text\" : \"And when he [Yusuf (Joseph)] attained his full manhood, We gave him wisdom and knowledge (the Prophethood), thus We reward the Muhsinun (doers of good - see V. 2:112).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 12\n        },\n        \"text\" : \"He [Yusuf (Joseph)] said: \\\"It was she that sought to seduce me,\\\" - and a witness of her household bore witness (saying): \\\"If it be that his shirt is torn from the front, then her tale is true and he is a liar!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 12\n        },\n        \"text\" : \"So when he (her husband) saw his [(Yusuf's (Joseph)] shirt torn at the back; (her husband) said: \\\"Surely, it is a plot of you women! Certainly mighty is your plot!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 12\n        },\n        \"text\" : \"\\\"O Yusuf (Joseph)! Turn away from this! (O woman!) Ask forgiveness for your sin. Verily, you were of the sinful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 12\n        },\n        \"text\" : \"So when she heard of their accusation, she sent for them and prepared a banquet for them; she gave each one of them a knife (to cut the foodstuff with), and she said [(to Yusuf (Joseph)]: \\\"Come out before them.\\\" Then, when they saw him, they exalted him (at his beauty) and (in their astonishment) cut their hands. They said: \\\"How perfect is Allah (or Allah forbid)! No man is this! This is none other than a noble angel!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 12\n        },\n        \"text\" : \"And he said to the one whom he knew to be saved: \\\"Mention me to your lord (i.e. your king, so as to get me out of the prison).\\\" But Shaitan (Satan) made him forget to mention it to his Lord [or Satan made [(Yusuf (Joseph)] to forget the remembrance of his Lord (Allah) as to ask for His Help, instead of others]. So [Yusuf (Joseph)] stayed in prison a few (more) years.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 12\n        },\n        \"text\" : \"(He said): \\\"O Yusuf (Joseph), the man of truth! Explain to us (the dream) of seven fat cows whom seven lean ones were devouring, and of seven green ears of corn, and (seven) others dry, that I may return to the people, and that they may know.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 12\n        },\n        \"text\" : \"[(Yusuf (Joseph)] said: \\\"For seven consecutive years, you shall sow as usual and that (the harvest) which you reap you shall leave in ears, (all) - except a little of it which you may eat.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 12\n        },\n        \"text\" : \"And the king said: \\\"Bring him to me.\\\" But when the messenger came to him, [Yusuf (Joseph)] said: \\\"Return to your lord and ask him, 'What happened to the women who cut their hands? Surely, my Lord (Allah) is Well-Aware of their plot. \"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 12\n        },\n        \"text\" : \"(The King) said (to the women): \\\"What was your affair when you did seek to seduce Yusuf (Joseph)?\\\" The women said: \\\"Allah forbid! No evil know we against him!\\\" The wife of Al-'Aziz said: \\\"Now the truth is manifest (to all), it was I who sought to seduce him, and he is surely of the truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 12\n        },\n        \"text\" : \"[Then Yusuf (Joseph) said: \\\"I asked for this enquiry] in order that he (Al-'Aziz) may know that I betrayed him not in secret. And, verily! Allah guides not the plot of the betrayers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 12\n        },\n        \"text\" : \"[Yusuf (Joseph)] said: \\\"Set me over the storehouses of the land; I will indeed guard them with full knowledge\\\" (as a minister of finance in Egypt, in place of Al-'Aziz who was dead at that time).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 12\n        },\n        \"text\" : \"Thus did We give full authority to Yusuf (Joseph) in the land, to take possession therein, as when or where he likes. We bestow of Our Mercy on whom We please, and We make not to be lost the reward of Al-Muhsinun (the good doers - see V. 2:112).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 12\n        },\n        \"text\" : \"And Yusuf's (Joseph) brethren came and they entered unto him, and he recognized them, but they recognized him not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 12\n        },\n        \"text\" : \"And [Yusuf (Joseph)] told his servants to put their money (with which they had bought the corn) into their bags, so that they might know it when they go back to their people, in order that they might come back.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 12\n        },\n        \"text\" : \"He said: \\\"Can I entrust him to you except as I entrusted his brother [Yusuf (Joseph)] to you aforetime? But Allah is the Best to guard, and He is the Most Merciful of those who show mercy.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 12\n        },\n        \"text\" : \"And when they went in before Yusuf (Joseph), he betook his brother (Benjamin) to himself and said: \\\"Verily! I am your brother, so grieve not for what they used to do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 12\n        },\n        \"text\" : \"They [Yusuf's (Joseph) men] said: \\\"What then shall be the penalty of him, if you are (proved to be) liars.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 12\n        },\n        \"text\" : \"They [Yusuf's (Joseph) brothers] said: \\\"The penalty should be that he, in whose bag it is found, should be held for the punishment (of the crime). Thus we punish the Zalimun (wrong-doers, etc.)!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 12\n        },\n        \"text\" : \"So he [Yusuf (Joseph)] began (the search) in their bags before the bag of his brother. Then he brought it out of his brother's bag. Thus did We plan for Yusuf (Joseph). He could not take his brother by the law of the king (as a slave), except that Allah willed it. (So Allah made the brothers to bind themselves with their way of \\\"punishment, i.e. enslaving of a thief.\\\") We raise to degrees whom We please, but over all those endowed with knowledge is the All-Knowing (Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 12\n        },\n        \"text\" : \"They [(Yusuf's (Joseph) brothers] said: \\\"If he steals, there was a brother of his [Yusuf (Joseph)] who did steal before (him).\\\" But these things did Yusuf (Joseph) keep in himself, revealing not the secrets to them. He said (within himself): \\\"You are in worst case, and Allah knows best the truth of what you assert!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 12\n        },\n        \"text\" : \"So, when they despaired of him, they held a conference in private. The eldest among them said: \\\"Know you not that your father did take an oath from you in Allah's Name, and before this you did fail in your duty with Yusuf (Joseph)? Therefore I will not leave this land until my father permits me, or Allah decides my case (by releasing Benjamin) and He is the Best of the judges.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 12\n        },\n        \"text\" : \"And he turned away from them and said: \\\"Alas, my grief for Yusuf (Joseph)!\\\" And he lost his sight because of the sorrow that he was suppressing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said: \\\"By Allah! You will never cease remembering Yusuf (Joseph) until you become weak with old age, or until you be of the dead.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 12\n        },\n        \"text\" : \"\\\"O my sons! Go you and enquire about Yusuf (Joseph) and his brother, and never give up hope of Allah's Mercy. Certainly no one despairs of Allah's Mercy, except the people who disbelieve.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 12\n        },\n        \"text\" : \"Then, when they entered unto him [Yusuf (Joseph)], they said: \\\"O ruler of the land! A hard time has hit us and our family, and we have brought but poor capital, so pay us full measure and be charitable to us. Truly, Allah does reward the charitable.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 12\n        },\n        \"text\" : \"He said: \\\"Do you know what you did with Yusuf (Joseph) and his brother, when you were ignorant?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said: \\\"Are you indeed Yusuf (Joseph)?\\\" He said: \\\"I am Yusuf (Joseph), and this is my brother (Benjamin). Allah has indeed been gracious to us. Verily, he who fears Allah with obedience to Him (by abstaining from sins and evil deeds, and by performing righteous good deeds), and is patient, then surely, Allah makes not the reward of the Muhsinun (good-doers - see V. 2:112) to be lost.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 12\n        },\n        \"text\" : \"And when the caravan departed, their father said: \\\"I do indeed feel the smell of Yusuf (Joseph), if only you think me not a dotard (a person who has weakness of mind because of old age).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 12\n        },\n        \"text\" : \"Then, when they entered unto Yusuf (Joseph), he betook his parents to himself and said: \\\"Enter Egypt, if Allah wills, in security.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 21\n        },\n        \"text\" : \"And (remember) Ayub (Job), when he cried to his Lord: \\\"Verily, distress has seized me, and You are the Most Merciful of all those who show mercy.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 24\n        },\n        \"text\" : \"And tell the believing women to lower their gaze (from looking at forbidden things), and protect their private parts (from illegal sexual acts, etc.) and not to show off their adornment except only that which is apparent (like palms of hands or one eye or both eyes for necessity to see the way, or outer dress like veil, gloves, head-cover, apron, etc.), and to draw their veils all over Juyubihinna (i.e. their bodies, faces, necks and bosoms, etc.) and not to reveal their adornment except to their husbands, their fathers, their husband's fathers, their sons, their husband's sons, their brothers or their brother's sons, or their sister's sons, or their (Muslim) women (i.e. their sisters in Islam), or the (female) slaves whom their right hands possess, or old male servants who lack vigour, or small children who have no sense of the shame of sex. And let them not stamp their feet so as to reveal what they hide of their adornment. And all of you beg Allah to forgive you all, O believers, that you may be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 139,\n          \"sura\" : 37\n        },\n        \"text\" : \"And, verily, Yunus (Jonah) was one of the Messengers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 38\n        },\n        \"text\" : \"And remember Our slave Ayub (Job), when he invoked his Lord (saying): \\\"Verily! Shaitan (Satan) has touched me with distress (by losing my health) and torment (by losing my wealth)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 40\n        },\n        \"text\" : \"And indeed Yusuf (Joseph) did come to you, in times gone by, with clear signs, but you ceased not to doubt in that which he did bring to you, till when he died you said: \\\"No Messenger will Allah send after him.\\\" Thus Allah leaves astray him who is a Musrif (a polytheist, oppressor, a criminal, sinner who commit great sins) and a Murtab (one who doubts Allah's Warning and His Oneness).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 45\n        },\n        \"text\" : \"This, because you took the revelations of Allah (this Quran) in mockery, and the life of the world deceived you. So this Day, they shall not be taken out from there (Hell), nor shall they be Yusta'tabun (i.e. they shall not return to the worldly life, so that they repent to Allah, and beg His Pardon for their sins).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 83\n        },\n        \"text\" : \"Nay! Verily, the Record (writing of the deeds) of Al-Abrar (the pious who fear Allah and avoid evil), is (preserved) in 'Illiyyun.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 83\n        },\n        \"text\" : \"And what will make you know what 'Illiyyun is?\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"translation: 1\"\n    }\n  },\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 83\n        },\n        \"text\" : \"No! Indeed, the record of the righteous is in 'illiyyun.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 83\n        },\n        \"text\" : \"And what can make you know what is 'illiyyun?\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"translation: 2\"\n    }\n  }\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchOneSura.1.json",
    "content": "[\n  \"Al-Ahzab\",\n  \"alahzab\",\n  \"alahzab (the Confederates) have not\",\n  \"alahzab (the Confederates) should come\",\n  \"alahzab (the Confederates), they said\",\n  \"alahzab (the Confederates)]. And Allah\"\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchOneSura.2.json",
    "content": "[\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 33\n        },\n        \"text\" : \"Surah Al-Aḥzāb\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"quran\"\n    }\n  },\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 33\n        },\n        \"text\" : \"O you who believe! Remember Allah's Favour to you, when there came against you hosts, and We sent against them a wind and forces that you saw not [i.e. troops of angels during the battle of AlAhzab (the Confederates)]. And Allah is Ever AllSeer of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 33\n        },\n        \"text\" : \"They think that AlAhzab (the Confederates) have not yet withdrawn, and if AlAhzab (the Confederates) should come (again), they would wish they were in the deserts (wandering) among the bedouins, seeking news about you (from a far place); and if they (happen) to be among you, they would not fight but little.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 33\n        },\n        \"text\" : \"And when the believers saw AlAhzab (the Confederates), they said: \\\"This is what Allah and His Messenger (Muhammad SAW) had promised us, and Allah and His Messenger (Muhammad SAW) had spoken the truth, and it only added to their faith and to their submissiveness (to Allah).\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"translation: 1\"\n    }\n  }\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchSuraAndQuran.1.json",
    "content": "[\n  \"الفات\",\n  \"الفاتحين\",\n  \"الفاتحَةِ\"\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchSuraAndQuran.2.json",
    "content": "[\n  \"الاحزَابِ\",\n  \"الاحقَافِ\",\n  \"الاحۡ\"\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchSuraAndQuran.3.json",
    "content": "[\n  \"الأعلون إن كنتم مؤمنين\",\n  \"الأعلون والله معكم ولن يتركم\",\n  \"الأعلى\",\n  \"الأعلى إذ يختصمون\",\n  \"الأعلى في السماوات والأرض وهو\",\n  \"الأعلى وهو العزيز الحكيم\",\n  \"الأعلى ويقذفون من كل جانب\",\n  \"الأعلىٰ\",\n  \"الأَعۡلَ\"\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchSuraAndQuran.4.json",
    "content": "[\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 1\n        },\n        \"text\" : \"سُورَةُ ⁨الفَاتِحَةِ⁩\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 7\n        },\n        \"text\" : \"قد افترينا على الله كذبا إن عدنا في ملتكم بعد إذ نجانا الله منها وما يكون لنا أن نعود فيها إلا أن يشاء الله ربنا وسع ربنا كل شيء علما على الله توكلنا ربنا افتح بيننا وبين قومنا بالحق وأنت خير الفاتحين\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"quran\"\n    }\n  }\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchSuraAndQuran.5.json",
    "content": "[\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 33\n        },\n        \"text\" : \"سُورَةُ ⁨الأَحۡزَابِ⁩\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 46\n        },\n        \"text\" : \"سُورَةُ ⁨الأَحۡقَافِ⁩\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 5\n        },\n        \"text\" : \"إنا أنزلنا التوراة فيها هدى ونور يحكم بها النبيون الذين أسلموا للذين هادوا والربانيون والأحبار بما استحفظوا من كتاب الله وكانوا عليه شهداء فلا تخشوا الناس واخشون ولا تشتروا بآياتي ثمنا قليلا ومن لم يحكم بما أنزل الله فأولئك هم الكافرون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 5\n        },\n        \"text\" : \"لولا ينهاهم الربانيون والأحبار عن قولهم الإثم وأكلهم السحت لبئس ما كانوا يصنعون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 9\n        },\n        \"text\" : \"يا أيها الذين آمنوا إن كثيرا من الأحبار والرهبان ليأكلون أموال الناس بالباطل ويصدون عن سبيل الله والذين يكنزون الذهب والفضة ولا ينفقونها في سبيل الله فبشرهم بعذاب أليم\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 11\n        },\n        \"text\" : \"أفمن كان على بينة من ربه ويتلوه شاهد منه ومن قبله كتاب موسى إماما ورحمة أولئك يؤمنون به ومن يكفر به من الأحزاب فالنار موعده فلا تك في مرية منه إنه الحق من ربك ولكن أكثر الناس لا يؤمنون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 12\n        },\n        \"text\" : \"وكذلك يجتبيك ربك ويعلمك من تأويل الأحاديث ويتم نعمته عليك وعلى آل يعقوب كما أتمها على أبويك من قبل إبراهيم وإسحاق إن ربك عليم حكيم\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 12\n        },\n        \"text\" : \"وقال الذي اشتراه من مصر لامرأته أكرمي مثواه عسى أن ينفعنا أو نتخذه ولدا وكذلك مكنا ليوسف في الأرض ولنعلمه من تأويل الأحاديث والله غالب على أمره ولكن أكثر الناس لا يعلمون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 12\n        },\n        \"text\" : \"قالوا أضغاث أحلام وما نحن بتأويل الأحلام بعالمين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 12\n        },\n        \"text\" : \"رب قد آتيتني من الملك وعلمتني من تأويل الأحاديث فاطر السماوات والأرض أنت وليي في الدنيا والآخرة توفني مسلما وألحقني بالصالحين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 13\n        },\n        \"text\" : \"والذين آتيناهم الكتاب يفرحون بما أنزل إليك ومن الأحزاب من ينكر بعضه قل إنما أمرت أن أعبد الله ولا أشرك به إليه أدعو وإليه مآب\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 16\n        },\n        \"text\" : \"إن الله يأمر بالعدل والإحسان وإيتاء ذي القربى وينهى عن الفحشاء والمنكر والبغي يعظكم لعلكم تذكرون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 19\n        },\n        \"text\" : \"فاختلف الأحزاب من بينهم فويل للذين كفروا من مشهد يوم عظيم\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 33\n        },\n        \"text\" : \"يحسبون الأحزاب لم يذهبوا وإن يأت الأحزاب يودوا لو أنهم بادون في الأعراب يسألون عن أنبائكم ولو كانوا فيكم ما قاتلوا إلا قليلا\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 33\n        },\n        \"text\" : \"ولما رأى المؤمنون الأحزاب قالوا هذا ما وعدنا الله ورسوله وصدق الله ورسوله وما زادهم إلا إيمانا وتسليما\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 35\n        },\n        \"text\" : \"وما يستوي الأحياء ولا الأموات إن الله يسمع من يشاء وما أنت بمسمع من في القبور\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 38\n        },\n        \"text\" : \"جند ما هنالك مهزوم من الأحزاب\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 38\n        },\n        \"text\" : \"وثمود وقوم لوط وأصحاب الأيكة أولئك الأحزاب\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 40\n        },\n        \"text\" : \"كذبت قبلهم قوم نوح والأحزاب من بعدهم وهمت كل أمة برسولهم ليأخذوه وجادلوا بالباطل ليدحضوا به الحق فأخذتهم فكيف كان عقاب\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 40\n        },\n        \"text\" : \"وقال الذي آمن يا قوم إني أخاف عليكم مثل يوم الأحزاب\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 43\n        },\n        \"text\" : \"فاختلف الأحزاب من بينهم فويل للذين ظلموا من عذاب يوم أليم\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 46\n        },\n        \"text\" : \"واذكر أخا عاد إذ أنذر قومه بالأحقاف وقد خلت النذر من بين يديه ومن خلفه ألا تعبدوا إلا الله إني أخاف عليكم عذاب يوم عظيم\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 55\n        },\n        \"text\" : \"هل جزاء الإحسان إلا الإحسان\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 65\n        },\n        \"text\" : \"واللائي يئسن من المحيض من نسائكم إن ارتبتم فعدتهن ثلاثة أشهر واللائي لم يحضن وأولات الأحمال أجلهن أن يضعن حملهن ومن يتق الله يجعل له من أمره يسرا\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"quran\"\n    }\n  }\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchSuraAndQuran.6.json",
    "content": "[\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 87\n        },\n        \"text\" : \"سُورَةُ ⁨الأَعۡلَىٰ⁩\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 139,\n          \"sura\" : 3\n        },\n        \"text\" : \"ولا تهنوا ولا تحزنوا وأنتم الأعلون إن كنتم مؤمنين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 16\n        },\n        \"text\" : \"للذين لا يؤمنون بالآخرة مثل السوء ولله المثل الأعلى وهو العزيز الحكيم\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 20\n        },\n        \"text\" : \"قلنا لا تخف إنك أنت الأعلى\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 30\n        },\n        \"text\" : \"وهو الذي يبدأ الخلق ثم يعيده وهو أهون عليه وله المثل الأعلى في السماوات والأرض وهو العزيز الحكيم\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 37\n        },\n        \"text\" : \"لا يسمعون إلى الملإ الأعلى ويقذفون من كل جانب\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 38\n        },\n        \"text\" : \"ما كان لي من علم بالملإ الأعلى إذ يختصمون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 42\n        },\n        \"text\" : \"ومن آياته الجوار في البحر كالأعلام\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 47\n        },\n        \"text\" : \"فلا تهنوا وتدعوا إلى السلم وأنتم الأعلون والله معكم ولن يتركم أعمالكم\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 53\n        },\n        \"text\" : \"وهو بالأفق الأعلى\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 55\n        },\n        \"text\" : \"وله الجوار المنشآت في البحر كالأعلام\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 79\n        },\n        \"text\" : \"فقال أنا ربكم الأعلى\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 87\n        },\n        \"text\" : \"بسم الله الرحمن الرحيم سبح اسم ربك الأعلى\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 92\n        },\n        \"text\" : \"إلا ابتغاء وجه ربه الأعلى\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"quran\"\n    }\n  }\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchSuraAndQuranWithIncorrectTashkeel.1.json",
    "content": "[\n  \"فتح\",\n  \"فتح الله عليكم ليحاجوكم به\",\n  \"فتح بيني وبينهم \",\n  \"فتح من الله قالوا ألم\",\n  \"فتحا قريبا\",\n  \"فتحا مبينا\",\n  \"فتحا ونجني ومن معي من\",\n  \"فتحت أبوابها وقال لهم خزنتها\",\n  \"فتحت يأجوج ومأجوج وهم من\",\n  \"فتحرير رقبة مؤمنة وإن كان\",\n  \"فتحرير رقبة مؤمنة ودية مسلمة\",\n  \"فتحرير رقبة من قبل أن\",\n  \"فتحسسوا من يوسف وأخيه ولا\",\n  \"فتحنا عليهم أبواب كل شيء\",\n  \"فتحنا عليهم بابا ذا عذاب\",\n  \"فتحنا عليهم بابا من السماء\",\n  \"فتحنا لك \",\n  \"فتحوا متاعهم وجدوا بضاعتهم ردت\",\n  \"فُتح\"\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchSuraAndQuranWithIncorrectTashkeel.2.json",
    "content": "[\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 48\n        },\n        \"text\" : \"سُورَةُ ⁨الفَتۡحِ⁩\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 2\n        },\n        \"text\" : \"وإذا لقوا الذين آمنوا قالوا آمنا وإذا خلا بعضهم إلى بعض قالوا أتحدثونهم بما فتح الله عليكم ليحاجوكم به عند ربكم أفلا تعقلون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 2\n        },\n        \"text\" : \"ولما جاءهم كتاب من عند الله مصدق لما معهم وكانوا من قبل يستفتحون على الذين كفروا فلما جاءهم ما عرفوا كفروا به فلعنة الله على الكافرين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 4\n        },\n        \"text\" : \"وما كان لمؤمن أن يقتل مؤمنا إلا خطأ ومن قتل مؤمنا خطأ فتحرير رقبة مؤمنة ودية مسلمة إلى أهله إلا أن يصدقوا فإن كان من قوم عدو لكم وهو مؤمن فتحرير رقبة مؤمنة وإن كان من قوم بينكم وبينهم ميثاق فدية مسلمة إلى أهله وتحرير رقبة مؤمنة فمن لم يجد فصيام شهرين متتابعين توبة من الله وكان الله عليما حكيما\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 141,\n          \"sura\" : 4\n        },\n        \"text\" : \"الذين يتربصون بكم فإن كان لكم فتح من الله قالوا ألم نكن معكم وإن كان للكافرين نصيب قالوا ألم نستحوذ عليكم ونمنعكم من المؤمنين فالله يحكم بينكم يوم القيامة ولن يجعل الله للكافرين على المؤمنين سبيلا\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 5\n        },\n        \"text\" : \"فترى الذين في قلوبهم مرض يسارعون فيهم يقولون نخشى أن تصيبنا دائرة فعسى الله أن يأتي بالفتح أو أمر من عنده فيصبحوا على ما أسروا في أنفسهم نادمين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 6\n        },\n        \"text\" : \"فلما نسوا ما ذكروا به فتحنا عليهم أبواب كل شيء حتى إذا فرحوا بما أوتوا أخذناهم بغتة فإذا هم مبلسون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 7\n        },\n        \"text\" : \"إن الذين كذبوا بآياتنا واستكبروا عنها لا تفتح لهم أبواب السماء ولا يدخلون الجنة حتى يلج الجمل في سم الخياط وكذلك نجزي المجرمين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 7\n        },\n        \"text\" : \"قد افترينا على الله كذبا إن عدنا في ملتكم بعد إذ نجانا الله منها وما يكون لنا أن نعود فيها إلا أن يشاء الله ربنا وسع ربنا كل شيء علما على الله توكلنا ربنا افتح بيننا وبين قومنا بالحق وأنت خير الفاتحين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 7\n        },\n        \"text\" : \"ولو أن أهل القرى آمنوا واتقوا لفتحنا عليهم بركات من السماء والأرض ولكن كذبوا فأخذناهم بما كانوا يكسبون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 8\n        },\n        \"text\" : \"إن تستفتحوا فقد جاءكم الفتح وإن تنتهوا فهو خير لكم وإن تعودوا نعد ولن تغني عنكم فئتكم شيئا ولو كثرت وأن الله مع المؤمنين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 12\n        },\n        \"text\" : \"ولما فتحوا متاعهم وجدوا بضاعتهم ردت إليهم قالوا يا أبانا ما نبغي هذه بضاعتنا ردت إلينا ونمير أهلنا ونحفظ أخانا ونزداد كيل بعير ذلك كيل يسير\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 12\n        },\n        \"text\" : \"يا بني اذهبوا فتحسسوا من يوسف وأخيه ولا تيأسوا من روح الله إنه لا ييأس من روح الله إلا القوم الكافرون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 14\n        },\n        \"text\" : \"واستفتحوا وخاب كل جبار عنيد\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 15\n        },\n        \"text\" : \"ولو فتحنا عليهم بابا من السماء فظلوا فيه يعرجون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 21\n        },\n        \"text\" : \"حتى إذا فتحت يأجوج ومأجوج وهم من كل حدب ينسلون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 23\n        },\n        \"text\" : \"حتى إذا فتحنا عليهم بابا ذا عذاب شديد إذا هم فيه مبلسون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 118,\n          \"sura\" : 26\n        },\n        \"text\" : \"فافتح بيني وبينهم فتحا ونجني ومن معي من المؤمنين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 32\n        },\n        \"text\" : \"ويقولون متى هذا الفتح إن كنتم صادقين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 32\n        },\n        \"text\" : \"قل يوم الفتح لا ينفع الذين كفروا إيمانهم ولا هم ينظرون\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 34\n        },\n        \"text\" : \"قل يجمع بيننا ربنا ثم يفتح بيننا بالحق وهو الفتاح العليم\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 35\n        },\n        \"text\" : \"ما يفتح الله للناس من رحمة فلا ممسك لها وما يمسك فلا مرسل له من بعده وهو العزيز الحكيم\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 38\n        },\n        \"text\" : \"جنات عدن مفتحة لهم الأبواب\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 39\n        },\n        \"text\" : \"وسيق الذين كفروا إلى جهنم زمرا حتى إذا جاءوها فتحت أبوابها وقال لهم خزنتها ألم يأتكم رسل منكم يتلون عليكم آيات ربكم وينذرونكم لقاء يومكم هذا قالوا بلى ولكن حقت كلمة العذاب على الكافرين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 39\n        },\n        \"text\" : \"وسيق الذين اتقوا ربهم إلى الجنة زمرا حتى إذا جاءوها وفتحت أبوابها وقال لهم خزنتها سلام عليكم طبتم فادخلوها خالدين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 48\n        },\n        \"text\" : \"بسم الله الرحمن الرحيم إنا فتحنا لك فتحا مبينا\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 48\n        },\n        \"text\" : \"لقد رضي الله عن المؤمنين إذ يبايعونك تحت الشجرة فعلم ما في قلوبهم فأنزل السكينة عليهم وأثابهم فتحا قريبا\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 48\n        },\n        \"text\" : \"لقد صدق الله رسوله الرؤيا بالحق لتدخلن المسجد الحرام إن شاء الله آمنين محلقين رءوسكم ومقصرين لا تخافون فعلم ما لم تعلموا فجعل من دون ذلك فتحا قريبا\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 54\n        },\n        \"text\" : \"ففتحنا أبواب السماء بماء منهمر\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 57\n        },\n        \"text\" : \"وما لكم ألا تنفقوا في سبيل الله ولله ميراث السماوات والأرض لا يستوي منكم من أنفق من قبل الفتح وقاتل أولئك أعظم درجة من الذين أنفقوا من بعد وقاتلوا وكلا وعد الله الحسنى والله بما تعملون خبير\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 58\n        },\n        \"text\" : \"والذين يظاهرون من نسائهم ثم يعودون لما قالوا فتحرير رقبة من قبل أن يتماسا ذلكم توعظون به والله بما تعملون خبير\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 61\n        },\n        \"text\" : \"وأخرى تحبونها نصر من الله وفتح قريب وبشر المؤمنين\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 78\n        },\n        \"text\" : \"وفتحت السماء فكانت أبوابا\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 110\n        },\n        \"text\" : \"بسم الله الرحمن الرحيم إذا جاء نصر الله والفتح\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"quran\"\n    }\n  }\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchTranslation.1.json",
    "content": "[\n  \"All\",\n  \"all around him, \",\n  \"all be consigned to the\",\n  \"all be no fear on\",\n  \"all be no fear, nor\",\n  \"all compel him to the\",\n  \"all cows are alike, And\",\n  \"all down for fear of\",\n  \"all find it with \",\n  \"all find what you want\",\n  \"all have their reward with\",\n  \"all kinds of good deeds\",\n  \"all kinds of sins and\",\n  \"all leave him in contentment\",\n  \"all never believe in you\",\n  \"all not touch us but\",\n  \"all of you from this\",\n  \"all please you, so turn\",\n  \"all recite unto them Your\",\n  \"all return\",\n  \"all surrender with obedience (in\",\n  \"all that exists\",\n  \"all that is good. Wheresoever\",\n  \"all that is in the\",\n  \"all that is on earth\",\n  \"all that they associate with\",\n  \"all the Ayat (proofs, evidences\",\n  \"all the ceremonies of pilgrimage\",\n  \"all the names (of everything\",\n  \"all the praises and thanks\",\n  \"all they grieve\",\n  \"all they grieve. [See Tafsir\",\n  \"all things\",\n  \"all together\",\n  \"all turn you to a\",\n  \"all upon your Lord for\",\n  \"all were Muslims)? And who\",\n  \"all with enmity between yourselves\",\n  \"all worship your Ilah (God\",\n  \"all you (Jews) tell them\",\n  \"all your witnesses (supporters and\",\n  \"allAware of the Zalimun (polytheists\",\n  \"allHearer, the \",\n  \"allKnower\",\n  \"allKnower of everything\",\n  \"allKnower, the \",\n  \"allKnowing\",\n  \"allMighty, the \",\n  \"allRecogniser, \",\n  \"allSeer of what they do\",\n  \"allSeer of what you do\",\n  \"allSufficient for His creatures' needs\",\n  \"allWise\",\n  \"allah\",\n  \"allah (Alone) and be dutiful\",\n  \"allah (Alone) knows their meanings\",\n  \"allah (Alone)], and he was\",\n  \"allah (Islam) and which Sibghah\",\n  \"allah (and He is High\",\n  \"allah (and do not believe\",\n  \"allah (for coming of Muhammad\",\n  \"allah (i.e. Islamic Monotheism) that\",\n  \"allah (i.e. Muhammad Peace be\",\n  \"allah (i.e. follows \",\n  \"allah (in worship) while you\",\n  \"allah (knows better that they\",\n  \"allah - Islamic Monotheism) and\",\n  \"allah - see V. 2:105\",\n  \"allah - those who obey\",\n  \"allah [the Taurat (Torah)], then\",\n  \"allah aforetime, if you indeed\",\n  \"allah and cursed by the\",\n  \"allah and killed the Prophets\",\n  \"allah and of the angels\",\n  \"allah and that which has\",\n  \"allah and the Last Day\",\n  \"allah and those who believe\",\n  \"allah answered their invocation by\",\n  \"allah be on the disbelievers\",\n  \"allah behind their backs as\",\n  \"allah belong both, east and\",\n  \"allah belong the east and\",\n  \"allah brings His Command. Verily\",\n  \"allah brings the dead to\",\n  \"allah brought forth that which\",\n  \"allah chooses for His Mercy\",\n  \"allah commands you that you\",\n  \"allah confirming what is with\",\n  \"allah ever encompasses the disbelievers\",\n  \"allah guided. And \",\n  \"allah has begotten a son\",\n  \"allah has chosen for you\",\n  \"allah has cursed them for\",\n  \"allah has increased their disease\",\n  \"allah has ordered to be\",\n  \"allah has power over \",\n  \"allah has provided and do\",\n  \"allah has revealed (the Quran\",\n  \"allah has revealed to you\",\n  \"allah has sent down,\\\" they\",\n  \"allah has set a seal\",\n  \"allah intend by this parable\",\n  \"allah is \",\n  \"allah is Able to do\",\n  \"allah is able to do\",\n  \"allah is an enemy to\",\n  \"allah is full of kindness\",\n  \"allah is indeed for you\",\n  \"allah is not ashamed to\",\n  \"allah is not unaware of\",\n  \"allah is the Owner of\",\n  \"allah is with As-Sabirin (the\",\n  \"allah knows what they conceal\",\n  \"allah loves) you send forth\",\n  \"allah mocks at them and\",\n  \"allah much (abstain from \",\n  \"allah much (perform \",\n  \"allah neither any Wali (protector\",\n  \"allah plainly.\\\" But you were\",\n  \"allah should reveal of His\",\n  \"allah speak to us (face\",\n  \"allah to Whom belongs the\",\n  \"allah took away their light\",\n  \"allah upon you, indeed you\",\n  \"allah we belong and truly\",\n  \"allah what you know not\",\n  \"allah while He is our\",\n  \"allah will bring you together\",\n  \"allah will gather them \",\n  \"allah will judge between them\",\n  \"allah will not break His\",\n  \"allah will suffice you against\",\n  \"allah willed, He could have\",\n  \"allah wills, we will be\",\n  \"allah with full submission, fear\",\n  \"allah would never make your\",\n  \"allah you have neither any\",\n  \"allah's Cause - Jihad, etc\",\n  \"allah's Command\",\n  \"allah's Covenant after ratifying it\",\n  \"allah's Guidance), and on their\",\n  \"allah's Leave. And they learn\",\n  \"allah's Messenger Muhammad Peace be\",\n  \"allah's Messenger and his qualities\",\n  \"allah's Messenger) has become manifest\",\n  \"allah's Mosques and strive for\",\n  \"allah's Mosques) except in fear\",\n  \"allah's Name be glorified and\",\n  \"allah's Obedience. (Tafsir At-Tabari, Vol\",\n  \"allah's Permission, confirming what came\",\n  \"allah's Refuge from being among\",\n  \"allah's Religion of Islamic Monotheism\",\n  \"allah's Word).\\\" Nay, \",\n  \"allah's sake only without any\",\n  \"allah's? And we are His\",\n  \"allah) along with Ar-Raki'un\",\n  \"allah) answered: \\\"As for him\",\n  \"allah) on the people and\",\n  \"allah) said (to him), \\\"Verily\",\n  \"allah) said, \\\"My Covenant (Prophethood\",\n  \"allah) said: \\\"I know that\",\n  \"allah), Who created you and\",\n  \"allah), on such sh\",\n  \"allah), the Ilah (God) of\",\n  \"allah), then indeed you will\",\n  \"allah, \\\"They are dead.\\\" Nay\",\n  \"allah, His Angels, His Messengers\",\n  \"allah, Islam) was enjoined by\",\n  \"allah, far better would have\",\n  \"allah, i.e. commit crimes and\",\n  \"allah, idolaters, polytheists, pagans, etc\",\n  \"allah, if you are truthful\",\n  \"allah, so that \",\n  \"allah, the Lord of the\",\n  \"allah, the Most Beneficent, the\",\n  \"allah,\\\" to purchase with it\",\n  \"allah. And \",\n  \"allah. Certainly, \",\n  \"allah. So it is not\",\n  \"allah. That was because they\",\n  \"allah? And \",\n  \"allah? Seeing that you were\",\n  \"allah] tried him with (certain\",\n  \"allayl\",\n  \"aller) than it. And as\",\n  \"ally and not for others\",\n  \"ally for \"\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testMatchTranslation.2.json",
    "content": "[\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 92\n        },\n        \"text\" : \"Surah Al-Layl\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"quran\"\n    }\n  },\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 1\n        },\n        \"text\" : \"In the Name of Allah, the Most Beneficent, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 1\n        },\n        \"text\" : \"All the praises and thanks be to Allah, the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 2\n        },\n        \"text\" : \"Alif-Lam-Mim. [These letters are one of the miracles of the Quran and none but Allah (Alone) knows their meanings].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 2\n        },\n        \"text\" : \"This is the Book (the Quran), whereof there is no doubt, a guidance to those who are Al-Muttaqun [the pious and righteous persons who fear Allah much (abstain from all kinds of sins and evil deeds which He has forbidden) and love Allah much (perform all kinds of good deeds which He has ordained)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 2\n        },\n        \"text\" : \"Who believe in the Ghaib and perform As-Salat (Iqamat-as-Salat), and spend out of what we have provided for them [i.e. give Zakat, spend on themselves, their parents, their children, their wives, etc., and also give charity to the poor and also in Allah's Cause - Jihad, etc.].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 2\n        },\n        \"text\" : \"Allah has set a seal on their hearts and on their hearings, (i.e. they are closed from accepting Allah's Guidance), and on their eyes there is a covering. Theirs will be a great torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 2\n        },\n        \"text\" : \"And of mankind, there are some (hypocrites) who say: \\\"We believe in Allah and the Last Day\\\" while in fact they believe not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 2\n        },\n        \"text\" : \"They (think to) deceive Allah and those who believe, while they only deceive themselves, and perceive (it) not!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 2\n        },\n        \"text\" : \"In their hearts is a disease (of doubt and hypocrisy) and Allah has increased their disease. A painful torment is theirs because they used to tell lies.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when it is said to them (hypocrites): \\\"Believe as the people (followers of Muhammad Peace be upon him, Al-Ansar and Al-Muhajirun) have believed,\\\" they say: \\\"Shall we believe as the fools have believed?\\\" Verily, they are the fools, but they know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 2\n        },\n        \"text\" : \"Allah mocks at them and gives them increase in their wrong-doings to wander blindly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 2\n        },\n        \"text\" : \"Their likeness is as the likeness of one who kindled a fire; then, when it lighted all around him, Allah took away their light and left them in darkness. (So) they could not see.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 2\n        },\n        \"text\" : \"Or like a rainstorm from the sky, wherein is darkness, thunder, and lightning. They thrust their fingers in their ears to keep out the stunning thunderclap for fear of death. But Allah ever encompasses the disbelievers (i.e. Allah will gather them all together).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 2\n        },\n        \"text\" : \"The lightning almost snatches away their sight, whenever it flashes for them, they walk therein, and when darkness covers them, they stand still. And if Allah willed, He could have taken away their hearing and their sight. Certainly, Allah has power over all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 2\n        },\n        \"text\" : \"O mankind! Worship your Lord (Allah), Who created you and those who were before you so that you may become Al-Muttaqun (the pious - see V. 2:2).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 2\n        },\n        \"text\" : \"Who has made the earth a resting place for you, and the sky as a canopy, and sent down water (rain) from the sky and brought forth therewith fruits as a provision for you. Then do not set up rivals unto Allah (in worship) while you know (that He Alone has the right to be worshipped).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if you (Arab pagans, Jews, and Christians) are in doubt concerning that which We have sent down (i.e. the Quran) to Our slave (Muhammad Peace be upon him), then produce a Surah (chapter) of the like thereof and call your witnesses (supporters and helpers) besides Allah, if you are truthful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 2\n        },\n        \"text\" : \"And give glad tidings to those who believe and do righteous good deeds, that for them will be Gardens under which rivers flow (Paradise). Every time they will be provided with a fruit therefrom, they will say: \\\"This is what we were provided with before,\\\" and they will be given things in resemblance (i.e. in the same form but different in taste) and they shall have therein Azwajun Mutahharatun (purified mates or wives), (having no menses, stools, urine, etc.) and they will abide therein forever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 2\n        },\n        \"text\" : \"Verily, Allah is not ashamed to set forth a parable even of a mosquito or so much more when it is bigger (or less when it is smaller) than it. And as for those who believe, they know that it is the Truth from their Lord, but as for those who disbelieve, they say: \\\"What did Allah intend by this parable?\\\" By it He misleads many, and many He guides thereby. And He misleads thereby only those who are Al-Fasiqun (the rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 2\n        },\n        \"text\" : \"Those who break Allah's Covenant after ratifying it, and sever what Allah has ordered to be joined (as regards Allah's Religion of Islamic Monotheism, and to practise its legal laws on the earth and also as regards keeping good relations with kith and kin), and do mischief on earth, it is they who are the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 2\n        },\n        \"text\" : \"How can you disbelieve in Allah? Seeing that you were dead and He gave you life. Then He will give you death, then again will bring you to life (on the Day of Resurrection) and then unto Him you will return.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 2\n        },\n        \"text\" : \"He it is Who created for you all that is on earth. Then He Istawa (rose over) towards the heaven and made them seven heavens and He is the All-Knower of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 2\n        },\n        \"text\" : \"And (remember) when your Lord said to the angels: \\\"Verily, I am going to place (mankind) generations after generations on earth.\\\" They said: \\\"Will You place therein those who will make mischief therein and shed blood, - while we glorify You with praises and thanks (Exalted be You above all that they associate with You as partners) and sanctify You.\\\" He (Allah) said: \\\"I know that which you do not know.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 2\n        },\n        \"text\" : \"And He taught Adam all the names (of everything), then He showed them to the angels and said, \\\"Tell Me the names of these if you are truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 2\n        },\n        \"text\" : \"They (angels) said: \\\"Glory be to You, we have no knowledge except what you have taught us. Verily, it is You, the All-Knower, the All-Wise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 2\n        },\n        \"text\" : \"And (remember) when We said to the angels: \\\"Prostrate yourselves before Adam.\\\". And they prostrated except Iblis (Satan), he refused and was proud and was one of the disbelievers (disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 2\n        },\n        \"text\" : \"Then the Shaitan (Satan) made them slip therefrom (the Paradise), and got them out from that in which they were. We said: \\\"Get you down, all, with enmity between yourselves. On earth will be a dwelling place for you and an enjoyment for a time.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 2\n        },\n        \"text\" : \"We said: \\\"Get down all of you from this place (the Paradise), then whenever there comes to you Guidance from Me, and whoever follows My Guidance, there shall be no fear on them, nor shall they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 2\n        },\n        \"text\" : \"But those who disbelieve and belie Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) such are the dwellers of the Fire, they shall abide therein forever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 2\n        },\n        \"text\" : \"And believe in what I have sent down (this Quran), confirming that which is with you, [the Taurat (Torah) and the Injeel (Gospel)], and be not the first to disbelieve therein, and buy not with My Verses [the Taurat (Torah) and the Injeel (Gospel)] a small price (i.e. getting a small gain by selling My Verses), and fear Me and Me Alone. (Tafsir At-Tabari, Vol. I, Page 253).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 2\n        },\n        \"text\" : \"And mix not truth with falsehood, nor conceal the truth [i.e. Muhammad Peace be upon him is Allah's Messenger and his qualities are written in your Scriptures, the Taurat (Torah) and the Injeel (Gospel)] while you know (the truth).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 2\n        },\n        \"text\" : \"And perform As-Salat (Iqamat-as-Salat), and give Zakat, and Irka' (i.e. bow down or submit yourselves with obedience to Allah) along with Ar-Raki'un.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 2\n        },\n        \"text\" : \"Enjoin you Al-Birr (piety and righteousness and each and every act of obedience to Allah) on the people and you forget (to practise it) yourselves, while you recite the Scripture [the Taurat (Torah)]! Have you then no sense?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 2\n        },\n        \"text\" : \"And seek help in patience and As-Salat (the prayer) and truly it is extremely heavy and hard except for Al-Khashi'un [i.e. the true believers in Allah - those who obey Allah with full submission, fear much from His Punishment, and believe in His Promise (Paradise, etc.) and in His Warnings (Hell, etc.)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 2\n        },\n        \"text\" : \"And fear a Day (of Judgement) when a person shall not avail another, nor will intercession be accepted from him nor will compensation be taken from him nor will they be helped.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 2\n        },\n        \"text\" : \"And (remember) when you said: \\\"O Musa (Moses)! We shall never believe in you till we see Allah plainly.\\\" But you were seized with a thunderbolt (lightning) while you were looking.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 2\n        },\n        \"text\" : \"And (remember) when We said: \\\"Enter this town (Jerusalem) and eat bountifully therein with pleasure and delight wherever you wish, and enter the gate in prostration (or bowing with humility) and say: 'Forgive us,' and We shall forgive you your sins and shall increase (reward) for the good-doers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 2\n        },\n        \"text\" : \"But those who did wrong changed the word from that which had been told to them for another, so We sent upon the wrong-doers Rijzan (a punishment) from the heaven because of their rebelling against Allah's Obedience. (Tafsir At-Tabari, Vol. I, Page 305).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 2\n        },\n        \"text\" : \"And (remember) when Musa (Moses) asked for water for his people, We said: \\\"Strike the stone with your stick.\\\" Then gushed forth therefrom twelve springs. Each (group of) people knew its own place for water. \\\"Eat and drink of that which Allah has provided and do not act corruptly, making mischief on the earth.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 2\n        },\n        \"text\" : \"And (remember) when you said, \\\"O Musa (Moses)! We cannot endure one kind of food. So invoke your Lord for us to bring forth for us of what the earth grows, its herbs, its cucumbers, its Fum (wheat or garlic), its lentils and its onions.\\\" He said, \\\"Would you exchange that which is better for that which is lower? Go you down to any town and you shall find what you want!\\\" And they were covered with humiliation and misery, and they drew on themselves the Wrath of Allah. That was because they used to disbelieve the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah and killed the Prophets wrongfully. That was because they disobeyed and used to transgress the bounds (in their disobedience to Allah, i.e. commit crimes and sins).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 2\n        },\n        \"text\" : \"Verily! Those who believe and those who are Jews and Christians, and Sabians, whoever believes in Allah and the Last Day and do righteous good deeds shall have their reward with their Lord, on them shall be no fear, nor shall they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 2\n        },\n        \"text\" : \"Then after that you turned away. Had it not been for the Grace and Mercy of Allah upon you, indeed you would have been among the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 2\n        },\n        \"text\" : \"And (remember) when Musa (Moses) said to his people: \\\"Verily, Allah commands you that you slaughter a cow.\\\" They said, \\\"Do you make fun of us?\\\" He said, \\\"I take Allah's Refuge from being among Al-Jahilun (the ignorants or the foolish).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 2\n        },\n        \"text\" : \"They said, \\\"Call upon your Lord for us that He may make plain to us what it is!\\\" He said, \\\"He says, 'Verily, it is a cow neither too old nor too young, but (it is) between the two conditions', so do what you are commanded.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 2\n        },\n        \"text\" : \"They said, \\\"Call upon your Lord for us to make plain to us its colour.\\\" He said, \\\"He says, 'It is a yellow cow, bright in its colour, pleasing to the beholders.' \\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 2\n        },\n        \"text\" : \"They said, \\\"Call upon your Lord for us to make plain to us what it is. Verily to us all cows are alike, And surely, if Allah wills, we will be guided.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 2\n        },\n        \"text\" : \"And (remember) when you killed a man and fell into dispute among yourselves as to the crime. But Allah brought forth that which you were hiding.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 2\n        },\n        \"text\" : \"So We said: \\\"Strike him (the dead man) with a piece of it (the cow).\\\" Thus Allah brings the dead to life and shows you His Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) so that you may understand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 2\n        },\n        \"text\" : \"Then, after that, your hearts were hardened and became as stones or even worse in hardness. And indeed, there are stones out of which rivers gush forth, and indeed, there are of them (stones) which split asunder so that water flows from them, and indeed, there are of them (stones) which fall down for fear of Allah. And Allah is not unaware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 2\n        },\n        \"text\" : \"Do you (faithful believers) covet that they will believe in your religion inspite of the fact that a party of them (Jewish rabbis) used to hear the Word of Allah [the Taurat (Torah)], then they used to change it knowingly after they understood it?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when they (Jews) meet those who believe (Muslims), they say, \\\"We believe\\\", but when they meet one another in private, they say, \\\"Shall you (Jews) tell them (Muslims) what Allah has revealed to you [Jews, about the description and the qualities of Prophet Muhammad Peace be upon him, that which are written in the Taurat (Torah)], that they (Muslims) may argue with you (Jews) about it before your Lord?\\\" Have you (Jews) then no understanding?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 2\n        },\n        \"text\" : \"Know they (Jews) not that Allah knows what they conceal and what they reveal?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 2\n        },\n        \"text\" : \"Then woe to those who write the Book with their own hands and then say, \\\"This is from Allah,\\\" to purchase with it a little price! Woe to them for what their hands have written and woe to them for that they earn thereby.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 2\n        },\n        \"text\" : \"And they (Jews) say, \\\"The Fire (i.e. Hell-fire on the Day of Resurrection) shall not touch us but for a few numbered days.\\\" Say (O Muhammad Peace be upon him to them): \\\"Have you taken a covenant from Allah, so that Allah will not break His Covenant? Or is it that you say of Allah what you know not?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 2\n        },\n        \"text\" : \"And those who believe (in the Oneness of Allah - Islamic Monotheism) and do righteous good deeds, they are dwellers of Paradise, they will dwell therein forever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 2\n        },\n        \"text\" : \"And (remember) when We took a covenant from the Children of Israel, (saying): Worship none but Allah (Alone) and be dutiful and good to parents, and to kindred, and to orphans and Al-Masakin (the poor), [Tafsir At-Tabari, Vol. 10, Page 158 (Verse 9:60)] and speak good to people [i.e. enjoin righteousness and forbid evil, and say the truth about Muhammad Peace be upon him], and perform As-Salat (Iqamat-as-Salat), and give Zakat. Then you slid back, except a few of you, while you are backsliders. (Tafsir Al-Qurtubi, Vol. 2, Page 392).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 2\n        },\n        \"text\" : \"After this, it is you who kill one another and drive out a party of you from their homes, assist (their enemies) against them, in sin and transgression. And if they come to you as captives, you ransom them, although their expulsion was forbidden to you. Then do you believe in a part of the Scripture and reject the rest? Then what is the recompense of those who do so among you, except disgrace in the life of this world, and on the Day of Resurrection they shall be consigned to the most grievous torment. And Allah is not unaware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 2\n        },\n        \"text\" : \"Those are they who have bought the life of this world at the price of the Hereafter. Their torment shall not be lightened nor shall they be helped.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 2\n        },\n        \"text\" : \"And they say, \\\"Our hearts are wrapped (i.e. do not hear or understand Allah's Word).\\\" Nay, Allah has cursed them for their disbelief, so little is that which they believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when there came to them (the Jews), a Book (this Quran) from Allah confirming what is with them [the Taurat (Torah) and the Injeel (Gospel)], although aforetime they had invoked Allah (for coming of Muhammad Peace be upon him) in order to gain victory over those who disbelieved, then when there came to them that which they had recognised, they disbelieved in it. So let the Curse of Allah be on the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 2\n        },\n        \"text\" : \"How bad is that for which they have sold their ownselves, that they should disbelieve in that which Allah has revealed (the Quran), grudging that Allah should reveal of His Grace unto whom He will of His slaves. So they have drawn on themselves wrath upon wrath. And for the disbelievers, there is disgracing torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when it is said to them (the Jews), \\\"Believe in what Allah has sent down,\\\" they say, \\\"We believe in what was sent down to us.\\\" And they disbelieve in that which came after it, while it is the truth confirming what is with them. Say (O Muhammad Peace be upon him to them): \\\"Why then have you killed the Prophets of Allah aforetime, if you indeed have been believers?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 2\n        },\n        \"text\" : \"Say to (them): \\\"If the home of the Hereafter with Allah is indeed for you specially and not for others, of mankind, then long for death if you are truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 2\n        },\n        \"text\" : \"But they will never long for it because of what their hands have sent before them (i.e. what they have done). And Allah is All-Aware of the Zalimun (polytheists and wrong-doers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 2\n        },\n        \"text\" : \"And verily, you will find them (the Jews) the greediest of mankind for life and (even greedier) than those who - ascribe partners to Allah (and do not believe in Resurrection - Magians, pagans, and idolaters, etc.). Everyone of them wishes that he could be given a life of a thousand years. But the grant of such life will not save him even a little from (due) punishment. And Allah is All-Seer of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 2\n        },\n        \"text\" : \"Say (O Muhammad Peace be upon him): \\\"Whoever is an enemy to Jibrael (Gabriel) (let him die in his fury), for indeed he has brought it (this Quran) down to your heart by Allah's Permission, confirming what came before it [i.e. the Taurat (Torah) and the Injeel (Gospel)] and guidance and glad tidings for the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 2\n        },\n        \"text\" : \"\\\"Whoever is an enemy to Allah, His Angels, His Messengers, Jibrael (Gabriel) and Mikael (Michael), then verily, Allah is an enemy to the disbelievers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 2\n        },\n        \"text\" : \"And indeed We have sent down to you manifest Ayat (these Verses of the Quran which inform in detail about the news of the Jews and their secret intentions, etc.), and none disbelieve in them but Fasiqun (those who rebel against Allah's Command).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when there came to them a Messenger from Allah (i.e. Muhammad Peace be upon him) confirming what was with them, a party of those who were given the Scripture threw away the Book of Allah behind their backs as if they did not know!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 2\n        },\n        \"text\" : \"They followed what the Shayatin (devils) gave out (falsely of the magic) in the lifetime of Sulaiman (Solomon). Sulaiman did not disbelieve, but the Shayatin (devils) disbelieved, teaching men magic and such things that came down at Babylon to the two angels, Harut and Marut, but neither of these two (angels) taught anyone (such things) till they had said, \\\"We are only for trial, so disbelieve not (by learning this magic from us).\\\" And from these (angels) people learn that by which they cause separation between man and his wife, but they could not thus harm anyone except by Allah's Leave. And they learn that which harms them and profits them not. And indeed they knew that the buyers of it (magic) would have no share in the Hereafter. And how bad indeed was that for which they sold their ownselves, if they but knew.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if they had believed, and guarded themselves from evil and kept their duty to Allah, far better would have been the reward from their Lord, if they but knew!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 2\n        },\n        \"text\" : \"Neither those who disbelieve among the people of the Scripture (Jews and Christians) nor Al-Mushrikun (the disbelievers in the Oneness of Allah, idolaters, polytheists, pagans, etc.) like that there should be sent down unto you any good from your Lord. But Allah chooses for His Mercy whom He wills. And Allah is the Owner of Great Bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 2\n        },\n        \"text\" : \"Whatever a Verse (revelation) do We abrogate or cause to be forgotten, We bring a better one or similar to it. Know you not that Allah is able to do all things?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 2\n        },\n        \"text\" : \"Know you not that it is Allah to Whom belongs the dominion of the heavens and the earth? And besides Allah you have neither any Wali (protector or guardian) nor any helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 2\n        },\n        \"text\" : \"Many of the people of the Scripture (Jews and Christians) wish that if they could turn you away as disbelievers after you have believed, out of envy from their ownselves, even, after the truth (that Muhammad Peace be upon him is Allah's Messenger) has become manifest unto them. But forgive and overlook, till Allah brings His Command. Verily, Allah is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 2\n        },\n        \"text\" : \"And perform As-Salat (Iqamat-as-Salat), and give Zakat, and whatever of good (deeds that Allah loves) you send forth for yourselves before you, you shall find it with Allah. Certainly, Allah is All-Seer of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 2\n        },\n        \"text\" : \"And they say, \\\"None shall enter Paradise unless he be a Jew or a Christian.\\\" These are their own desires. Say (O Muhammad Peace be upon him), \\\"Produce your proof if you are truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 2\n        },\n        \"text\" : \"Yes, but whoever submits his face (himself) to Allah (i.e. follows Allah's Religion of Islamic Monotheism) and he is a Muhsin (good-doer i.e. performs good deeds totally for Allah's sake only without any show off or to gain praise or fame, etc., and in accordance with the Sunnah of Allah's Messenger Muhammad Peace be upon him) then his reward is with his Lord (Allah), on such shall be no fear, nor shall they grieve. [See Tafsir Ibn Kathir, Vol. 1, Page 154].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 113,\n          \"sura\" : 2\n        },\n        \"text\" : \"The Jews said that the Christians follow nothing (i.e. are not on the right religion); and the Christians said that the Jews follow nothing (i.e. are not on the right religion); though they both recite the Scripture. Like unto their word, said (the pagans) who know not. Allah will judge between them on the Day of Resurrection about that wherein they have been differing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 2\n        },\n        \"text\" : \"And who is more unjust than those who forbid that Allah's Name be glorified and mentioned much (i.e. prayers and invocations, etc.) in Allah's Mosques and strive for their ruin? It was not fitting that such should themselves enter them (Allah's Mosques) except in fear. For them there is disgrace in this world, and they will have a great torment in the Hereafter.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 115,\n          \"sura\" : 2\n        },\n        \"text\" : \"And to Allah belong the east and the west, so wherever you turn yourselves or your faces there is the Face of Allah (and He is High above, over His Throne). Surely! Allah is All-Sufficient for His creatures' needs, All-Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 2\n        },\n        \"text\" : \"And they (Jews, Christians and pagans) say: Allah has begotten a son (children or offspring). Glory be to Him (Exalted be He above all that they associate with Him). Nay, to Him belongs all that is in the heavens and on earth, and all surrender with obedience (in worship) to Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 118,\n          \"sura\" : 2\n        },\n        \"text\" : \"And those who have no knowledge say: \\\"Why does not Allah speak to us (face to face) or why does not a sign come to us?\\\" So said the people before them words of similar import. Their hearts are alike, We have indeed made plain the signs for people who believe with certainty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 120,\n          \"sura\" : 2\n        },\n        \"text\" : \"Never will the Jews nor the Christians be pleased with you (O Muhammad Peace be upon him) till you follow their religion. Say: \\\"Verily, the Guidance of Allah (i.e. Islamic Monotheism) that is the (only) Guidance. And if you (O Muhammad Peace be upon him) were to follow their (Jews and Christians) desires after what you have received of Knowledge (i.e. the Quran), then you would have against Allah neither any Wali (protector or guardian) nor any helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 123,\n          \"sura\" : 2\n        },\n        \"text\" : \"And fear the Day (of Judgement) when no person shall avail another, nor shall compensation be accepted from him, nor shall intercession be of use to him, nor shall they be helped.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 124,\n          \"sura\" : 2\n        },\n        \"text\" : \"And (remember) when the Lord of Ibrahim (Abraham) [i.e., Allah] tried him with (certain) Commands, which he fulfilled. He (Allah) said (to him), \\\"Verily, I am going to make you a leader (Prophet) of mankind.\\\" [Ibrahim (Abraham)] said, \\\"And of my offspring (to make leaders).\\\" (Allah) said, \\\"My Covenant (Prophethood, etc.) includes not Zalimun (polytheists and wrong-doers).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 126,\n          \"sura\" : 2\n        },\n        \"text\" : \"And (remember) when Ibrahim (Abraham) said, \\\"My Lord, make this city (Makkah) a place of security and provide its people with fruits, such of them as believe in Allah and the Last Day.\\\" He (Allah) answered: \\\"As for him who disbelieves, I shall leave him in contentment for a while, then I shall compel him to the torment of the Fire, and worst indeed is that destination!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 127,\n          \"sura\" : 2\n        },\n        \"text\" : \"And (remember) when Ibrahim (Abraham) and (his son) Isma'il (Ishmael) were raising the foundations of the House (the Ka'bah at Makkah), (saying), \\\"Our Lord! Accept (this service) from us. Verily! You are the All-Hearer, the All-Knower.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 128,\n          \"sura\" : 2\n        },\n        \"text\" : \"\\\"Our Lord! And make us submissive unto You and of our offspring a nation submissive unto You, and show us our Manasik (all the ceremonies of pilgrimage - Hajj and 'Umrah, etc.), and accept our repentance. Truly, You are the One Who accepts repentance, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 129,\n          \"sura\" : 2\n        },\n        \"text\" : \"\\\"Our Lord! Send amongst them a Messenger of their own (and indeed Allah answered their invocation by sending Muhammad Peace be upon him), who shall recite unto them Your Verses and instruct them in the Book (this Quran) and Al-Hikmah (full knowledge of the Islamic laws and jurisprudence or wisdom or Prophethood, etc.), and sanctify them. Verily! You are the All-Mighty, the All-Wise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 131,\n          \"sura\" : 2\n        },\n        \"text\" : \"When his Lord said to him, \\\"Submit (i.e. be a Muslim)!\\\" He said, \\\"I have submitted myself (as a Muslim) to the Lord of the 'Alamin (mankind, jinns and all that exists).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 132,\n          \"sura\" : 2\n        },\n        \"text\" : \"And this (submission to Allah, Islam) was enjoined by Ibrahim (Abraham) upon his sons and by Ya'qub (Jacob), (saying), \\\"O my sons! Allah has chosen for you the (true) religion, then die not except in the Faith of Islam (as Muslims - Islamic Monotheism).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 133,\n          \"sura\" : 2\n        },\n        \"text\" : \"Or were you witnesses when death approached Ya'qub (Jacob)? When he said unto his sons, \\\"What will you worship after me?\\\" They said, \\\"We shall worship your Ilah (God - Allah), the Ilah (God) of your fathers, Ibrahim (Abraham), Isma'il (Ishmael), Ishaque (Isaac), One Ilah (God), and to Him we submit (in Islam).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 134,\n          \"sura\" : 2\n        },\n        \"text\" : \"That was a nation who has passed away. They shall receive the reward of what they earned and you of what you earn. And you will not be asked of what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 135,\n          \"sura\" : 2\n        },\n        \"text\" : \"And they say, \\\"Be Jews or Christians, then you will be guided.\\\" Say (to them, O Muhammad Peace be upon him), \\\"Nay, (We follow) only the religion of Ibrahim (Abraham), Hanifa [Islamic Monotheism, i.e. to worship none but Allah (Alone)], and he was not of Al-Mushrikun (those who worshipped others along with Allah - see V. 2:105).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 136,\n          \"sura\" : 2\n        },\n        \"text\" : \"Say (O Muslims), \\\"We believe in Allah and that which has been sent down to us and that which has been sent down to Ibrahim (Abraham), Isma'il (Ishmael), Ishaque (Isaac), Ya'qub (Jacob), and to Al-Asbat [the twelve sons of Ya'qub (Jacob)], and that which has been given to Musa (Moses) and 'Iesa (Jesus), and that which has been given to the Prophets from their Lord. We make no distinction between any of them, and to Him we have submitted (in Islam).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 137,\n          \"sura\" : 2\n        },\n        \"text\" : \"So if they believe in the like of that which you believe, then they are rightly guided, but if they turn away, then they are only in opposition. So Allah will suffice you against them. And He is the All-Hearer, the All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 138,\n          \"sura\" : 2\n        },\n        \"text\" : \"[Our Sibghah (religion) is] the Sibghah (Religion) of Allah (Islam) and which Sibghah (religion) can be better than Allah's? And we are His worshippers. [Tafsir Ibn Kathir.]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 139,\n          \"sura\" : 2\n        },\n        \"text\" : \"Say (O Muhammad Peace be upon him to the Jews and Christians), \\\"Dispute you with us about Allah while He is our Lord and your Lord? And we are to be rewarded for our deeds and you for your deeds. And we are sincere to Him in worship and obedience (i.e. we worship Him Alone and none else, and we obey His Orders).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 140,\n          \"sura\" : 2\n        },\n        \"text\" : \"Or say you that Ibrahim (Abraham), Isma'il (Ishmael), Ishaque (Isaac), Ya'qub (Jacob) and Al-Asbat [the twelve sons of Ya'qub (Jacob)] were Jews or Christians? Say, \\\"Do you know better or does Allah (knows better that they all were Muslims)? And who is more unjust than he who conceals the testimony [i.e. to believe in Prophet Muhammad Peace be upon him when he comes, written in their Books. (See Verse 7:157)] he has from Allah? And Allah is not unaware of what you do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 141,\n          \"sura\" : 2\n        },\n        \"text\" : \"That was a nation who has passed away. They shall receive the reward of what they earned, and you of what you earn. And you will not be asked of what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 142,\n          \"sura\" : 2\n        },\n        \"text\" : \"The fools (pagans, hypocrites, and Jews) among the people will say, \\\"What has turned them (Muslims) from their Qiblah [prayer direction (towards Jerusalem)] to which they were used to face in prayer.\\\" Say, (O Muhammad SAW) \\\"To Allah belong both, east and the west. He guides whom He wills to a Straight Way.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 143,\n          \"sura\" : 2\n        },\n        \"text\" : \"Thus We have made you [true Muslims - real believers of Islamic Monotheism, true followers of Prophet Muhammad SAW and his Sunnah (legal ways)], a Wasat (just) (and the best) nation, that you be witnesses over mankind and the Messenger (Muhammad SAW) be a witness over you. And We made the Qiblah (prayer direction towards Jerusalem) which you used to face, only to test those who followed the Messenger (Muhammad SAW) from those who would turn on their heels (i.e. disobey the Messenger). Indeed it was great (heavy) except for those whom Allah guided. And Allah would never make your faith (prayers) to be lost (i.e. your prayers offered towards Jerusalem). Truly, Allah is full of kindness, the Most Merciful towards mankind.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 144,\n          \"sura\" : 2\n        },\n        \"text\" : \"Verily! We have seen the turning of your (Muhammad's SAW) face towards the heaven. Surely, We shall turn you to a Qiblah (prayer direction) that shall please you, so turn your face in the direction of Al-Masjid- al-Haram (at Makkah). And wheresoever you people are, turn your faces (in prayer) in that direction. Certainly, the people who were given the Scriptures (i.e. Jews and the Christians) know well that, that (your turning towards the direction of the Ka'bah at Makkah in prayers) is the truth from their Lord. And Allah is not unaware of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 145,\n          \"sura\" : 2\n        },\n        \"text\" : \"And even if you were to bring to the people of the Scripture (Jews and Christians) all the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.), they would not follow your Qiblah (prayer direction), nor are you going to follow their Qiblah (prayer direction). And they will not follow each other's Qiblah (prayer direction). Verily, if you follow their desires after that which you have received of knowledge (from Allah), then indeed you will be one of the Zalimun (polytheists, wrong-doers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 148,\n          \"sura\" : 2\n        },\n        \"text\" : \"For every nation there is a direction to which they face (in their prayers). So hasten towards all that is good. Wheresoever you may be, Allah will bring you together (on the Day of Resurrection). Truly, Allah is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 149,\n          \"sura\" : 2\n        },\n        \"text\" : \"And from wheresoever you start forth (for prayers), turn your face in the direction of Al-Masjid-al-Haram (at Makkah), that is indeed the truth from your Lord. And Allah is not unaware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 153,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who believe! Seek help in patience and As-Salat (the prayer). Truly! Allah is with As-Sabirin (the patient ones, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 154,\n          \"sura\" : 2\n        },\n        \"text\" : \"And say not of those who are killed in the Way of Allah, \\\"They are dead.\\\" Nay, they are living, but you perceive (it) not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 155,\n          \"sura\" : 2\n        },\n        \"text\" : \"And certainly, We shall test you with something of fear, hunger, loss of wealth, lives and fruits, but give glad tidings to As-Sabirin (the patient ones, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 156,\n          \"sura\" : 2\n        },\n        \"text\" : \"Who, when afflicted with calamity, say: \\\"Truly! To Allah we belong and truly, to Him we shall return.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 158,\n          \"sura\" : 2\n        },\n        \"text\" : \"Verily! As-Safa and Al-Marwah (two mountains in Makkah) are of the Symbols of Allah. So it is not a sin on him who perform Hajj or 'Umrah (pilgrimage) of the House (the Ka'bah at Makkah) to perform the going (Tawaf) between them (As-Safa and Al-Marwah). And whoever does good voluntarily, then verily, Allah is All-Recogniser, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 159,\n          \"sura\" : 2\n        },\n        \"text\" : \"Verily, those who conceal the clear proofs, evidences and the guidance, which We have sent down, after We have made it clear for the people in the Book, they are the ones cursed by Allah and cursed by the cursers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 161,\n          \"sura\" : 2\n        },\n        \"text\" : \"Verily, those who disbelieve, and die while they are disbelievers, it is they on whom is the Curse of Allah and of the angels and of mankind, combined.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 163,\n          \"sura\" : 2\n        },\n        \"text\" : \"And your Ilah (God) is One Ilah (God - Allah), La ilaha illa Huwa (there is none who has the right to be worshipped but He), the Most Beneficent, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 164,\n          \"sura\" : 2\n        },\n        \"text\" : \"Verily! In the creation of the heavens and the earth, and in the alternation of night and day, and the ships which sail through the sea with that which is of use to mankind, and the water (rain) which Allah sends down from the sky and makes the earth alive therewith after its death, and the moving (living) creatures of all kinds that He has scattered therein, and in the veering of winds and clouds which are held between the sky and the earth, are indeed Ayat (proofs, evidences, signs, etc.) for people of understanding.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 165,\n          \"sura\" : 2\n        },\n        \"text\" : \"And of mankind are some who take (for worship) others besides Allah as rivals (to Allah). They love them as they love Allah. But those who believe, love Allah more (than anything else). If only, those who do wrong could see, when they will see the torment, that all power belongs to Allah and that Allah is Severe in punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 166,\n          \"sura\" : 2\n        },\n        \"text\" : \"When those who were followed, disown (declare themselves innocent of) those who followed (them), and they see the torment, then all their relations will be cut off from them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 167,\n          \"sura\" : 2\n        },\n        \"text\" : \"And those who followed will say: \\\"If only we had one more chance to return (to the worldly life), we would disown (declare ourselves as innocent from) them as they have disowned (declared themselves as innocent from) us.\\\" Thus Allah will show them their deeds as regrets for them. And they will never get out of the Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 169,\n          \"sura\" : 2\n        },\n        \"text\" : \"[Shaitan (Satan)] commands you only what is evil and Fahsha (sinful), and that you should say against Allah what you know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 170,\n          \"sura\" : 2\n        },\n        \"text\" : \"When it is said to them: \\\"Follow what Allah has sent down.\\\" They say: \\\"Nay! We shall follow what we found our fathers following.\\\" (Would they do that!) Even though their fathers did not understand anything nor were they guided?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 171,\n          \"sura\" : 2\n        },\n        \"text\" : \"And the example of those who disbelieve, is as that of him who shouts to the (flock of sheep) that hears nothing but calls and cries. (They are) deaf, dumb and blind. So they do not understand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 172,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who believe (in the Oneness of Allah - Islamic Monotheism)! Eat of the lawful things that We have provided you with, and be grateful to Allah, if it is indeed He Whom you worship.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 173,\n          \"sura\" : 2\n        },\n        \"text\" : \"He has forbidden you only the Maytatah (dead animals), and blood, and the flesh of swine, and that which is slaughtered as a scrifice for others than Allah (or has been slaughtered for idols, etc., on which Allah's Name has not been mentioned while slaughtering). But if one is forced by necessity without wilful disobedience nor transgressing due limits, then there is no sin on him. Truly, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 174,\n          \"sura\" : 2\n        },\n        \"text\" : \"Verily, those who conceal what Allah has sent down of the Book, and purchase a small gain therewith (of worldly things), they eat into their bellies nothing but fire. Allah will not speak to them on the Day of Resurrection, nor purify them, and theirs will be a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 176,\n          \"sura\" : 2\n        },\n        \"text\" : \"That is because Allah has sent down the Book (the Quran) in truth. And verily, those who disputed as regards the Book are far away in opposition.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 177,\n          \"sura\" : 2\n        },\n        \"text\" : \"It is not Al-Birr (piety, righteousness, and each and every act of obedience to Allah, etc.) that you turn your faces towards east and (or) west (in prayers); but Al-Birr is (the quality of) the one who believes in Allah, the Last Day, the Angels, the Book, the Prophets and gives his wealth, in spite of love for it, to the kinsfolk, to the orphans, and to Al-Masakin (the poor), and to the wayfarer, and to those who ask, and to set slaves free, performs As-Salat (Iqamat-as-Salat), and gives the Zakat, and who fulfill their covenant when they make it, and who are As-Sabirin (the patient ones, etc.) in extreme poverty and ailment (disease) and at the time of fighting (during the battles). Such are the people of the truth and they are Al-Muttaqun (pious - see V. 2:2).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 178,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who believe! Al-Qisas (the Law of Equality in punishment) is prescribed for you in case of murder: the free for the free, the slave for the slave, and the female for the female. But if the killer is forgiven by the brother (or the relatives, etc.) of the killed against blood money, then adhering to it with fairness and payment of the blood money, to the heir should be made in fairness. This is an alleviation and a mercy from your Lord. So after this whoever transgresses the limits (i.e. kills the killer after taking the blood money), he shall have a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 181,\n          \"sura\" : 2\n        },\n        \"text\" : \"Then whoever changes the bequest after hearing it, the sin shall be on those who make the change. Truly, Allah is All-Hearer, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 182,\n          \"sura\" : 2\n        },\n        \"text\" : \"But he who fears from a testator some unjust act or wrong-doing, and thereupon he makes peace between the parties concerned, there shall be no sin on him. Certainly, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 185,\n          \"sura\" : 2\n        },\n        \"text\" : \"The month of Ramadan in which was revealed the Quran, a guidance for mankind and clear proofs for the guidance and the criterion (between right and wrong). So whoever of you sights (the crescent on the first night of) the month (of Ramadan i.e. is present at his home), he must observe Saum (fasts) that month, and whoever is ill or on a journey, the same number [of days which one did not observe Saum (fasts) must be made up] from other days. Allah intends for you ease, and He does not want to make things difficult for you. (He wants that you) must complete the same number (of days), and that you must magnify Allah [i.e. to say Takbir (Allahu-Akbar; Allah is the Most Great) on seeing the crescent of the months of Ramadan and Shawwal] for having guided you so that you may be grateful to Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 186,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when My slaves ask you (O Muhammad SAW) concerning Me, then (answer them), I am indeed near (to them by My Knowledge). I respond to the invocations of the supplicant when he calls on Me (without any mediator or intercessor). So let them obey Me and believe in Me, so that they may be led aright.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 187,\n          \"sura\" : 2\n        },\n        \"text\" : \"It is made lawful for you to have sexual relations with your wives on the night of As-Saum (the fasts). They are Libas [i.e. body cover, or screen, or Sakan, (i.e. you enjoy the pleasure of living with her - as in Verse 7:189) Tafsir At-Tabari], for you and you are the same for them. Allah knows that you used to deceive yourselves, so He turned to you (accepted your repentance) and forgave you. So now have sexual relations with them and seek that which Allah has ordained for you (offspring), and eat and drink until the white thread (light) of dawn appears to you distinct from the black thread (darkness of night), then complete your Saum (fast) till the nightfall. And do not have sexual relations with them (your wives) while you are in I'tikaf (i.e. confining oneself in a mosque for prayers and invocations leaving the worldly activities) in the mosques. These are the limits (set) by Allah, so approach them not. Thus does Allah make clear His Ayat (proofs, evidences, lessons, signs, revelations, verses, laws, legal and illegal things, Allah's set limits, orders, etc.) to mankind that they may become Al-Muttaqun (the pious - see V. 2:2).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 189,\n          \"sura\" : 2\n        },\n        \"text\" : \"They ask you (O Muhammad SAW) about the new moons. Say: These are signs to mark fixed periods of time for mankind and for the pilgrimage. It is not Al-Birr (piety, righteousness, etc.) that you enter the houses from the back but Al-Birr (is the quality of the one) who fears Allah. So enter houses through their proper doors, and fear Allah that you may be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 190,\n          \"sura\" : 2\n        },\n        \"text\" : \"And fight in the Way of Allah those who fight you, but transgress not the limits. Truly, Allah likes not the transgressors. [This Verse is the first one that was revealed in connection with Jihad, but it was supplemented by another (V. 9:36)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 192,\n          \"sura\" : 2\n        },\n        \"text\" : \"But if they cease, then Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 193,\n          \"sura\" : 2\n        },\n        \"text\" : \"And fight them until there is no more Fitnah (disbelief and worshipping of others along with Allah) and (all and every kind of) worship is for Allah (Alone). But if they cease, let there be no transgression except against Az-Zalimun (the polytheists, and wrong-doers, etc.)\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 194,\n          \"sura\" : 2\n        },\n        \"text\" : \"The sacred month is for the sacred month, and for the prohibited things, there is the Law of Equality (Qisas). Then whoever transgresses the prohibition against you, you transgress likewise against him. And fear Allah, and know that Allah is with Al-Muttaqun (the pious - see V. 2:2).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 195,\n          \"sura\" : 2\n        },\n        \"text\" : \"And spend in the Cause of Allah (i.e. Jihad of all kinds, etc.) and do not throw yourselves into destruction (by not spending your wealth in the Cause of Allah), and do good. Truly, Allah loves Al-Muhsinun (the good-doers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 196,\n          \"sura\" : 2\n        },\n        \"text\" : \"And perform properly (i.e. all the ceremonies according to the ways of Prophet Muhammad SAW), the Hajj and 'Umrah (i.e. the pilgrimage to Makkah) for Allah. But if you are prevented (from completing them), sacrifice a Hady (animal, i.e. a sheep, a cow, or a camel, etc.) such as you can afford, and do not shave your heads until the Hady reaches the place of sacrifice. And whosoever of you is ill or has an ailment in his scalp (necessitating shaving), he must pay a Fidyah (ransom) of either observing Saum (fasts) (three days) or giving Sadaqah (charity - feeding six poor persons) or offering sacrifice (one sheep). Then if you are in safety and whosoever performs the 'Umrah in the months of Hajj, before (performing) the Hajj, (i.e. Hajj-at-Tamattu' and Al-Qiran), he must slaughter a Hady such as he can afford, but if he cannot afford it, he should observe Saum (fasts) three days during the Hajj and seven days after his return (to his home), making ten days in all. This is for him whose family is not present at Al-Masjid-al-Haram (i.e. non-resident of Makkah). And fear Allah much and know that Allah is Severe in punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 197,\n          \"sura\" : 2\n        },\n        \"text\" : \"The Hajj (pilgrimage) is (in) the well-known (lunar year) months (i.e. the 10th month, the 11th month and the first ten days of the 12th month of the Islamic calendar, i.e. two months and ten days). So whosoever intends to perform Hajj therein by assuming Ihram), then he should not have sexual relations (with his wife), nor commit sin, nor dispute unjustly during the Hajj. And whatever good you do, (be sure) Allah knows it. And take a provision (with you) for the journey, but the best provision is At-Taqwa (piety, righteousness, etc.). So fear Me, O men of understanding!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 198,\n          \"sura\" : 2\n        },\n        \"text\" : \"There is no sin on you if you seek the Bounty of your Lord (during pilgrimage by trading, etc.). Then when you leave 'Arafat, remember Allah (by glorifying His Praises, i.e. prayers and invocations, etc.) at the Mash'ar-il-Haram. And remember Him (by invoking Allah for all good, etc.) as He has guided you, and verily, you were, before, of those who were astray.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 199,\n          \"sura\" : 2\n        },\n        \"text\" : \"Then depart from the place whence all the people depart and ask Allah for His Forgiveness. Truly, Allah is Oft-Forgiving, Most-Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 200,\n          \"sura\" : 2\n        },\n        \"text\" : \"So when you have accomplished your Manasik [(i.e. Ihram, Tawaf of the Ka'bah and As-Safa and Al-Marwah), stay at 'Arafat, Muzdalifah and Mina, Ramy of Jamarat, (stoning of the specified pillars in Mina) slaughtering of Hady (animal, etc.)]. Remember Allah as you remember your forefathers or with a far more remembrance. But of mankind there are some who say: \\\"Our Lord! Give us (Your Bounties) in this world!\\\" and for such there will be no portion in the Hereafter.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 202,\n          \"sura\" : 2\n        },\n        \"text\" : \"For them there will be alloted a share for what they have earned. And Allah is Swift at reckoning.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 203,\n          \"sura\" : 2\n        },\n        \"text\" : \"And remember Allah during the appointed Days. But whosoever hastens to leave in two days, there is no sin on him and whosoever stays on, there is no sin on him, if his aim is to do good and obey Allah (fear Him), and know that you will surely be gathered unto Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 204,\n          \"sura\" : 2\n        },\n        \"text\" : \"And of mankind there is he whose speech may please you (O Muhammad SAW), in this worldly life, and he calls Allah to witness as to that which is in his heart, yet he is the most quarrelsome of the opponents.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 205,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when he turns away (from you \\\"O Muhammad SAW \\\"), his effort in the land is to make mischief therein and to destroy the crops and the cattle, and Allah likes not mischief.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 206,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when it is said to him, \\\"Fear Allah\\\", he is led by arrogance to (more) crime. So enough for him is Hell, and worst indeed is that place to rest!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 207,\n          \"sura\" : 2\n        },\n        \"text\" : \"And of mankind is he who would sell himself, seeking the Pleasure of Allah. And Allah is full of Kindness to (His) slaves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 208,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who believe! Enter perfectly in Islam (by obeying all the rules and regulations of the Islamic religion) and follow not the footsteps of Shaitan (Satan). Verily! He is to you a plain enemy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 209,\n          \"sura\" : 2\n        },\n        \"text\" : \"Then if you slide back after the clear signs (Prophet Muhammad SAW and this Quran, and Islam) have come to you, then know that Allah is All-Mighty, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 210,\n          \"sura\" : 2\n        },\n        \"text\" : \"Do they then wait for anything other than that Allah should come to them in the shadows of the clouds and the angels? (Then) the case would be already judged. And to Allah return all matters (for decision).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 211,\n          \"sura\" : 2\n        },\n        \"text\" : \"Ask the Children of Israel how many clear Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) We gave them. And whoever changes Allah's Favour after it had come to him, [e.g. renounces the Religion of Allah (Islam) and accepts Kufr (disbelief),] then surely, Allah is Severe in punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 212,\n          \"sura\" : 2\n        },\n        \"text\" : \"Beautified is the life of this world for those who disbelieve, and they mock at those who believe. But those who obey Allah's Orders and keep away from what He has forbidden, will be above them on the Day of Resurrection. And Allah gives (of His Bounty, Blessings, Favours, Honours, etc. on the Day of Resurrection) to whom He wills without limit.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 213,\n          \"sura\" : 2\n        },\n        \"text\" : \"Mankind were one community and Allah sent Prophets with glad tidings and warnings, and with them He sent the Scripture in truth to judge between people in matters wherein they differed. And only those to whom (the Scripture) was given differed concerning it after clear proofs had come unto them through hatred, one to another. Then Allah by His Leave guided those who believed to the truth of that wherein they differed. And Allah guides whom He wills to a Straight Path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 214,\n          \"sura\" : 2\n        },\n        \"text\" : \"Or think you that you will enter Paradise without such (trials) as came to those who passed away before you? They were afflicted with severe poverty and ailments and were so shaken that even the Messenger and those who believed along with him said, \\\"When (will come) the Help of Allah?\\\" Yes! Certainly, the Help of Allah is near!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 215,\n          \"sura\" : 2\n        },\n        \"text\" : \"They ask you (O Muhammad SAW) what they should spend. Say: Whatever you spend of good must be for parents and kindred and orphans and Al-Masakin (the poor) and the wayfarers, and whatever you do of good deeds, truly, Allah knows it well.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 216,\n          \"sura\" : 2\n        },\n        \"text\" : \"Jihad (holy fighting in Allah's Cause) is ordained for you (Muslims) though you dislike it, and it may be that you dislike a thing which is good for you and that you like a thing which is bad for you. Allah knows but you do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 217,\n          \"sura\" : 2\n        },\n        \"text\" : \"They ask you concerning fighting in the Sacred Months (i.e. 1st, 7th, 11th and 12th months of the Islamic calendar). Say, \\\"Fighting therein is a great (transgression) but a greater (transgression) with Allah is to prevent mankind from following the Way of Allah, to disbelieve in Him, to prevent access to Al-Masjid-al-Haram (at Makkah), and to drive out its inhabitants, and Al-Fitnah is worse than killing. And they will never cease fighting you until they turn you back from your religion (Islamic Monotheism) if they can. And whosoever of you turns back from his religion and dies as a disbeliever, then his deeds will be lost in this life and in the Hereafter, and they will be the dwellers of the Fire. They will abide therein forever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 218,\n          \"sura\" : 2\n        },\n        \"text\" : \"Verily, those who have believed, and those who have emigrated (for Allah's Religion) and have striven hard in the Way of Allah, all these hope for Allah's Mercy. And Allah is Oft-Forgiving, Most-Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 219,\n          \"sura\" : 2\n        },\n        \"text\" : \"They ask you (O Muhammad SAW) concerning alcoholic drink and gambling. Say: \\\"In them is a great sin, and (some) benefit for men, but the sin of them is greater than their benefit.\\\" And they ask you what they ought to spend. Say: \\\"That which is beyond your needs.\\\" Thus Allah makes clear to you His Laws in order that you may give thought.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 220,\n          \"sura\" : 2\n        },\n        \"text\" : \"In (to) this worldly life and in the Hereafter. And they ask you concerning orphans. Say: \\\"The best thing is to work honestly in their property, and if you mix your affairs with theirs, then they are your brothers. And Allah knows him who means mischief (e.g. to swallow their property) from him who means good (e.g. to save their property). And if Allah had wished, He could have put you into difficulties. Truly, Allah is All-Mighty, All-Wise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 221,\n          \"sura\" : 2\n        },\n        \"text\" : \"And do not marry Al-Mushrikat (idolatresses, etc.) till they believe (worship Allah Alone). And indeed a slave woman who believes is better than a (free) Mushrikah (idolatress, etc.), even though she pleases you. And give not (your daughters) in marriage to Al-Mushrikun till they believe (in Allah Alone) and verily, a believing slave is better than a (free) Mushrik (idolater, etc.), even though he pleases you. Those (Al-Mushrikun) invite you to the Fire, but Allah invites (you) to Paradise and Forgiveness by His Leave, and makes His Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) clear to mankind that they may remember.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 222,\n          \"sura\" : 2\n        },\n        \"text\" : \"They ask you concerning menstruation. Say: that is an Adha (a harmful thing for a husband to have a sexual intercourse with his wife while she is having her menses), therefore keep away from women during menses and go not unto them till they have purified (from menses and have taken a bath). And when they have purified themselves, then go in unto them as Allah has ordained for you (go in unto them in any manner as long as it is in their vagina). Truly, Allah loves those who turn unto Him in repentance and loves those who purify themselves (by taking a bath and cleaning and washing thoroughly their private parts, bodies, for their prayers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 223,\n          \"sura\" : 2\n        },\n        \"text\" : \"Your wives are a tilth for you, so go to your tilth when or how you will, and send (good deeds, or ask Allah to bestow upon you pious offspring) before you for your ownselves. And fear Allah, and know that you are to meet Him (in the Hereafter), and give good tidings to the believers (O Muhammad SAW).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 224,\n          \"sura\" : 2\n        },\n        \"text\" : \"And make not Allah's (Name) an excuse in your oaths against your doing good and acting piously, and making peace among mankind. And Allah is All-Hearer, All-Knower (i.e. do not swear much and if you have sworn against doing something good then give an expiation for the oath and do good).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 225,\n          \"sura\" : 2\n        },\n        \"text\" : \"Allah will not call you to account for that which is unintentional in your oaths, but He will call you to account for that which your hearts have earned. And Allah is Oft-Forgiving, Most-Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 226,\n          \"sura\" : 2\n        },\n        \"text\" : \"Those who take an oath not to have sexual relation with their wives must wait four months, then if they return (change their idea in this period), verily, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 227,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if they decide upon divorce, then Allah is All-Hearer, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 228,\n          \"sura\" : 2\n        },\n        \"text\" : \"And divorced women shall wait (as regards their marriage) for three menstrual periods, and it is not lawful for them to conceal what Allah has created in their wombs, if they believe in Allah and the Last Day. And their husbands have the better right to take them back in that period, if they wish for reconciliation. And they (women) have rights (over their husbands as regards living expenses, etc.) similar (to those of their husbands) over them (as regards obedience and respect, etc.) to what is reasonable, but men have a degree (of responsibility) over them. And Allah is All-Mighty, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 229,\n          \"sura\" : 2\n        },\n        \"text\" : \"The divorce is twice, after that, either you retain her on reasonable terms or release her with kindness. And it is not lawful for you (men) to take back (from your wives) any of your Mahr (bridal money given by the husband to his wife at the time of marriage) which you have given them, except when both parties fear that they would be unable to keep the limits ordained by Allah (e.g. to deal with each other on a fair basis). Then if you fear that they would not be able to keep the limits ordained by Allah, then there is no sin on either of them if she gives back (the Mahr or a part of it) for her Al-Khul' (divorce). These are the limits ordained by Allah, so do not transgress them. And whoever transgresses the limits ordained by Allah, then such are the Zalimun (wrong-doers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 230,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if he has divorced her (the third time), then she is not lawful unto him thereafter until she has married another husband. Then, if the other husband divorces her, it is no sin on both of them that they reunite, provided they feel that they can keep the limits ordained by Allah. These are the limits of Allah, which He makes plain for the people who have knowledge.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 231,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when you have divorced women and they have fulfilled the term of their prescribed period, either take them back on reasonable basis or set them free on reasonable basis. But do not take them back to hurt them, and whoever does that, then he has wronged himself. And treat not the Verses (Laws) of Allah as a jest, but remember Allah's Favours on you (i.e. Islam), and that which He has sent down to you of the Book (i.e. the Quran) and Al-Hikmah (the Prophet's Sunnah - legal ways - Islamic jurisprudence, etc.) whereby He instructs you. And fear Allah, and know that Allah is All-Aware of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 232,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when you have divorced women and they have fulfilled the term of their prescribed period, do not prevent them from marrying their (former) husbands, if they mutually agree on reasonable basis. This (instruction) is an admonition for him among you who believes in Allah and the Last Day. That is more virtuous and purer for you. Allah knows and you know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 233,\n          \"sura\" : 2\n        },\n        \"text\" : \"The mothers shall give suck to their children for two whole years, (that is) for those (parents) who desire to complete the term of suckling, but the father of the child shall bear the cost of the mother's food and clothing on a reasonable basis. No person shall have a burden laid on him greater than he can bear. No mother shall be treated unfairly on account of her child, nor father on account of his child. And on the (father's) heir is incumbent the like of that (which was incumbent on the father). If they both decide on weaning, by mutual consent, and after due consultation, there is no sin on them. And if you decide on a foster suckling-mother for your children, there is no sin on you, provided you pay (the mother) what you agreed (to give her) on reasonable basis. And fear Allah and know that Allah is All-Seer of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 234,\n          \"sura\" : 2\n        },\n        \"text\" : \"And those of you who die and leave wives behind them, they (the wives) shall wait (as regards their marriage) for four months and ten days, then when they have fulfilled their term, there is no sin on you if they (the wives) dispose of themselves in a just and honourable manner (i.e. they can marry). And Allah is Well-Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 235,\n          \"sura\" : 2\n        },\n        \"text\" : \"And there is no sin on you if you make a hint of betrothal or conceal it in yourself, Allah knows that you will remember them, but do not make a promise of contract with them in secret except that you speak an honourable saying according to the Islamic law (e.g. you can say to her, \\\"If one finds a wife like you, he will be happy\\\"). And do not consummate the marriage until the term prescribed is fulfilled. And know that Allah knows what is in your minds, so fear Him. And know that Allah is Oft-Forgiving, Most Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 237,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if you divorce them before you have touched (had a sexual relation with) them, and you have appointed unto them the Mahr (bridal money given by the husbands to his wife at the time of marriage), then pay half of that (Mahr), unless they (the women) agree to forego it, or he (the husband), in whose hands is the marriage tie, agrees to forego and give her full appointed Mahr. And to forego and give (her the full Mahr) is nearer to At-Taqwa (piety, right-eousness, etc.). And do not forget liberality between yourselves. Truly, Allah is All-Seer of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 238,\n          \"sura\" : 2\n        },\n        \"text\" : \"Guard strictly (five obligatory) As-Salawat (the prayers) especially the middle Salat (i.e. the best prayer - 'Asr). And stand before Allah with obedience [and do not speak to others during the Salat (prayers)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 240,\n          \"sura\" : 2\n        },\n        \"text\" : \"And those of you who die and leave behind wives should bequeath for their wives a year's maintenance and residence without turning them out, but if they (wives) leave, there is no sin on you for that which they do of themselves, provided it is honourable (e.g. lawful marriage). And Allah is All-Mighty, All-Wise. [The order of this Verse has been cancelled (abrogated) by Verse 4:12].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 242,\n          \"sura\" : 2\n        },\n        \"text\" : \"Thus Allah makes clear His Ayat (Laws) to you, in order that you may understand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 243,\n          \"sura\" : 2\n        },\n        \"text\" : \"Did you (O Muhammad SAW) not think of those who went forth from their homes in thousands, fearing death? Allah said to them, \\\"Die\\\". And then He restored them to life. Truly, Allah is full of Bounty to mankind, but most men thank not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 244,\n          \"sura\" : 2\n        },\n        \"text\" : \"And fight in the Way of Allah and know that Allah is All-Hearer, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 245,\n          \"sura\" : 2\n        },\n        \"text\" : \"Who is he that will lend to Allah a goodly loan so that He may multiply it to him many times? And it is Allah that decreases or increases (your provisions), and unto Him you shall return.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 246,\n          \"sura\" : 2\n        },\n        \"text\" : \"Have you not thought about the group of the Children of Israel after (the time of) Musa (Moses)? When they said to a Prophet of theirs, \\\"Appoint for us a king and we will fight in Allah's Way.\\\" He said, \\\"Would you then refrain from fighting, if fighting was prescribed for you?\\\" They said, \\\"Why should we not fight in Allah's Way while we have been driven out of our homes and our children (families have been taken as captives)?\\\" But when fighting was ordered for them, they turned away, all except a few of them. And Allah is All-Aware of the Zalimun (polytheists and wrong-doers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 247,\n          \"sura\" : 2\n        },\n        \"text\" : \"And their Prophet (Samuel) said to them, \\\"Indeed Allah has appointed Talut (Saul) as a king over you.\\\" They said, \\\"How can he be a king over us when we are better fitted than him for the kingdom, and he has not been given enough wealth.\\\" He said: \\\"Verily, Allah has chosen him above you and has increased him abundantly in knowledge and stature. And Allah grants His Kingdom to whom He wills. And Allah is All-Sufficient for His creatures' needs, All-Knower.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 248,\n          \"sura\" : 2\n        },\n        \"text\" : \"And their Prophet (Samuel) said to them: Verily! The sign of His Kingdom is that there shall come to you At-Tabut (a wooden box), wherein is Sakinah (peace and reassurance) from your Lord and a remnant of that which Musa (Moses) and Harun (Aaron) left behind, carried by the angels. Verily, in this is a sign for you if you are indeed believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 249,\n          \"sura\" : 2\n        },\n        \"text\" : \"Then when Talut (Saul) set out with the army, he said: \\\"Verily! Allah will try you by a river. So whoever drinks thereof, he is not of me, and whoever tastes it not, he is of me, except him who takes (thereof) in the hollow of his hand.\\\" Yet, they drank thereof, all, except a few of them. So when he had crossed it (the river), he and those who believed with him, they said: \\\"We have no power this day against Jalut (Goliath) and his hosts.\\\" But those who knew with certainty that they were to meet their Lord, said: \\\"How often a small group overcame a mighty host by Allah's Leave?\\\" And Allah is with As-Sabirin (the patient ones, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 251,\n          \"sura\" : 2\n        },\n        \"text\" : \"So they routed them by Allah's Leave and Dawud (David) killed Jalut (Goliath), and Allah gave him [Dawud (David)] the kingdom [after the death of Talut (Saul) and Samuel] and Al-Hikmah (Prophethood), and taught him of that which He willed. And if Allah did not check one set of people by means of another, the earth would indeed be full of mischief. But Allah is full of Bounty to the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 252,\n          \"sura\" : 2\n        },\n        \"text\" : \"These are the Verses of Allah, We recite them to you (O Muhammad SAW) in truth, and surely, you are one of the Messengers (of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 253,\n          \"sura\" : 2\n        },\n        \"text\" : \"Those Messengers! We preferred some to others; to some of them Allah spoke (directly); others He raised to degrees (of honour); and to 'Iesa (Jesus), the son of Maryam (Mary), We gave clear proofs and evidences, and supported him with Ruh-ul-Qudus [Jibrael (Gabriel)]. If Allah had willed, succeeding generations would not have fought against each other, after clear Verses of Allah had come to them, but they differed - some of them believed and others disbelieved. If Allah had willed, they would not have fought against one another, but Allah does what He likes.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 255,\n          \"sura\" : 2\n        },\n        \"text\" : \"Allah! La ilaha illa Huwa (none has the right to be worshipped but He), the Ever Living, the One Who sustains and protects all that exists. Neither slumber, nor sleep overtake Him. To Him belongs whatever is in the heavens and whatever is on earth. Who is he that can intercede with Him except with His Permission? He knows what happens to them (His creatures) in this world, and what will happen to them in the Hereafter. And they will never compass anything of His Knowledge except that which He wills. His Kursi extends over the heavens and the earth, and He feels no fatigue in guarding and preserving them. And He is the Most High, the Most Great. [This Verse 2:255 is called Ayat-ul-Kursi.]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 256,\n          \"sura\" : 2\n        },\n        \"text\" : \"There is no compulsion in religion. Verily, the Right Path has become distinct from the wrong path. Whoever disbelieves in Taghut and believes in Allah, then he has grasped the most trustworthy handhold that will never break. And Allah is All-Hearer, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 257,\n          \"sura\" : 2\n        },\n        \"text\" : \"Allah is the Wali (Protector or Guardian) of those who believe. He brings them out from darkness into light. But as for those who disbelieve, their Auliya (supporters and helpers) are Taghut [false deities and false leaders, etc.], they bring them out from light into darkness. Those are the dwellers of the Fire, and they will abide therein forever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 258,\n          \"sura\" : 2\n        },\n        \"text\" : \"Have you not looked at him who disputed with Ibrahim (Abraham) about his Lord (Allah), because Allah had given him the kingdom? When Ibrahim (Abraham) said (to him): \\\"My Lord (Allah) is He Who gives life and causes death.\\\" He said, \\\"I give life and cause death.\\\" Ibrahim (Abraham) said, \\\"Verily! Allah causes the sun to rise from the east; then cause it you to rise from the west.\\\" So the disbeliever was utterly defeated. And Allah guides not the people, who are Zalimun (wrong-doers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 259,\n          \"sura\" : 2\n        },\n        \"text\" : \"Or like the one who passed by a town and it had tumbled over its roofs. He said: \\\"Oh! How will Allah ever bring it to life after its death?\\\" So Allah caused him to die for a hundred years, then raised him up (again). He said: \\\"How long did you remain (dead)?\\\" He (the man) said: \\\"(Perhaps) I remained (dead) a day or part of a day\\\". He said: \\\"Nay, you have remained (dead) for a hundred years, look at your food and your drink, they show no change; and look at your donkey! And thus We have made of you a sign for the people. Look at the bones, how We bring them together and clothe them with flesh\\\". When this was clearly shown to him, he said, \\\"I know (now) that Allah is Able to do all things.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 260,\n          \"sura\" : 2\n        },\n        \"text\" : \"And (remember) when Ibrahim (Abraham) said, \\\"My Lord! Show me how You give life to the dead.\\\" He (Allah) said: \\\"Do you not believe?\\\" He [Ibrahim (Abraham)] said: \\\"Yes (I believe), but to be stronger in Faith.\\\" He said: \\\"Take four birds, then cause them to incline towards you (then slaughter them, cut them into pieces), and then put a portion of them on every hill, and call them, they will come to you in haste. And know that Allah is All-Mighty, All-Wise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 261,\n          \"sura\" : 2\n        },\n        \"text\" : \"The likeness of those who spend their wealth in the Way of Allah, is as the likeness of a grain (of corn); it grows seven ears, and each ear has a hundred grains. Allah gives manifold increase to whom He pleases. And Allah is All-Sufficient for His creatures' needs, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 262,\n          \"sura\" : 2\n        },\n        \"text\" : \"Those who spend their wealth in the Cause of Allah, and do not follow up their gifts with reminders of their generosity or with injury, their reward is with their Lord. On them shall be no fear, nor shall they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 263,\n          \"sura\" : 2\n        },\n        \"text\" : \"Kind words and forgiving of faults are better than Sadaqah (charity) followed by injury. And Allah is Rich (Free of all wants) and He is Most-Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 264,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who believe! Do not render in vain your Sadaqah (charity) by reminders of your generosity or by injury, like him who spends his wealth to be seen of men, and he does not believe in Allah, nor in the Last Day. His likeness is the likeness of a smooth rock on which is a little dust; on it falls heavy rain which leaves it bare. They are not able to do anything with what they have earned. And Allah does not guide the disbelieving people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 265,\n          \"sura\" : 2\n        },\n        \"text\" : \"And the likeness of those who spend their wealth seeking Allah's Pleasure while they in their ownselves are sure and certain that Allah will reward them (for their spending in His Cause), is the likeness of a garden on a height; heavy rain falls on it and it doubles its yield of harvest. And if it does not receive heavy rain, light rain suffices it. And Allah is All-Seer of (knows well) what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 266,\n          \"sura\" : 2\n        },\n        \"text\" : \"Would any of you wish to have a garden with date-palms and vines, with rivers flowing underneath, and all kinds of fruits for him therein, while he is striken with old age, and his children are weak (not able to look after themselves), then it is struck with a fiery whirlwind, so that it is burnt? Thus does Allah make clear His Ayat (proofs, evidences, verses) to you that you may give thought.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 267,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who believe! Spend of the good things which you have (legally) earned, and of that which We have produced from the earth for you, and do not aim at that which is bad to spend from it, (though) you would not accept it save if you close your eyes and tolerate therein. And know that Allah is Rich (Free of all wants), and Worthy of all praise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 268,\n          \"sura\" : 2\n        },\n        \"text\" : \"Shaitan (Satan) threatens you with poverty and orders you to commit Fahsha (evil deeds, illegal sexual intercourse, sins etc.); whereas Allah promises you Forgiveness from Himself and Bounty, and Allah is All-Sufficient for His creatures' needs, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 270,\n          \"sura\" : 2\n        },\n        \"text\" : \"And whatever you spend for spendings (e.g., in Sadaqah - charity, etc. for Allah's Cause) or whatever vow you make, be sure Allah knows it all. And for the Zalimun (wrong-doers, etc.) there are no helpers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 271,\n          \"sura\" : 2\n        },\n        \"text\" : \"If you disclose your Sadaqat (alms-giving), it is well, but if you conceal it, and give it to the poor, that is better for you. (Allah) will forgive you some of your sins. And Allah is Well-Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 272,\n          \"sura\" : 2\n        },\n        \"text\" : \"Not upon you (Muhammad SAW) is their guidance, but Allah guides whom He wills. And whatever you spend in good, it is for yourselves, when you spend not except seeking Allah's Countenance. And whatever you spend in good, it will be repaid to you in full, and you shall not be wronged.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 273,\n          \"sura\" : 2\n        },\n        \"text\" : \"(Charity is) for Fuqara (the poor), who in Allah's Cause are restricted (from travel), and cannot move about in the land (for trade or work). The one who knows them not, thinks that they are rich because of their modesty. You may know them by their mark, they do not beg of people at all. And whatever you spend in good, surely Allah knows it well.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 274,\n          \"sura\" : 2\n        },\n        \"text\" : \"Those who spend their wealth (in Allah's Cause) by night and day, in secret and in public, they shall have their reward with their Lord. On them shall be no fear, nor shall they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 275,\n          \"sura\" : 2\n        },\n        \"text\" : \"Those who eat Riba (usury) will not stand (on the Day of Resurrection) except like the standing of a person beaten by Shaitan (Satan) leading him to insanity. That is because they say: \\\"Trading is only like Riba (usury),\\\" whereas Allah has permitted trading and forbidden Riba (usury). So whosoever receives an admonition from his Lord and stops eating Riba (usury) shall not be punished for the past; his case is for Allah (to judge); but whoever returns [to Riba (usury)], such are the dwellers of the Fire - they will abide therein.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 276,\n          \"sura\" : 2\n        },\n        \"text\" : \"Allah will destroy Riba (usury) and will give increase for Sadaqat (deeds of charity, alms, etc.) And Allah likes not the disbelievers, sinners.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 277,\n          \"sura\" : 2\n        },\n        \"text\" : \"Truly those who believe, and do deeds of righteousness, and perform As-Salat (Iqamat-as-Salat), and give Zakat, they will have their reward with their Lord. On them shall be no fear, nor shall they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 278,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who believe! Be afraid of Allah and give up what remains (due to you) from Riba (usury) (from now onward), if you are (really) believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 279,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if you do not do it, then take a notice of war from Allah and His Messenger but if you repent, you shall have your capital sums. Deal not unjustly (by asking more than your capital sums), and you shall not be dealt with unjustly (by receiving less than your capital sums).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 281,\n          \"sura\" : 2\n        },\n        \"text\" : \"And be afraid of the Day when you shall be brought back to Allah. Then every person shall be paid what he earned, and they shall not be dealt with unjustly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 282,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who believe! When you contract a debt for a fixed period, write it down. Let a scribe write it down in justice between you. Let not the scribe refuse to write as Allah has taught him, so let him write. Let him (the debtor) who incurs the liability dictate, and he must fear Allah, his Lord, and diminish not anything of what he owes. But if the debtor is of poor understanding, or weak, or is unable himself to dictate, then let his guardian dictate in justice. And get two witnesses out of your own men. And if there are not two men (available), then a man and two women, such as you agree for witnesses, so that if one of them (two women) errs, the other can remind her. And the witnesses should not refuse when they are called on (for evidence). You should not become weary to write it (your contract), whether it be small or big, for its fixed term, that is more just with Allah; more solid as evidence, and more convenient to prevent doubts among yourselves, save when it is a present trade which you carry out on the spot among yourselves, then there is no sin on you if you do not write it down. But take witnesses whenever you make a commercial contract. Let neither scribe nor witness suffer any harm, but if you do (such harm), it would be wickedness in you. So be afraid of Allah; and Allah teaches you. And Allah is the All-Knower of each and everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 283,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if you are on a journey and cannot find a scribe, then let there be a pledge taken (mortgaging); then if one of you entrust the other, let the one who is entrusted discharge his trust (faithfully), and let him be afraid of Allah, his Lord. And conceal not the evidence for he, who hides it, surely his heart is sinful. And Allah is All-Knower of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 284,\n          \"sura\" : 2\n        },\n        \"text\" : \"To Allah belongs all that is in the heavens and all that is on the earth, and whether you disclose what is in your ownselves or conceal it, Allah will call you to account for it. Then He forgives whom He wills and punishes whom He wills. And Allah is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 285,\n          \"sura\" : 2\n        },\n        \"text\" : \"The Messenger (Muhammad SAW) believes in what has been sent down to him from his Lord, and (so do) the believers. Each one believes in Allah, His Angels, His Books, and His Messengers. They say, \\\"We make no distinction between one another of His Messengers\\\" - and they say, \\\"We hear, and we obey. (We seek) Your Forgiveness, our Lord, and to You is the return (of all).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 286,\n          \"sura\" : 2\n        },\n        \"text\" : \"Allah burdens not a person beyond his scope. He gets reward for that (good) which he has earned, and he is punished for that (evil) which he has earned. \\\"Our Lord! Punish us not if we forget or fall into error, our Lord! Lay not on us a burden like that which You did lay on those before us (Jews and Christians); our Lord! Put not on us a burden greater than we have strength to bear. Pardon us and grant us Forgiveness. Have mercy on us. You are our Maula (Patron, Suppor-ter and Protector, etc.) and give us victory over the disbelieving people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 3\n        },\n        \"text\" : \"Alif-Lam-Mim. [These letters are one of the miracles of the Quran and none but Allah (Alone) knows their meanings].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 3\n        },\n        \"text\" : \"Allah! La ilaha illa Huwa (none has the right to be worshipped but He), the Ever Living, the One Who sustains and protects all that exists.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 3\n        },\n        \"text\" : \"Aforetime, as a guidance to mankind, And He sent down the criterion [of judgement between right and wrong (this Quran)]. Truly, those who disbelieve in the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah, for them there is a severe torment; and Allah is All-Mighty, All-Able of Retribution.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 3\n        },\n        \"text\" : \"Truly, nothing is hidden from Allah, in the earth or in the heavens.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 3\n        },\n        \"text\" : \"He it is Who shapes you in the wombs as He pleases. La ilaha illa Huwa (none has the right to be worshipped but He), the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 3\n        },\n        \"text\" : \"It is He Who has sent down to you (Muhammad SAW) the Book (this Quran). In it are Verses that are entirely clear, they are the foundations of the Book [and those are the Verses of Al-Ahkam (commandments, etc.), Al-Fara'id (obligatory duties) and Al-Hudud (legal laws for the punishment of thieves, adulterers, etc.)]; and others not entirely clear. So as for those in whose hearts there is a deviation (from the truth) they follow that which is not entirely clear thereof, seeking Al-Fitnah (polytheism and trials, etc.), and seeking for its hidden meanings, but none knows its hidden meanings save Allah. And those who are firmly grounded in knowledge say: \\\"We believe in it; the whole of it (clear and unclear Verses) are from our Lord.\\\" And none receive admonition except men of understanding. (Tafsir At-Tabari).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 3\n        },\n        \"text\" : \"Our Lord! Verily, it is You Who will gather mankind together on the Day about which there is no doubt. Verily, Allah never breaks His Promise\\\".\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 3\n        },\n        \"text\" : \"Verily, those who disbelieve, neither their properties nor their offspring will avail them whatsoever against Allah; and it is they who will be fuel of the Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 3\n        },\n        \"text\" : \"Like the behaviour of the people of Fir'aun (Pharaoh) and those before them; they belied Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.), so Allah seized (destroyed) them for their sins. And Allah is Severe in punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 3\n        },\n        \"text\" : \"There has already been a sign for you (O Jews) in the two armies that met (in combat i.e. the battle of Badr): One was fighting in the Cause of Allah, and as for the other (they) were disbelievers. They (the believers) saw them (the disbelievers) with their own eyes twice their number (although they were thrice their number). And Allah supports with His Victory whom He pleases. Verily, in this is a lesson for those who understand. (See Verse 8:44). (Tafsir At-Tabari)\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 3\n        },\n        \"text\" : \"Beautified for men is the love of things they covet; women, children, much of gold and silver (wealth), branded beautiful horses, cattle and well-tilled land. This is the pleasure of the present world's life; but Allah has the excellent return (Paradise with flowing rivers, etc.) with Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say: \\\"Shall I inform you of things far better than those? For Al-Muttaqun (the pious - see V. 2:2) there are Gardens (Paradise) with their Lord, underneath which rivers flow. Therein (is their) eternal (home) and Azwajun Mutahharatun (purified mates or wives) [i.e. they will have no menses, urine, or stool, etc.], And Allah will be pleased with them. And Allah is All-Seer of the (His) slaves\\\".\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 3\n        },\n        \"text\" : \"(They are) those who are patient ones, those who are true (in Faith, words, and deeds), and obedient with sincere devotion in worship to Allah. Those who spend [give the Zakat and alms in the Way of Allah] and those who pray and beg Allah's Pardon in the last hours of the night.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 3\n        },\n        \"text\" : \"Allah bears witness that La ilaha illa Huwa (none has the right to be worshipped but He), and the angels, and those having knowledge (also give this witness); (He is always) maintaining His creation in Justice. La ilah illa Huwa (none has the right to be worshipped but He), the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 3\n        },\n        \"text\" : \"Truly, the religion with Allah is Islam. Those who were given the Scripture (Jews and Christians) did not differ except, out of mutual jealousy, after knowledge had come to them. And whoever disbelieves in the Ayat (proofs, evidences, verses, signs, revelations, etc.) of Allah, then surely, Allah is Swift in calling to account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 3\n        },\n        \"text\" : \"So if they dispute with you (Muhammad SAW) say: \\\"I have submitted myself to Allah (in Islam), and (so have) those who follow me.\\\" And say to those who were given the Scripture (Jews and Christians) and to those who are illiterates (Arab pagans): \\\"Do you (also) submit yourselves (to Allah in Islam)?\\\" If they do, they are rightly guided; but if they turn away, your duty is only to convey the Message; and Allah is All-Seer of (His) slaves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 3\n        },\n        \"text\" : \"Verily! Those who disbelieve in the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah and kill the Prophets without right, and kill those men who order just dealings,  announce to them a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 3\n        },\n        \"text\" : \"Have you not seen those who have been given a portion of the Scripture? They are being invited to the Book of Allah to settle their dispute, then a party of them turn away, and they are averse.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 3\n        },\n        \"text\" : \"This is because they say: \\\"The Fire shall not touch us but for a number of days.\\\" And that which they used to invent regarding their religion has deceived them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"O Allah! Possessor of the kingdom, You give the kingdom to whom You will, and You take the kingdom from whom You will, and You endue with honour whom You will, and You humiliate whom You will. In Your Hand is the good. Verily, You are Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 3\n        },\n        \"text\" : \"Let not the believers take the disbelievers as Auliya (supporters, helpers, etc.) instead of the believers, and whoever does that will never be helped by Allah in any way, except if you indeed fear a danger from them. And Allah warns you against Himself (His Punishment), and to Allah is the final return.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Whether you hide what is in your breasts or reveal it, Allah knows it, and He knows what is in the heavens and what is in the earth. And Allah is Able to do all things.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 3\n        },\n        \"text\" : \"On the Day when every person will be confronted with all the good he has done, and all the evil he has done, he will wish that there were a great distance between him and his evil. And Allah warns you against Himself (His Punishment) and Allah is full of Kindness to the (His) slaves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say (O Muhammad SAW to mankind): \\\"If you (really) love Allah then follow me (i.e. accept Islamic Monotheism, follow the Quran and the Sunnah), Allah will love you and forgive you of your sins. And Allah is Oft-Forgiving, Most Merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Obey Allah and the Messenger (Muhammad SAW).\\\" But if they turn away, then Allah does not like the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 3\n        },\n        \"text\" : \"Allah chose Adam, Nuh (Noah), the family of Ibrahim (Abraham) and the family of 'Imran above the 'Alamin (mankind and jinns) (of their times).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 3\n        },\n        \"text\" : \"Offspring, one of the other, and Allah is the All-Hearer, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 3\n        },\n        \"text\" : \"(Remember) when the wife of 'Imran said: \\\"O my Lord! I have vowed to You what (the child that) is in my womb to be dedicated for Your services (free from all worldly work; to serve Your Place of worship), so accept this, from me. Verily, You are the All-Hearer, the All-Knowing.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 3\n        },\n        \"text\" : \"Then when she delivered her [child Maryam (Mary)], she said: \\\"O my Lord! I have delivered a female child,\\\" - and Allah knew better what she delivered, - \\\"And the male is not like the female, and I have named her Maryam (Mary), and I seek refuge with You (Allah) for her and for her offspring from Shaitan (Satan), the outcast.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 3\n        },\n        \"text\" : \"So her Lord (Allah) accepted her with goodly acceptance. He made her grow in a good manner and put her under the care of Zakariya (Zachariya). Every time he entered Al-Mihrab to (visit) her, he found her supplied with sustenance. He said: \\\"O Maryam (Mary)! From where have you got this?\\\" She said, \\\"This is from Allah.\\\" Verily, Allah provides sustenance to whom He wills, without limit.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 3\n        },\n        \"text\" : \"At that time Zakariya (Zachariya) invoked his Lord, saying: \\\"O my Lord! Grant me from You, a good offspring. You are indeed the All-Hearer of invocation.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 3\n        },\n        \"text\" : \"Then the angels called him, while he was standing in prayer in Al-Mihrab (a praying place or a private room), (saying): \\\"Allah gives you glad tidings of Yahya (John), confirming (believing in) the Word from Allah [i.e. the creation of 'Iesa (Jesus), the Word from Allah (\\\"Be!\\\" - and he was!)], noble, keeping away from sexual relations with women, a Prophet, from among the righteous.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 3\n        },\n        \"text\" : \"He said: \\\"O my Lord! How can I have a son when I am very old, and my wife is barren?\\\" Allah said: \\\"Thus Allah does what He wills.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 3\n        },\n        \"text\" : \"He said: \\\"O my Lord! Make a sign for me.\\\" Allah said: \\\"Your sign is that you shall not speak to mankind for three days except with signals. And remember your Lord much (by praising Him again and again), and glorify (Him) in the afternoon and in the morning.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 3\n        },\n        \"text\" : \"And (remember) when the angels said: \\\"O Maryam (Mary)! Verily, Allah has chosen you, purified you (from polytheism and disbelief), and chosen you above the women of the 'Alamin (mankind and jinns) (of her lifetime).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 3\n        },\n        \"text\" : \"O Mary! \\\"Submit yourself with obedience to your Lord (Allah, by worshipping none but Him Alone) and prostrate yourself, and Irka'i (bow down etc.) along with Ar-Raki'un (those who bow down etc.).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 3\n        },\n        \"text\" : \"(Remember) when the angels said: \\\"O Maryam (Mary)! Verily, Allah gives you the glad tidings of a Word [\\\"Be!\\\" - and he was! i.e. 'Iesa (Jesus) the son of Maryam (Mary)] from Him, his name will be the Messiah 'Iesa (Jesus), the son of Maryam (Mary), held in honour in this world and in the Hereafter, and will be one of those who are near to Allah.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 3\n        },\n        \"text\" : \"She said: \\\"O my Lord! How shall I have a son when no man has touched me.\\\" He said: \\\"So (it will be) for Allah creates what He wills. When He has decreed something, He says to it only: \\\"Be!\\\" and it is.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 3\n        },\n        \"text\" : \"And He (Allah) will teach him ['Iesa (Jesus)] the Book and Al-Hikmah (i.e. the Sunnah, the faultless speech of the Prophets, wisdom, etc.), (and) the Taurat (Torah) and the Injeel (Gospel).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 3\n        },\n        \"text\" : \"And will make him ['Iesa (Jesus)] a Messenger to the Children of Israel (saying): \\\"I have come to you with a sign from your Lord, that I design for you out of clay, as it were, the figure of a bird, and breathe into it, and it becomes a bird by Allah's Leave; and I heal him who was born blind, and the leper, and I bring the dead to life by Allah's Leave. And I inform you of what you eat, and what you store in your houses. Surely, therein is a sign for you, if you believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 3\n        },\n        \"text\" : \"And I have come confirming that which was before me of the Taurat (Torah), and to make lawful to you part of what was forbidden to you, and I have come to you with a proof from your Lord. So fear Allah and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 3\n        },\n        \"text\" : \"Truly! Allah is my Lord and your Lord, so worship Him (Alone). This is the Straight Path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 3\n        },\n        \"text\" : \"Then when 'Iesa (Jesus) came to know of their disbelief, he said: \\\"Who will be my helpers in Allah's Cause?\\\" Al-Hawariun (the disciples) said: \\\"We are the helpers of Allah; we believe in Allah, and bear witness that we are Muslims (i.e. we submit to Allah).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 3\n        },\n        \"text\" : \"Our Lord! We believe in what You have sent down, and we follow the Messenger ['Iesa (Jesus)]; so write us down among those who bear witness (to the truth i.e. La ilaha ill-Allah - none has the right to be worshipped but Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 3\n        },\n        \"text\" : \"And they (disbelievers) plotted [to kill 'Iesa (Jesus)], and Allah planned too. And Allah is the Best of the planners.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 3\n        },\n        \"text\" : \"And (remember) when Allah said: \\\"O 'Iesa (Jesus)! I will take you and raise you to Myself and clear you [of the forged statement that 'Iesa (Jesus) is Allah's son] of those who disbelieve, and I will make those who follow you (Monotheists, who worship none but Allah) superior to those who disbelieve [in the Oneness of Allah, or disbelieve in some of His Messengers, e.g. Muhammad SAW, 'Iesa (Jesus), Musa (Moses), etc., or in His Holy Books, e.g. the Taurat (Torah), the Injeel (Gospel), the Quran] till the Day of Resurrection. Then you will return to Me and I will judge between you in the matters in which you used to dispute.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 3\n        },\n        \"text\" : \"And as for those who believe (in the Oneness of Allah) and do righteous good deeds, Allah will pay them their reward in full. And Allah does not like the Zalimun (polytheists and wrong-doers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 3\n        },\n        \"text\" : \"Verily, the likeness of 'Iesa (Jesus) before Allah is the likeness of Adam. He created him from dust, then (He) said to him: \\\"Be!\\\" - and he was.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 3\n        },\n        \"text\" : \"Then whoever disputes with you concerning him ['Iesa (Jesus)] after (all this) knowledge that has come to you, [i.e. 'Iesa (Jesus)] being a slave of Allah, and having no share in Divinity) say: (O Muhammad SAW) \\\"Come, let us call our sons and your sons, our women and your women, ourselves and yourselves - then we pray and invoke (sincerely) the Curse of Allah upon those who lie.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 3\n        },\n        \"text\" : \"Verily! This is the true narrative [about the story of 'Iesa (Jesus)], and, La ilaha ill-Allah (none has the right to be worshipped but Allah, the One and the Only True God, Who has neither a wife nor a son). And indeed, Allah is the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 3\n        },\n        \"text\" : \"And if they turn away (and do not accept these true proofs and evidences), then surely, Allah is All-Aware of those who do mischief.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"O people of the Scripture (Jews and Christians): Come to a word that is just between us and you, that we worship none but Allah, and that we associate no partners with Him, and that none of us shall take others as lords besides Allah. Then, if they turn away, say: \\\"Bear witness that we are Muslims.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 3\n        },\n        \"text\" : \"Verily, you are those who have disputed about that of which you have knowledge. Why do you then dispute concerning that which you have no knowledge? It is Allah Who knows, and you know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 3\n        },\n        \"text\" : \"Ibrahim (Abraham) was neither a Jew nor a Christian, but he was a true Muslim Hanifa (Islamic Monotheism - to worship none but Allah Alone) and he was not of Al-Mushrikun (See V. 2:105).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 3\n        },\n        \"text\" : \"Verily, among mankind who have the best claim to Ibrahim (Abraham) are those who followed him, and this Prophet (Muhammad SAW) and those who have believed (Muslims). And Allah is the Wali (Protector and Helper) of the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 3\n        },\n        \"text\" : \"A party of the people of the Scripture (Jews and Christians) wish to lead you astray. But they shall not lead astray anyone except themselves, and they perceive not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 3\n        },\n        \"text\" : \"O people of the Scripture! (Jews and Christians): \\\"Why do you disbelieve in the Ayat of Allah, [the Verses about Prophet Muhammad SAW present in the Taurat (Torah) and the Injeel (Gospel)] while you (yourselves) bear witness (to their truth).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 3\n        },\n        \"text\" : \"And believe no one except the one who follows your religion. Say (O Muhammad SAW): \\\"Verily! Right guidance is the Guidance of Allah\\\" and do not believe that anyone can receive like that which you have received (of Revelation) except when he follows your religion, otherwise they would engage you in argument before your Lord. Say (O Muhammad SAW): \\\"All the bounty is in the Hand of Allah; He grants to whom He wills. And Allah is All-Sufficient for His creatures' needs, the All-Knower.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 3\n        },\n        \"text\" : \"He selects for His Mercy (Islam and the Quran with Prophethood) whom He wills and Allah is the Owner of Great Bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 3\n        },\n        \"text\" : \"Among the people of the Scripture (Jews and Christians) is he who, if entrusted with a Cantar (a great amount of wealth, etc.), will readily pay it back; and among them there is he who, if entrusted with a single silver coin, will not repay it unless you constantly stand demanding, because they say: \\\"There is no blame on us to betray and take the properties of the illiterates (Arabs).\\\" But they tell a lie against Allah while they know it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 3\n        },\n        \"text\" : \"Yes, whoever fulfils his pledge and fears Allah much; verily, then Allah loves those who are Al-Muttaqun (the pious - see V. 2:2).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 3\n        },\n        \"text\" : \"Verily, those who purchase a small gain at the cost of Allah's Covenant and their oaths, they shall have no portion in the Hereafter (Paradise). Neither will Allah speak to them, nor look at them on the Day of Resurrection, nor will He purify them, and they shall have a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 3\n        },\n        \"text\" : \"And verily, among them is a party who distort the Book with their tongues (as they read), so that you may think it is from the Book, but it is not from the Book, and they say: \\\"This is from Allah,\\\" but it is not from Allah; and they speak a lie against Allah while they know it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 3\n        },\n        \"text\" : \"It is not (possible) for any human being to whom Allah has given the Book and Al-Hukma (the knowledge and understanding of the laws of religion, etc.) and Prophethood to say to the people: \\\"Be my worshippers rather than Allah's.\\\" On the contrary (he would say): \\\"Be you Rabbaniyun (learned men of religion who practise what they know and also preach others), because you are teaching the Book, and you are studying it.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 3\n        },\n        \"text\" : \"Nor would he order you to take angels and Prophets for lords (gods). Would he order you to disbelieve after you have submitted to Allah's Will? (Tafsir At-Tabari).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 3\n        },\n        \"text\" : \"And (remember) when Allah took the Covenant of the Prophets, saying: \\\"Take whatever I gave you from the Book and Hikmah (understanding of the Laws of Allah, etc.), and afterwards there will come to you a Messenger (Muhammad SAW) confirming what is with you; you must, then, believe in him and help him.\\\" Allah said: \\\"Do you agree (to it) and will you take up My Covenant (which I conclude with you)?\\\" They said: \\\"We agree.\\\" He said: \\\"Then bear witness; and I am with you among the witnesses (for this).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 3\n        },\n        \"text\" : \"Then whoever turns away after this, they are the Fasiqun (rebellious: those who turn away from Allah's Obedience).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 3\n        },\n        \"text\" : \"Do they seek other than the religion of Allah (the true Islamic Monotheism worshipping none but Allah Alone), while to Him submitted all creatures in the heavens and the earth, willingly or unwillingly. And to Him shall they all be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"We believe in Allah and in what has been sent down to us, and what was sent down to Ibrahim (Abraham), Isma'il (Ishmael), Ishaque (Isaac), Ya'qub (Jacob) and Al-Asbat [the twelve sons of Ya'qub (Jacob)] and what was given to Musa (Moses), 'Iesa (Jesus) and the Prophets from their Lord. We make no distinction between one another among them and to Him (Allah) we have submitted (in Islam).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 3\n        },\n        \"text\" : \"How shall Allah guide a people who disbelieved after their belief and after they bore witness that the Messenger (Muhammad SAW) is true and after clear proofs had come unto them? And Allah guides not the people who are Zalimun (polytheists and wrong-doers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 3\n        },\n        \"text\" : \"They are those whose recompense is that on them (rests) the Curse of Allah, of the angels, and of all mankind.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 3\n        },\n        \"text\" : \"Except for those who repent after that and do righteous deeds. Verily, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 3\n        },\n        \"text\" : \"By no means shall you attain Al-Birr (piety, righteousness, etc., it means here Allah's Reward, i.e. Paradise), unless you spend (in Allah's Cause) of that which you love; and whatever of good you spend, Allah knows it well.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 3\n        },\n        \"text\" : \"All food was lawful to the Children of Israel, except what Israel made unlawful for himself before the Taurat (Torah) was revealed. Say (O Muhammad SAW): \\\"Bring here the Taurat (Torah) and recite it, if you are truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 3\n        },\n        \"text\" : \"Then after that, whosoever shall invent a lie against Allah,  such shall indeed be the Zalimun (disbelievers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Allah has spoken the truth; follow the religion of Ibrahim (Abraham) Hanifa (Islamic Monotheism, i.e. he used to worship Allah Alone), and he was not of Al-Mushrikun.\\\" (See V. 2:105)\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 3\n        },\n        \"text\" : \"In it are manifest signs (for example), the Maqam (place) of Ibrahim (Abraham); whosoever enters it, he attains security. And Hajj (pilgrimage to Makkah) to the House (Ka'bah) is a duty that mankind owes to Allah, those who can afford the expenses (for one's conveyance, provision and residence); and whoever disbelieves [i.e. denies Hajj (pilgrimage to Makkah), then he is a disbeliever of Allah], then Allah stands not in need of any of the 'Alamin (mankind and jinns).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say: \\\"O people of the Scripture (Jews and Christians)! Why do you reject the Ayat of Allah (proofs, evidences, verses, lessons, signs, revelations, etc.) while Allah is Witness to what you do?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say: \\\"O people of the Scripture (Jews and Christians)! Why do you stop those who have believed, from the Path of Allah, seeking to make it seem crooked, while you (yourselves) are witnesses [to Muhammad SAW as a Messenger of Allah and Islam (Allah's Religion, i.e. to worship none but Him Alone)]? And Allah is not unaware of what you do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 3\n        },\n        \"text\" : \"And how would you disbelieve, while unto you are recited the Verses of Allah, and among you is His Messenger (Muhammad SAW)? And whoever holds firmly to Allah, (i.e. follows Islam Allah's Religion, and obeys all that Allah has ordered, practically), then he is indeed guided to a Right Path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 3\n        },\n        \"text\" : \"O you who believe! Fear Allah (by doing all that He has ordered and by abstaining from all that He has forbidden) as He should be feared. [Obey Him, be thankful to Him, and remember Him always], and die not except in a state of Islam (as Muslims) with complete submission to Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 3\n        },\n        \"text\" : \"And hold fast, all of you together, to the Rope of Allah (i.e. this Quran), and be not divided among yourselves, and remember Allah's Favour on you, for you were enemies one to another but He joined your hearts together, so that, by His Grace, you became brethren (in Islamic Faith), and you were on the brink of a pit of Fire, and He saved you from it. Thus Allah makes His Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.,) clear to you, that you may be guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 3\n        },\n        \"text\" : \"Let there arise out of you a group of people inviting to all that is good (Islam), enjoining Al-Ma'ruf (i.e. Islamic Monotheism and all that Islam orders one to do) and forbidding Al-Munkar (polytheism and disbelief and all that Islam has forbidden). And it is they who are the successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 3\n        },\n        \"text\" : \"And for those whose faces will become white, they will be in Allah's Mercy (Paradise), therein they shall dwell forever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 3\n        },\n        \"text\" : \"These are the Verses of Allah: We recite them to you (O Muhammad SAW) in truth, and Allah wills no injustice to the 'Alamin (mankind and jinns).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 3\n        },\n        \"text\" : \"And to Allah belongs all that is in the heavens and all that is in the earth. And all matters go back (for decision) to Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 3\n        },\n        \"text\" : \"You [true believers in Islamic Monotheism, and real followers of Prophet Muhammad SAW and his Sunnah (legal ways, etc.)] are the best of peoples ever raised up for mankind; you enjoin Al-Ma'ruf (i.e. Islamic Monotheism and all that Islam has ordained) and forbid Al-Munkar (polytheism, disbelief and all that Islam has forbidden), and you believe in Allah. And had the people of the Scripture (Jews and Christians) believed, it would have been better for them; among them are some who have faith, but most of them are Al-Fasiqun (disobedient to Allah - and rebellious against Allah's Command).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 3\n        },\n        \"text\" : \"Indignity is put over them wherever they may be, except when under a covenant (of protection) from Allah, and from men; they have drawn on themselves the Wrath of Allah, and destruction is put over them. This is because they disbelieved in the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah and killed the Prophets without right. This is because they disobeyed (Allah) and used to transgress beyond bounds (in Allah's disobedience, crimes and sins).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 113,\n          \"sura\" : 3\n        },\n        \"text\" : \"Not all of them are alike; a party of the people of the Scripture stand for the right, they recite the Verses of Allah during the hours of the night, prostrating themselves in prayer.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 3\n        },\n        \"text\" : \"They believe in Allah and the Last Day; they enjoin Al-Ma'ruf (Islamic Monotheism, and following Prophet Muhammad SAW) and forbid Al-Munkar (polytheism, disbelief and opposing Prophet Muhammad SAW); and they hasten in (all) good works; and they are among the righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 115,\n          \"sura\" : 3\n        },\n        \"text\" : \"And whatever good they do, nothing will be rejected of them; for Allah knows well those who are Al-Muttaqun (the pious - see V. 2:2).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 3\n        },\n        \"text\" : \"Surely, those who reject Faith (disbelieve in Muhammad SAW as being Allah's Prophet and in all that which he has brought from Allah), neither their properties, nor their offspring will avail them aught against Allah. They are the dwellers of the Fire, therein they will abide. (Tafsir At-Tabari, Vol. 4, Page 58).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 117,\n          \"sura\" : 3\n        },\n        \"text\" : \"The likeness of what they spend in this world is the likeness of a wind which is extremely cold; it struck the harvest of a people who did wrong against themselves and destroyed it, (i.e. the good deed of a person is only accepted if he is a monotheist and believes in all the Prophets of Allah, including Christ and Muhammad SAW). Allah wronged them not, but they wronged themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 119,\n          \"sura\" : 3\n        },\n        \"text\" : \"Lo! You are the ones who love them but they love you not, and you believe in all the Scriptures [i.e. you believe in the Taurat (Torah) and the Injeel (Gospel), while they disbelieve in your Book, the Quran]. And when they meet you, they say, \\\"We believe\\\". But when they are alone, they bite the tips of their fingers at you in rage. Say: \\\"Perish in your rage. Certainly, Allah knows what is in the breasts (all the secrets).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 120,\n          \"sura\" : 3\n        },\n        \"text\" : \"If a good befalls you, it grieves them, but if some evil overtakes you, they rejoice at it. But if you remain patient and become Al-Muttaqun (the pious - see V. 2:2), not the least harm will their cunning do to you. Surely, Allah surrounds all that they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 121,\n          \"sura\" : 3\n        },\n        \"text\" : \"And (remember) when you (Muhammad SAW) left your household in the morning to post the believers at their stations for the battle (of Uhud). And Allah is All-Hearer, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 122,\n          \"sura\" : 3\n        },\n        \"text\" : \"When two parties from among you were about to lose heart, but Allah was their Wali (Supporter and Protector). And in Allah should the believers put their trust.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 123,\n          \"sura\" : 3\n        },\n        \"text\" : \"And Allah has already made you victorious at Badr, when you were a weak little force. So fear Allah much [abstain from all kinds of sins and evil deeds which He has forbidden and love Allah much, perform all kinds of good deeds which He has ordained] that you may be grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 124,\n          \"sura\" : 3\n        },\n        \"text\" : \"(Remember) when you (Muhammad SAW) said to the believers, \\\"Is it not enough for you that your Lord (Allah) should help you with three thousand angels; sent down?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 126,\n          \"sura\" : 3\n        },\n        \"text\" : \"Allah made it not but as a message of good news for you and as an assurance to your hearts. And there is no victory except from Allah, the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 128,\n          \"sura\" : 3\n        },\n        \"text\" : \"Not for you (O Muhammad SAW, but for Allah) is the decision; whether He turns in mercy to (pardons) them or punishes them; verily, they are the Zalimun (polytheists, disobedients, and wrong-doers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 129,\n          \"sura\" : 3\n        },\n        \"text\" : \"And to Allah belongs all that is in the heavens and all that is in the earth. He forgives whom He wills, and punishes whom He wills. And Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 130,\n          \"sura\" : 3\n        },\n        \"text\" : \"O you who believe! Eat not Riba (usury) doubled and multiplied, but fear Allah that you may be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 132,\n          \"sura\" : 3\n        },\n        \"text\" : \"And obey Allah and the Messenger (Muhammad SAW) that you may obtain mercy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 134,\n          \"sura\" : 3\n        },\n        \"text\" : \"Those who spend [in Allah's Cause - deeds of charity, alms, etc.] in prosperity and in adversity, who repress anger, and who pardon men; verily, Allah loves Al-Muhsinun (the good-doers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 135,\n          \"sura\" : 3\n        },\n        \"text\" : \"And those who, when they have committed Fahishah (illegal sexual intercourse etc.) or wronged themselves with evil, remember Allah and ask forgiveness for their sins; - and none can forgive sins but Allah - And do not persist in what (wrong) they have done, while they know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 136,\n          \"sura\" : 3\n        },\n        \"text\" : \"For such, the reward is Forgiveness from their Lord, and Gardens with rivers flowing underneath (Paradise), wherein they shall abide forever. How excellent is this reward for the doers (who do righteous deeds according to Allah's Orders).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 137,\n          \"sura\" : 3\n        },\n        \"text\" : \"Many similar ways (and mishaps of life) were faced by nations (believers and disbelievers) that have passed away before you (as you have faced in the battle of Uhud), so travel through the earth, and see what was the end of those who disbelieved (in the Oneness of Allah, and disobeyed Him and His Messengers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 140,\n          \"sura\" : 3\n        },\n        \"text\" : \"If a wound (and killing) has touched you, be sure a similar wound (and killing) has touched the others. And so are the days (good and not so good), We give to men by turns, that Allah may test those who believe, and that He may take martyrs from among you. And Allah likes not the Zalimun (polytheists and wrong-doers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 141,\n          \"sura\" : 3\n        },\n        \"text\" : \"And that Allah may test (or purify) the believers (from sins) and destroy the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 142,\n          \"sura\" : 3\n        },\n        \"text\" : \"Do you think that you will enter Paradise before Allah tests those of you who fought (in His Cause) and (also) tests those who are As-Sabirin (the patient ones, etc.)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 144,\n          \"sura\" : 3\n        },\n        \"text\" : \"Muhammad (SAW) is no more than a Messenger, and indeed (many) Messengers have passed away before him. If he dies or is killed, will you then turn back on your heels (as disbelievers)? And he who turns back on his heels, not the least harm will he do to Allah, and Allah will give reward to those who are grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 145,\n          \"sura\" : 3\n        },\n        \"text\" : \"And no person can ever die except by Allah's Leave and at an appointed term. And whoever desires a reward in (this) world, We shall give him of it; and whoever desires a reward in the Hereafter, We shall give him thereof. And We shall reward the grateful\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 146,\n          \"sura\" : 3\n        },\n        \"text\" : \"And many a Prophet (i.e. many from amongst the Prophets) fought (in Allah's Cause) and along with him (fought) large bands of religious learned men. But they never lost heart for that which did befall them in Allah's Way, nor did they weaken nor degrade themselves. And Allah loves As-Sabirin (the patient ones, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 148,\n          \"sura\" : 3\n        },\n        \"text\" : \"So Allah gave them the reward of this world, and the excellent reward of the Hereafter. And Allah loves Al-Muhsinun (the good-doers - see the footnote of V. 3:134).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 150,\n          \"sura\" : 3\n        },\n        \"text\" : \"Nay, Allah is your Maula (Patron, Lord, Helper and Protector, etc.), and He is the Best of helpers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 151,\n          \"sura\" : 3\n        },\n        \"text\" : \"We shall cast terror into the hearts of those who disbelieve, because they joined others in worship with Allah, for which He had sent no authority; their abode will be the Fire and how evil is the abode of the Zalimun (polytheists and wrong-doers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 152,\n          \"sura\" : 3\n        },\n        \"text\" : \"And Allah did indeed fulfil His Promise to you when you were killing them (your enemy) with His Permission; until (the moment) you lost your courage and fell to disputing about the order, and disobeyed after He showed you (of the booty) which you love. Among you are some that desire this world and some that desire the Hereafter. Then He made you flee from them (your enemy), that He might test you. But surely, He forgave you, and Allah is Most Gracious to the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 153,\n          \"sura\" : 3\n        },\n        \"text\" : \"(And remember) when you ran away (dreadfully) without even casting a side glance at anyone, and the Messenger (Muhammad SAW) was in your rear calling you back. There did Allah give you one distress after another by way of requital to teach you not to grieve for that which had escaped you, nor for that which had befallen you. And Allah is Well-Aware of all that you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 154,\n          \"sura\" : 3\n        },\n        \"text\" : \"Then after the distress, He sent down security for you. Slumber overtook a party of you, while another party was thinking about themselves (as how to save their ownselves, ignoring the others and the Prophet SAW) and thought wrongly of Allah - the thought of ignorance. They said, \\\"Have we any part in the affair?\\\" Say you (O Muhammad SAW): \\\"Indeed the affair belongs wholly to Allah.\\\" They hide within themselves what they dare not reveal to you, saying: \\\"If we had anything to do with the affair, none of us would have been killed here.\\\" Say: \\\"Even if you had remained in your homes, those for whom death was decreed would certainly have gone forth to the place of their death,\\\" but that Allah might test what is in your breasts; and to purify that which was in your hearts (sins), and Allah is All-Knower of what is in (your) breasts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 155,\n          \"sura\" : 3\n        },\n        \"text\" : \"Those of you who turned back on the day the two hosts met (i.e. the battle of Uhud), it was Shaitan (Satan) who caused them to backslide (run away from the battlefield) because of some (sins) they had earned. But Allah, indeed, has forgiven them. Surely, Allah is Oft-Forgiving, Most Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 156,\n          \"sura\" : 3\n        },\n        \"text\" : \"O you who believe! Be not like those who disbelieve (hypocrites) and who say to their brethren when they travel through the earth or go out to fight: \\\"If they had stayed with us, they would not have died or been killed,\\\" so that Allah may make it a cause of regret in their hearts. It is Allah that gives life and causes death. And Allah is All-Seer of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 157,\n          \"sura\" : 3\n        },\n        \"text\" : \"And if you are killed or die in the Way of Allah, forgiveness and mercy from Allah are far better than all that they amass (of worldly wealths, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 158,\n          \"sura\" : 3\n        },\n        \"text\" : \"And whether you die, or are killed, verily, unto Allah you shall be gathered.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 159,\n          \"sura\" : 3\n        },\n        \"text\" : \"And by the Mercy of Allah, you dealt with them gently. And had you been severe and harsh-hearted, they would have broken away from about you; so pass over (their faults), and ask (Allah's) Forgiveness for them; and consult them in the affairs. Then when you have taken a decision, put your trust in Allah, certainly, Allah loves those who put their trust (in Him).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 160,\n          \"sura\" : 3\n        },\n        \"text\" : \"If Allah helps you, none can overcome you; and if He forsakes you, who is there after Him that can help you? And in Allah (Alone) let believers put their trust.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 161,\n          \"sura\" : 3\n        },\n        \"text\" : \"It is not for any Prophet to take illegally a part of booty (Ghulul), and whosoever deceives his companions as regards the booty, he shall bring forth on the Day of Resurrection that which he took (illegally). Then every person shall be paid in full what he has earned, - and they shall not be dealt with unjustly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 162,\n          \"sura\" : 3\n        },\n        \"text\" : \"Is then one who follows (seeks) the good Pleasure of Allah (by not taking illegally a part of the booty) like the one who draws on himself the Wrath of Allah (by taking a part of the booty illegally - Ghulul)? - his abode is Hell, - and worst, indeed is that destination!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 163,\n          \"sura\" : 3\n        },\n        \"text\" : \"They are in varying grades with Allah, and Allah is All-Seer of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 164,\n          \"sura\" : 3\n        },\n        \"text\" : \"Indeed Allah conferred a great favour on the believers when He sent among them a Messenger (Muhammad SAW) from among themselves, reciting unto them His Verses (the Quran), and purifying them (from sins by their following him), and instructing them (in) the Book (the Quran) and Al-Hikmah [the wisdom and the Sunnah of the Prophet SAW (i.e. his legal ways, statements, acts of worship, etc.)], while before that they had been in manifest error.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 165,\n          \"sura\" : 3\n        },\n        \"text\" : \"(What is the matter with you?) When a single disaster smites you, although you smote (your enemies) with one twice as great, you say: \\\"From where does this come to us?\\\" Say (to them), \\\"It is from yourselves (because of your evil deeds).\\\" And Allah has power over all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 166,\n          \"sura\" : 3\n        },\n        \"text\" : \"And what you suffered (of the disaster) on the day (of the battle of Uhud when) the two armies met, was by the leave of Allah, in order that He might test the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 167,\n          \"sura\" : 3\n        },\n        \"text\" : \"And that He might test the hypocrites, it was said to them: \\\"Come, fight in the Way of Allah or (at least) defend yourselves.\\\" They said: \\\"Had we known that fighting will take place, we would certainly have followed you.\\\" They were that day, nearer to disbelief than to Faith, saying with their mouths what was not in their hearts. And Allah has full knowledge of what they conceal.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 169,\n          \"sura\" : 3\n        },\n        \"text\" : \"Think not of those who are killed in the Way of Allah as dead. Nay, they are alive, with their Lord, and they have provision.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 170,\n          \"sura\" : 3\n        },\n        \"text\" : \"They rejoice in what Allah has bestowed upon them of His Bounty, rejoicing for the sake of those who have not yet joined them, but are left behind (not yet martyred) that on them no fear shall come, nor shall they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 171,\n          \"sura\" : 3\n        },\n        \"text\" : \"They rejoice in a Grace and a Bounty from Allah, and that Allah will not waste the reward of the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 172,\n          \"sura\" : 3\n        },\n        \"text\" : \"Those who answered (the Call of) Allah and the Messenger (Muhammad SAW) after being wounded; for those of them who did good deeds and feared Allah, there is a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 173,\n          \"sura\" : 3\n        },\n        \"text\" : \"Those (i.e. believers) unto whom the people (hypocrites) said, \\\"Verily, the people (pagans) have gathered against you (a great army), therefore, fear them.\\\" But it (only) increased them in Faith, and they said: \\\"Allah (Alone) is Sufficient for us, and He is the Best Disposer of affairs (for us).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 174,\n          \"sura\" : 3\n        },\n        \"text\" : \"So they returned with Grace and Bounty from Allah. No harm touched them; and they followed the good Pleasure of Allah. And Allah is the Owner of Great Bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 175,\n          \"sura\" : 3\n        },\n        \"text\" : \"It is only Shaitan (Satan) that suggests to you the fear of his Auliya' [supporters and friends (polytheists, disbelievers in the Oneness of Allah and in His Messenger, Muhammad SAW)], so fear them not, but fear Me, if you are (true) believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 176,\n          \"sura\" : 3\n        },\n        \"text\" : \"And let not those grieve you (O Muhammad SAW) who rush with haste to disbelieve; verily, not the least harm will they do to Allah. It is Allah's Will to give them no portion in the Hereafter. For them there is a great torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 177,\n          \"sura\" : 3\n        },\n        \"text\" : \"Verily, those who purchase disbelief at the price of Faith, not the least harm will they do to Allah. For them, there is a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 179,\n          \"sura\" : 3\n        },\n        \"text\" : \"Allah will not leave the believers in the state in which you are now, until He distinguishes the wicked from the good. Nor will Allah disclose to you the secrets of the Ghaib (unseen), but Allah chooses of His Messengers whom He pleases. So believe in Allah and His Messengers. And if you believe and fear Allah, then for you there is a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 180,\n          \"sura\" : 3\n        },\n        \"text\" : \"And let not those who covetously withhold of that which Allah has bestowed on them of His Bounty (Wealth) think that it is good for them (and so they do not pay the obligatory Zakat). Nay, it will be worse for them; the things which they covetously withheld shall be tied to their necks like a collar on the Day of Resurrection. And to Allah belongs the heritage of the heavens and the earth; and Allah is Well-Acquainted with all that you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 181,\n          \"sura\" : 3\n        },\n        \"text\" : \"Indeed, Allah has heard the statement of those (Jews) who say: \\\"Truly, Allah is poor and we are rich!\\\" We shall record what they have said and their killing of the Prophets unjustly, and We shall say: \\\"Taste you the torment of the burning (Fire).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 182,\n          \"sura\" : 3\n        },\n        \"text\" : \"This is because of that (evil) which your hands have sent before you. And certainly, Allah is never unjust to (His) slaves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 183,\n          \"sura\" : 3\n        },\n        \"text\" : \"Those (Jews) who said: \\\"Verily, Allah has taken our promise not to believe in any Messenger unless he brings to us an offering which the fire (from heaven) shall devour.\\\" Say: \\\"Verily, there came to you Messengers before me, with clear signs and even with what you speak of; why then did you kill them, if you are truthful?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 185,\n          \"sura\" : 3\n        },\n        \"text\" : \"Everyone shall taste death. And only on the Day of Resurrection shall you be paid your wages in full. And whoever is removed away from the Fire and admitted to Paradise, he indeed is successful. The life of this world is only the enjoyment of deception (a deceiving thing).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 186,\n          \"sura\" : 3\n        },\n        \"text\" : \"You shall certainly be tried and tested in your wealth and properties and in your personal selves, and you shall certainly hear much that will grieve you from those who received the Scripture before you (Jews and Christians) and from those who ascribe partners to Allah, but if you persevere patiently, and become Al-Muttaqun (the pious - see V. 2:2) then verily, that will be a determining factor in all affairs, and that is from the great matters, [which you must hold on with all your efforts].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 187,\n          \"sura\" : 3\n        },\n        \"text\" : \"(And remember) when Allah took a covenant from those who were given the Scripture (Jews and Christians) to make it (the news of the coming of Prophet Muhammad SAW and the religious knowledge) known and clear to mankind, and not to hide it, but they threw it away behind their backs, and purchased with it some miserable gain! And indeed worst is that which they bought.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 189,\n          \"sura\" : 3\n        },\n        \"text\" : \"And to Allah belongs the dominion of the heavens and the earth, and Allah has power over all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 191,\n          \"sura\" : 3\n        },\n        \"text\" : \"Those who remember Allah (always, and in prayers) standing, sitting, and lying down on their sides, and think deeply about the creation of the heavens and the earth, (saying): \\\"Our Lord! You have not created (all) this without purpose, glory to You! (Exalted be You above all that they associate with You as partners). Give us salvation from the torment of the Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 193,\n          \"sura\" : 3\n        },\n        \"text\" : \"\\\"Our Lord! Verily, we have heard the call of one (Muhammad SAW) calling to Faith: 'Believe in your Lord,' and we have believed. Our Lord! Forgive us our sins and remit from us our evil deeds, and make us die in the state of righteousness along with Al-Abrar (those who are obedient to Allah and follow strictly His Orders).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 195,\n          \"sura\" : 3\n        },\n        \"text\" : \"So their Lord accepted of them (their supplication and answered them), \\\"Never will I allow to be lost the work of any of you, be he male or female. You are (members) one of another, so those who emigrated and were driven out from their homes, and suffered harm in My Cause, and who fought, and were killed (in My Cause), verily, I will remit from them their evil deeds and admit them into Gardens under which rivers flow (in Paradise); a reward from Allah, and with Allah is the best of rewards.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 198,\n          \"sura\" : 3\n        },\n        \"text\" : \"But, for those who fear their Lord, are Gardens under which rivers flow (in Paradise); therein are they to dwell (for ever), an entertainment from Allah; and that which is with Allah is the Best for Al-Abrar (those who are obedient to Allah and follow strictly His Orders).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 199,\n          \"sura\" : 3\n        },\n        \"text\" : \"And there are, certainly, among the people of the Scripture (Jews and Christians), those who believe in Allah and in that which has been revealed to you, and in that which has been revealed to them, humbling themselves before Allah. They do not sell the Verses of Allah for a little price, for them is a reward with their Lord. Surely, Allah is Swift in account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 200,\n          \"sura\" : 3\n        },\n        \"text\" : \"O you who believe! Endure and be more patient (than your enemy), and guard your territory by stationing army units permanently at the places from where the enemy can attack you, and fear Allah, so that you may be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 4\n        },\n        \"text\" : \"O mankind! Be dutiful to your Lord, Who created you from a single person (Adam), and from him (Adam) He created his wife [Hawwa (Eve)], and from them both He created many men and women and fear Allah through Whom you demand your mutual (rights), and (do not cut the relations of) the wombs (kinship). Surely, Allah is Ever an All-Watcher over you.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 4\n        },\n        \"text\" : \"And if you fear that you shall not be able to deal justly with the orphan-girls, then marry (other) women of your choice, two or three, or four but if you fear that you shall not be able to deal justly (with them), then only one or (the captives and the slaves) that your right hands possess. That is nearer to prevent you from doing injustice.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 4\n        },\n        \"text\" : \"And give to the women (whom you marry) their Mahr (obligatory bridal money given by the husband to his wife at the time of marriage) with a good heart, but if they, of their own good pleasure, remit any part of it to you, take it, and enjoy it without fear of any harm (as Allah has made it lawful).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 4\n        },\n        \"text\" : \"And give not unto the foolish your property which Allah has made a means of support for you, but feed and clothe them therewith, and speak to them words of kindness and justice.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 4\n        },\n        \"text\" : \"And try orphans (as regards their intelligence) until they reach the age of marriage; if then you find sound judgement in them, release their property to them, but consume it not wastefully, and hastily fearing that they should grow up, and whoever amongst guardians is rich, he should take no wages, but if he is poor, let him have for himself what is just and reasonable (according to his work). And when you release their property to them, take witness in their presence; and Allah is All-Sufficient in taking account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 4\n        },\n        \"text\" : \"There is a share for men and a share for women from what is left by parents and those nearest related, whether, the property be small or large - a legal share.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 4\n        },\n        \"text\" : \"And let those (executors and guardians) have the same fear in their minds as they would have for their own, if they had left weak offspring behind. So let them fear Allah and speak right words.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 4\n        },\n        \"text\" : \"Allah commands you as regards your children's (inheritance); to the male, a portion equal to that of two females; if (there are) only daughters, two or more, their share is two thirds of the inheritance; if only one, her share is half. For parents, a sixth share of inheritance to each if the deceased left children; if no children, and the parents are the (only) heirs, the mother has a third; if the deceased left brothers or (sisters), the mother has a sixth. (The distribution in all cases is) after the payment of legacies he may have bequeathed or debts. You know not which of them, whether your parents or your children, are nearest to you in benefit, (these fixed shares) are ordained by Allah. And Allah is Ever All-Knower, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 4\n        },\n        \"text\" : \"In that which your wives leave, your share is a half if they have no child; but if they leave a child, you get a fourth of that which they leave after payment of legacies that they may have bequeathed or debts. In that which you leave, their (your wives) share is a fourth if you leave no child; but if you leave a child, they get an eighth of that which you leave after payment of legacies that you may have bequeathed or debts. If the man or woman whose inheritance is in question has left neither ascendants nor descendants, but has left a brother or a sister, each one of the two gets a sixth; but if more than two, they share in a third; after payment of lagacies he (or she) may have bequeathed or debts, so that no loss is caused (to anyone). This is a Commandment from Allah; and Allah is Ever All-Knowing, Most-Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 4\n        },\n        \"text\" : \"These are the limits (set by) Allah (or ordainments as regards laws of inheritance), and whosoever obeys Allah and His Messenger (Muhammad SAW) will be admitted to Gardens under which rivers flow (in Paradise), to abide therein, and that will be the great success.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whosoever disobeys Allah and His Messenger (Muhammad SAW), and transgresses His limits, He will cast him into the Fire, to abide therein; and he shall have a disgraceful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 4\n        },\n        \"text\" : \"And those of your women who commit illegal sexual intercourse, take the evidence of four witnesses from amongst you against them; and if they testify, confine them (i.e. women) to houses until death comes to them or Allah ordains for them some (other) way.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 4\n        },\n        \"text\" : \"And the two persons (man and woman) among you who commit illegal sexual intercourse, punish them both. And if they repent (promise Allah that they will never repeat, i.e. commit illegal sexual intercourse and other similar sins) and do righteous good deeds, leave them alone. Surely, Allah is Ever the One Who accepts repentance, (and He is) Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 4\n        },\n        \"text\" : \"Allah accepts only the repentance of those who do evil in ignorance and foolishness and repent soon afterwards; it is they to whom Allah will forgive and Allah is Ever All-Knower, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who believe! You are forbidden to inherit women against their will, and you should not treat them with harshness, that you may take away part of the Mahr you have given them, unless they commit open illegal sexual intercourse. And live with them honourably. If you dislike them, it may be that you dislike a thing and Allah brings through it a great deal of good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 4\n        },\n        \"text\" : \"Forbidden to you (for marriage) are: your mothers, your daughters, your sisters, your father's sisters, your mother's sisters, your brother's daughters, your sister's daughters, your foster mother who gave you suck, your foster milk suckling sisters, your wives' mothers, your step daughters under your guardianship, born of your wives to whom you have gone in - but there is no sin on you if you have not gone in them (to marry their daughters), - the wives of your sons who (spring) from your own loins, and two sisters in wedlock at the same time, except for what has already passed; verily, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 4\n        },\n        \"text\" : \"Also (forbidden are) women already married, except those (captives and slaves) whom your right hands possess. Thus has Allah ordained for you. All others are lawful, provided you seek (them in marriage) with Mahr (bridal money given by the husband to his wife at the time of marriage) from your property, desiring chastity, not committing illegal sexual intercourse, so with those of whom you have enjoyed sexual relations, give them their Mahr as prescribed; but if after a Mahr is prescribed, you agree mutually (to give more), there is no sin on you. Surely, Allah is Ever All-Knowing, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whoever of you have not the means wherewith to wed free, believing women, they may wed believing girls from among those (captives and slaves) whom your right hands possess, and Allah has full knowledge about your Faith, you are one from another. Wed them with the permission of their own folk (guardians, Auliya' or masters) and give them their Mahr according to what is reasonable; they (the above said captive and slave-girls) should be chaste, not adulterous, nor taking boy-friends. And after they have been taken in wedlock, if they commit illegal sexual intercourse, their punishment is half that for free (unmarried) women. This is for him among you who is afraid of being harmed in his religion or in his body; but it is better for you that you practise self-restraint, and Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 4\n        },\n        \"text\" : \"Allah wishes to make clear (what is lawful and what is unlawful) to you, and to show you the ways of those before you, and accept your repentance, and Allah is All-Knower, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 4\n        },\n        \"text\" : \"Allah wishes to accept your repentance, but those who follow their lusts, wish that you (believers) should deviate tremendously away from the Right Path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 4\n        },\n        \"text\" : \"Allah wishes to lighten (the burden) for you; and man was created weak (cannot be patient to leave sexual intercourse with woman).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who believe! Eat not up your property among yourselves unjustly except it be a trade amongst you, by mutual consent. And do not kill yourselves (nor kill one another). Surely, Allah is Most Merciful to you.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whoever commits that through aggression and injustice, We shall cast him into the Fire, and that is easy for Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 4\n        },\n        \"text\" : \"If you avoid the great sins which you are forbidden to do, We shall remit from you your (small) sins, and admit you to a Noble Entrance (i.e. Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 4\n        },\n        \"text\" : \"And wish not for the things in which Allah has made some of you to excel others. For men there is reward for what they have earned, (and likewise) for women there is reward for what they have earned, and ask Allah of His Bounty. Surely, Allah is Ever All-Knower of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 4\n        },\n        \"text\" : \"And to everyone, We have appointed heirs of that (property) left by parents and relatives. To those also with whom you have made a pledge (brotherhood), give them their due portion (by Wasiya - wills, etc.). Truly, Allah is Ever a Witness over all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 4\n        },\n        \"text\" : \"Men are the protectors and maintainers of women, because Allah has made one of them to excel the other, and because they spend (to support them) from their means. Therefore the righteous women are devoutly obedient (to Allah and to their husbands), and guard in the husband's absence what Allah orders them to guard (e.g. their chastity, their husband's property, etc.). As to those women on whose part you see ill-conduct, admonish them (first), (next), refuse to share their beds, (and last) beat them (lightly, if it is useful), but if they return to obedience, seek not against them means (of annoyance). Surely, Allah is Ever Most High, Most Great.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 4\n        },\n        \"text\" : \"If you fear a breach between them twain (the man and his wife), appoint (two) arbitrators, one from his family and the other from her's; if they both wish for peace, Allah will cause their reconciliation. Indeed Allah is Ever All-Knower, Well-Acquainted with all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 4\n        },\n        \"text\" : \"Worship Allah and join none with Him in worship, and do good to parents, kinsfolk, orphans, Al-Masakin (the poor), the neighbour who is near of kin, the neighbour who is a stranger, the companion by your side, the wayfarer (you meet), and those (slaves) whom your right hands possess. Verily, Allah does not like such as are proud and boastful;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 4\n        },\n        \"text\" : \"Those who are miserly and enjoin miserliness on other men and hide what Allah has bestowed upon them of His Bounties. And We have prepared for the disbelievers a disgraceful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 4\n        },\n        \"text\" : \"And (also) those who spend of their substance to be seen of men, and believe not in Allah and the Last Day [they are the friends of Shaitan (Satan)], and whoever takes Shaitan (Satan) as an intimate; then what a dreadful intimate he has!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 4\n        },\n        \"text\" : \"And what loss have they if they had believed in Allah and in the Last Day, and they spend out of what Allah has given them for sustenance? And Allah is Ever All-Knower of them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 4\n        },\n        \"text\" : \"Surely! Allah wrongs not even of the weight of an atom (or a small ant), but if there is any good (done), He doubles it, and gives from Him a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 4\n        },\n        \"text\" : \"On that day those who disbelieved and disobeyed the Messenger (Muhammad SAW) will wish that they were buried in the earth, but they will never be able to hide a single fact from Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who believe! Approach not As-Salat (the prayer) when you are in a drunken state until you know (the meaning) of what you utter, nor when you are in a state of Janaba, (i.e. in a state of sexual impurity and have not yet taken a bath) except when travelling on the road (without enough water, or just passing through a mosque), till you wash your whole body. And if you are ill, or on a journey, or one of you comes after answering the call of nature, or you have been in contact with women (by sexual relations) and you find no water, perform Tayammum with clean earth and rub therewith your faces and hands (Tayammum). Truly, Allah is Ever Oft-Pardoning, Oft-Forgiving.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 4\n        },\n        \"text\" : \"Allah has full knowledge of your enemies, and Allah is Sufficient as a Wali (Protector), and Allah is Sufficient as a Helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 4\n        },\n        \"text\" : \"Among those who are Jews, there are some who displace words from (their) right places and say: \\\"We hear your word (O Muhammad SAW) and disobey,\\\" and \\\"Hear and let you (O Muhammad SAW) hear nothing.\\\" And Ra'ina with a twist of their tongues and as a mockery of the religion (Islam). And if only they had said: \\\"We hear and obey\\\", and \\\"Do make us understand,\\\" it would have been better for them, and more proper, but Allah has cursed them for their disbelief, so they believe not except a few.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who have been given the Scripture (Jews and Christians)! Believe in what We have revealed (to Muhammad SAW) confirming what is (already) with you, before We efface faces (by making them like the back of necks; without nose, mouth, eyes, etc.) and turn them hindwards, or curse them as We cursed the Sabbath-breakers. And the Commandment of Allah is always executed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 4\n        },\n        \"text\" : \"Verily, Allah forgives not that partners should be set up with him in worship, but He forgives except that (anything else) to whom He pleases, and whoever sets up partners with Allah in worship, he has indeed invented a tremendous sin.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 4\n        },\n        \"text\" : \"Have you not seen those who claim sanctity for themselves. Nay - but Allah sanctifies whom He pleases, and they will not be dealt with injustice even equal to the extent of a Fatila (A scalish thread in the long slit of a date-stone).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 4\n        },\n        \"text\" : \"Look, how they invent a lie against Allah, and enough is that as a manifest sin.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 4\n        },\n        \"text\" : \"They are those whom Allah has cursed, and he whom Allah curses, you will not find for him (any) helper,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 4\n        },\n        \"text\" : \"Or do they envy men (Muhammad SAW and his followers) for what Allah has given them of His Bounty? Then We had already given the family of Ibrahim (Abraham) the Book and Al-Hikmah (As-Sunnah - Divine Inspiration to those Prophets not written in the form of a book), and conferred upon them a great kingdom.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 4\n        },\n        \"text\" : \"Surely! Those who disbelieved in Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) We shall burn them in Fire. As often as their skins are roasted through, We shall change them for other skins that they may taste the punishment. Truly, Allah is Ever Most Powerful, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 4\n        },\n        \"text\" : \"But those who believe (in the Oneness of Allah - Islamic Monotheism) and do deeds of righteousness, We shall admit them to Gardens under which rivers flow (Paradise), abiding therein forever. Therein they shall have Azwajun Mutahharatun [purified mates or wives (having no menses, stools, urine, etc.)] and We shall admit them to shades wide and ever deepening (Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 4\n        },\n        \"text\" : \"Verily! Allah commands that you should render back the trusts to those, to whom they are due; and that when you judge between men, you judge with justice. Verily, how excellent is the teaching which He (Allah) gives you! Truly, Allah is Ever All-Hearer, All-Seer.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who believe! Obey Allah and obey the Messenger (Muhammad SAW), and those of you (Muslims) who are in authority. (And) if you differ in anything amongst yourselves, refer it to Allah and His Messenger (SAW), if you believe in Allah and in the Last Day. That is better and more suitable for final determination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 4\n        },\n        \"text\" : \"And when it is said to them: \\\"Come to what Allah has sent down and to the Messenger (Muhammad SAW),\\\" you (Muhammad SAW) see the hypocrites turn away from you (Muhammad SAW) with aversion.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 4\n        },\n        \"text\" : \"How then, when a catastrophe befalls them because of what their hands have sent forth, they come to you swearing by Allah, \\\"We meant no more than goodwill and conciliation!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 4\n        },\n        \"text\" : \"They (hypocrites) are those of whom Allah knows what is in their hearts; so turn aside from them (do not punish them) but admonish them, and speak to them an effective word (i.e. to believe in Allah, worship Him, obey Him, and be afraid of Him) to reach their innerselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 4\n        },\n        \"text\" : \"We sent no Messenger, but to be obeyed by Allah's Leave. If they (hypocrites), when they had been unjust to themselves, had come to you (Muhammad SAW) and begged Allah's Forgiveness, and the Messenger had begged forgiveness for them: indeed, they would have found Allah All-Forgiving (One Who accepts repentance), Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 4\n        },\n        \"text\" : \"But no, by your Lord, they can have no Faith, until they make you (O Muhammad SAW) judge in all disputes between them, and find in themselves no resistance against your decisions, and accept (them) with full submission.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whoso obeys Allah and the Messenger (Muhammad SAW), then they will be in the company of those on whom Allah has bestowed His Grace, of the Prophets, the Siddiqun (those followers of the Prophets who were first and foremost to believe in them, like Abu Bakr As-Siddiq), the martyrs, and the righteous. And how excellent these companions are!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 4\n        },\n        \"text\" : \"Such is the Bounty from Allah, and Allah is Sufficient as All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who believe! Take your precautions, and either go forth (on an expedition) in parties, or go forth all together.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 4\n        },\n        \"text\" : \"There is certainly among you he who would linger behind (from fighting in Allah's Cause). If a misfortune befalls you, he says, \\\"Indeed Allah has favoured me in that I was not present among them.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 4\n        },\n        \"text\" : \"But if a bounty (victory and booty) comes to you from Allah, he would surely say - as if there had never been ties of affection between you and him - \\\"Oh! I wish I had been with them; then I would have achieved a great success (a good share of booty).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 4\n        },\n        \"text\" : \"Let those (believers) who sell the life of this world for the Hereafter fight in the Cause of Allah, and whoso fights in the Cause of Allah, and is killed or gets victory, We shall bestow on him a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 4\n        },\n        \"text\" : \"And what is wrong with you that you fight not in the Cause of Allah, and for those weak, ill-treated and oppressed among men, women, and children, whose cry is: \\\"Our Lord! Rescue us from this town whose people are oppressors; and raise for us from You one who will protect, and raise for us from You one who will help.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 4\n        },\n        \"text\" : \"Those who believe, fight in the Cause of Allah, and those who disbelieve, fight in the cause of Taghut (Satan, etc.). So fight you against the friends of Shaitan (Satan); Ever feeble indeed is the plot of Shaitan (Satan).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 4\n        },\n        \"text\" : \"Have you not seen those who were told to hold back their hands (from fighting) and perform As-Salat (Iqamat-as-Salat), and give Zakat, but when the fighting was ordained for them, behold! a section of them fear men as they fear Allah or even more. They say: \\\"Our Lord! Why have you ordained for us fighting? Would that you had granted us respite for a short period?\\\" Say: \\\"Short is the enjoyment of this world. The Hereafter is (far) better for him who fears Allah, and you shall not be dealt with unjustly even equal to the Fatila (a scalish thread in the long slit of a date-stone).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 4\n        },\n        \"text\" : \"\\\"Wheresoever you may be, death will overtake you even if you are in fortresses built up strong and high!\\\" And if some good reaches them, they say, \\\"This is from Allah,\\\" but if some evil befalls them, they say, \\\"This is from you (O Muhammad SAW).\\\" Say: \\\"All things are from Allah,\\\" so what is wrong with these people that they fail to understand any word?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 4\n        },\n        \"text\" : \"Whatever of good reaches you, is from Allah, but whatever of evil befalls you, is from yourself. And We have sent you (O Muhammad SAW) as a Messenger to mankind, and Allah is Sufficient as a Witness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 4\n        },\n        \"text\" : \"He who obeys the Messenger (Muhammad SAW), has indeed obeyed Allah, but he who turns away, then we have not sent you (O Muhammad SAW) as a watcher over them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 4\n        },\n        \"text\" : \"They say: \\\"We are obedient,\\\" but when they leave you (Muhammad SAW), a section of them spend all night in planning other than what you say. But Allah records their nightly (plots). So turn aside from them (do not punish them), and put your trust in Allah. And Allah is Ever All-Sufficient as a Disposer of affairs.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 4\n        },\n        \"text\" : \"Do they not then consider the Quran carefully? Had it been from other than Allah, they would surely have found therein much contradictions.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 4\n        },\n        \"text\" : \"When there comes to them some matter touching (public) safety or fear, they make it known (among the people), if only they had referred it to the Messenger or to those charged with authority among them, the proper investigators would have understood it from them (directly). Had it not been for the Grace and Mercy of Allah upon you, you would have followed Shaitan (Satan), save a few of you.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 4\n        },\n        \"text\" : \"Then fight (O Muhammad SAW) in the Cause of Allah, you are not tasked (held responsible) except for yourself, and incite the believers (to fight along with you), it may be that Allah will restrain the evil might of the disbelievers. And Allah is Stronger in Might and Stronger in punishing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 4\n        },\n        \"text\" : \"Whosoever intercedes for a good cause will have the reward thereof, and whosoever intercedes for an evil cause will have a share in its burden. And Allah is Ever All-Able to do (and also an All-Witness to) everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 4\n        },\n        \"text\" : \"When you are greeted with a greeting, greet in return with what is better than it, or (at least) return it equally. Certainly, Allah is Ever a Careful Account Taker of all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 4\n        },\n        \"text\" : \"Allah! La ilaha illa Huwa (none has the right to be worshipped but He). Surely, He will gather you together on the Day of Resurrection about which there is no doubt. And who is truer in statement than Allah?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 4\n        },\n        \"text\" : \"Then what is the matter with you that you are divided into two parties about the hypocrites? Allah has cast them back (to disbelief) because of what they have earned. Do you want to guide him whom Allah has made to go astray? And he whom Allah has made to go astray, you will never find for him any way (of guidance).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 4\n        },\n        \"text\" : \"They wish that you reject Faith, as they have rejected (Faith), and thus that you all become equal (like one another). So take not Auliya' (protectors or friends) from them, till they emigrate in the Way of Allah (to Muhammad SAW). But if they turn back (from Islam), take (hold) of them and kill them wherever you find them, and take neither Auliya' (protectors or friends) nor helpers from them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 4\n        },\n        \"text\" : \"Except those who join a group, between you and whom there is a treaty (of peace), or those who approach you with their breasts restraining from fighting you as well as fighting their own people. Had Allah willed, indeed He would have given them power over you, and they would have fought you. So if they withdraw from you, and fight not against you, and offer you peace, then Allah has opened no way for you against them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 4\n        },\n        \"text\" : \"It is not for a believer to kill a believer except (that it be) by mistake, and whosoever kills a believer by mistake, (it is ordained that) he must set free a believing slave and a compensation (blood money, i.e. Diya) be given to the deceased's family, unless they remit it. If the deceased belonged to a people at war with you and he was a believer; the freeing of a believing slave (is prescribed), and if he belonged to a people with whom you have a treaty of mutual alliance, compensation (blood money - Diya) must be paid to his family, and a believing slave must be freed. And whoso finds this (the penance of freeing a slave) beyond his means, he must fast for two consecutive months in order to seek repentance from Allah. And Allah is Ever All-Knowing, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whoever kills a believer intentionally, his recompense is Hell to abide therein, and the Wrath and the Curse of Allah are upon him, and a great punishment is prepared for him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who believe! When you go (to fight) in the Cause of Allah, verify (the truth), and say not to anyone who greets you (by embracing Islam): \\\"You are not a believer\\\"; seeking the perishable goods of the worldly life. There are much more profits and booties with Allah. Even as he is now, so were you yourselves before till Allah conferred on you His Favours (i.e. guided you to Islam), therefore, be cautious in discrimination. Allah is Ever Well-Aware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 4\n        },\n        \"text\" : \"Not equal are those of the believers who sit (at home), except those who are disabled (by injury or are blind or lame, etc.), and those who strive hard and fight in the Cause of Allah with their wealth and their lives. Allah has preferred in grades those who strive hard and fight with their wealth and their lives above those who sit (at home). Unto each, Allah has promised good (Paradise), but Allah has preferred those who strive hard and fight, above those who sit (at home) by a huge reward;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 4\n        },\n        \"text\" : \"Degrees of (higher) grades from Him, and Forgiveness and Mercy. And Allah is Ever Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 4\n        },\n        \"text\" : \"Verily! As for those whom the angels take (in death) while they are wronging themselves (as they stayed among the disbelievers even though emigration was obligatory for them), they (angels) say (to them): \\\"In what (condition) were you?\\\" They reply: \\\"We were weak and oppressed on earth.\\\" They (angels) say: \\\"Was not the earth of Allah spacious enough for you to emigrate therein?\\\" Such men will find their abode in Hell - What an evil destination!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 4\n        },\n        \"text\" : \"For these there is hope that Allah will forgive them, and Allah is Ever Oft Pardoning, Oft-Forgiving.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 100,\n          \"sura\" : 4\n        },\n        \"text\" : \"He who emigrates (from his home) in the Cause of Allah, will find on earth many dwelling places and plenty to live by. And whosoever leaves his home as an emigrant unto Allah and His Messenger, and death overtakes him, his reward is then surely incumbent upon Allah. And Allah is Ever Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 4\n        },\n        \"text\" : \"When you (O Messenger Muhammad SAW) are among them, and lead them in As-Salat (the prayer), let one party of them stand up [in Salat (prayer)] with you taking their arms with them; when they finish their prostrations, let them take their positions in the rear and let the other party come up which has not yet prayed, and let them pray with you taking all the precautions and bearing arms. Those who disbelieve wish, if you were negligent of your arms and your baggage, to attack you in a single rush, but there is no sin on you if you put away your arms because of the inconvenience of rain or because you are ill, but take every precaution for yourselves. Verily, Allah has prepared a humiliating torment for the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 4\n        },\n        \"text\" : \"When you have finished As-Salat (the prayer - congregational), remember Allah standing, sitting down, and lying down on your sides, but when you are free from danger, perform As-Salat (Iqamat-as- Salat). Verily, the prayer is enjoined on the believers at fixed hours.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 4\n        },\n        \"text\" : \"And don't be weak in the pursuit of the enemy; if you are suffering (hardships) then surely, they (too) are suffering (hardships) as you are suffering, but you have a hope from Allah (for the reward, i.e. Paradise) that for which they hope not, and Allah is Ever All-Knowing, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 4\n        },\n        \"text\" : \"Surely, We have sent down to you (O Muhammad SAW) the Book (this Quran) in truth that you might judge between men by that which Allah has shown you (i.e. has taught you through Divine Inspiration), so be not a pleader for the treacherous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 4\n        },\n        \"text\" : \"And seek the Forgiveness of Allah, certainly, Allah is Ever Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 4\n        },\n        \"text\" : \"And argue not on behalf of those who deceive themselves. Verily, Allah does not like anyone who is a betrayer of his trust, and indulges in crime.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 4\n        },\n        \"text\" : \"They may hide (their crimes) from men, but they cannot hide (them) from Allah, for He is with them (by His Knowledge), when they plot by night in words that He does not approve, And Allah ever encompasses what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 4\n        },\n        \"text\" : \"Lo! You are those who have argued for them in the life of this world, but who will argue for them on the Day of Resurrection against Allah, or who will then be their defender?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whoever does evil or wrongs himself but afterwards seeks Allah's Forgiveness, he will find Allah Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whoever earns sin, he earns it only against himself. And Allah is Ever All-Knowing, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 113,\n          \"sura\" : 4\n        },\n        \"text\" : \"Had not the Grace of Allah and His Mercy been upon you (O Muhammad SAW), a party of them would certainly have made a decision to mislead you, but (in fact) they mislead none except their own selves, and no harm can they do to you in the least. Allah has sent down to you the Book (The Quran), and Al-Hikmah (Islamic laws, knowledge of legal and illegal things i.e. the Prophet's Sunnah - legal ways), and taught you that which you knew not. And Ever Great is the Grace of Allah unto you (O Muhammad SAW).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 4\n        },\n        \"text\" : \"There is no good in most of their secret talks save (in) him who orders Sadaqah (charity in Allah's Cause), or Ma'ruf (Islamic Monotheism and all the good and righteous deeds which Allah has ordained), or conciliation between mankind, and he who does this, seeking the good Pleasure of Allah, We shall give him a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 115,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whoever contradicts and opposes the Messenger (Muhammad SAW) after the right path has been shown clearly to him, and follows other than the believers' way. We shall keep him in the path he has chosen, and burn him in Hell - what an evil destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 4\n        },\n        \"text\" : \"Verily! Allah forgives not (the sin of) setting up partners in worship with Him, but He forgives whom he pleases sins other than that, and whoever sets up partners in worship with Allah, has indeed strayed far away.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 117,\n          \"sura\" : 4\n        },\n        \"text\" : \"They (all those who worship others than Allah) invoke nothing but female deities besides Him (Allah), and they invoke nothing but Shaitan (Satan), a persistent rebel!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 118,\n          \"sura\" : 4\n        },\n        \"text\" : \"Allah cursed him. And he [Shaitan (Satan)] said: \\\"I will take an appointed portion of your slaves;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 119,\n          \"sura\" : 4\n        },\n        \"text\" : \"Verily, I will mislead them, and surely, I will arouse in them false desires; and certainly, I will order them to slit the ears of cattle, and indeed I will order them to change the nature created by Allah.\\\" And whoever takes Shaitan (Satan) as a Wali (protector or helper) instead of Allah, has surely suffered a manifest loss.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 122,\n          \"sura\" : 4\n        },\n        \"text\" : \"But those who believe (in the Oneness of Allah - Islamic Monotheism) and do deeds of righteousness, We shall admit them to the Gardens under which rivers flow (i.e. in Paradise) to dwell therein forever. Allah's Promise is the Truth, and whose words can be truer than those of Allah? (Of course, none).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 123,\n          \"sura\" : 4\n        },\n        \"text\" : \"It will not be in accordance with your desires (Muslims), nor those of the people of the Scripture (Jews and Christians), whosoever works evil, will have the recompense thereof, and he will not find any protector or helper besides Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 124,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whoever does righteous good deeds, male or female, and is a true believer in the Oneness of Allah (Muslim), such will enter Paradise and not the least injustice, even to the size of a Naqira (speck on the back of a date-stone), will be done to them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 125,\n          \"sura\" : 4\n        },\n        \"text\" : \"And who can be better in religion than one who submits his face (himself) to Allah (i.e. follows Allah's Religion of Islamic Monotheism); and he is a Muhsin (a good-doer - see V. 2:112). And follows the religion of Ibrahim (Abraham) Hanifa (Islamic Monotheism - to worship none but Allah Alone). And Allah did take Ibrahim (Abraham) as a Khalil (an intimate friend).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 126,\n          \"sura\" : 4\n        },\n        \"text\" : \"And to Allah belongs all that is in the heavens and all that is in the earth. And Allah is Ever Encompassing all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 127,\n          \"sura\" : 4\n        },\n        \"text\" : \"They ask your legal instruction concerning women, say: Allah instructs you about them, and about what is recited unto you in the Book concerning the orphan girls whom you give not the prescribed portions (as regards Mahr and inheritance) and yet whom you desire to marry, and (concerning) the children who are weak and oppressed, and that you stand firm for justice to orphans. And whatever good you do, Allah is Ever All-Aware of it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 128,\n          \"sura\" : 4\n        },\n        \"text\" : \"And if a woman fears cruelty or desertion on her husband's part, there is no sin on them both if they make terms of peace between themselves; and making peace is better. And human inner-selves are swayed by greed. But if you do good and keep away from evil, verily, Allah is Ever Well-Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 129,\n          \"sura\" : 4\n        },\n        \"text\" : \"You will never be able to do perfect justice between wives even if it is your ardent desire, so do not incline too much to one of them (by giving her more of your time and provision) so as to leave the other hanging (i.e. neither divorced nor married). And if you do justice, and do all that is right and fear Allah by keeping away from all that is wrong, then Allah is Ever Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 130,\n          \"sura\" : 4\n        },\n        \"text\" : \"But if they separate (by divorce), Allah will provide abundance for everyone of them from His Bounty. And Allah is Ever All-Sufficient for His creatures' need, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 131,\n          \"sura\" : 4\n        },\n        \"text\" : \"And to Allah belongs all that is in the heavens and all that is in the earth. And verily, We have recommended to the people of the Scripture before you, and to you (O Muslims) that you (all) fear Allah, and keep your duty to Him, But if you disbelieve, then unto Allah belongs all that is in the heavens and all that is in the earth, and Allah is Ever Rich (Free of all wants), Worthy of all praise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 132,\n          \"sura\" : 4\n        },\n        \"text\" : \"And to Allah belongs all that is in the heavens and all that is in the earth. And Allah is Ever All-Sufficient as a Disposer of affairs.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 133,\n          \"sura\" : 4\n        },\n        \"text\" : \"If He wills, He can take you away, O people, and bring others. And Allah is Ever All-Potent over that.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 134,\n          \"sura\" : 4\n        },\n        \"text\" : \"Whoever desires a reward in this life of the world, then with Allah (Alone and none else) is the reward of this worldly life and of the Hereafter. And Allah is Ever All-Hearer, All-Seer.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 135,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who believe! Stand out firmly for justice, as witnesses to Allah, even though it be against yourselves, or your parents, or your kin, be he rich or poor, Allah is a Better Protector to both (than you). So follow not the lusts (of your hearts), lest you may avoid justice, and if you distort your witness or refuse to give it, verily, Allah is Ever Well-Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 136,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who believe! Believe in Allah, and His Messenger (Muhammad SAW), and the Book (the Quran) which He has sent down to His Messenger, and the Scripture which He sent down to those before (him), and whosoever disbelieves in Allah, His Angels, His Books, His Messengers, and the Last Day, then indeed he has strayed far away.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 137,\n          \"sura\" : 4\n        },\n        \"text\" : \"Verily, those who believe, then disbelieve, then believe (again), and (again) disbelieve, and go on increasing in disbelief; Allah will not forgive them, nor guide them on the (Right) Way.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 139,\n          \"sura\" : 4\n        },\n        \"text\" : \"Those who take disbelievers for Auliya' (protectors or helpers or friends) instead of believers, do they seek honour, power and glory with them? Verily, then to Allah belongs all honour, power and glory.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 140,\n          \"sura\" : 4\n        },\n        \"text\" : \"And it has already been revealed to you in the Book (this Quran) that when you hear the Verses of Allah being denied and mocked at, then sit not with them, until they engage in a talk other than that; (but if you stayed with them) certainly in that case you would be like them. Surely, Allah will collect the hypocrites and disbelievers all together in Hell,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 141,\n          \"sura\" : 4\n        },\n        \"text\" : \"Those (hyprocrites) who wait and watch about you; if you gain a victory from Allah, they say: \\\"Were we not with you,\\\" but if the disbelievers gain a success, they say (to them): \\\"Did we not gain mastery over you and did we not protect you from the believers?\\\" Allah will judge between you (all) on the Day of Resurrection. And never will Allah grant to the disbelievers a way (to triumph) over the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 142,\n          \"sura\" : 4\n        },\n        \"text\" : \"Verily, the hypocrites seek to deceive Allah, but it is He Who deceives them. And when they stand up for As-Salat (the prayer), they stand with laziness and to be seen of men, and they do not remember Allah but little.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 143,\n          \"sura\" : 4\n        },\n        \"text\" : \"(They are) swaying between this and that, belonging neither to these nor to those, and he whom Allah sends astray, you will not find for him a way (to the truth - Islam).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 144,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who believe! Take not for Auliya' (protectors or helpers or friends) disbelievers instead of believers. Do you wish to offer Allah a manifest proof against yourselves?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 146,\n          \"sura\" : 4\n        },\n        \"text\" : \"Except those who repent (from hypocrisy), do righteous good deeds, hold fast to Allah, and purify their religion for Allah (by worshipping none but Allah, and do good for Allah's sake only, not to show-off), then they will be with the believers. And Allah will grant to the believers a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 147,\n          \"sura\" : 4\n        },\n        \"text\" : \"Why should Allah punish you if you have thanked (Him) and have believed in Him. And Allah is Ever All-Appreciative (of good), All-Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 148,\n          \"sura\" : 4\n        },\n        \"text\" : \"Allah does not like that the evil should be uttered in public except by him who has been wronged. And Allah is Ever All-Hearer, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 149,\n          \"sura\" : 4\n        },\n        \"text\" : \"Whether you (mankind) disclose (by good words of thanks) a good deed (done to you in the form of a favour by someone), or conceal it, or pardon an evil,  verily, Allah is Ever Oft­Pardoning, All­Powerful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 150,\n          \"sura\" : 4\n        },\n        \"text\" : \"Verily, those who disbelieve in Allah and His Messengers and wish to make distinction between Allah and His Messengers (by believing in Allah and disbelieving in His Messengers) saying, \\\"We believe in some but reject others,\\\" and wish to adopt a way in between.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 152,\n          \"sura\" : 4\n        },\n        \"text\" : \"And those who believe in Allah and His Messengers and make no distinction between any of them (Messengers), We shall give them their rewards, and Allah is Ever Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 153,\n          \"sura\" : 4\n        },\n        \"text\" : \"The people of the Scripture (Jews) ask you to cause a book to descend upon them from heaven. Indeed they asked Musa (Moses) for even greater than that, when they said: \\\"Show us Allah in public,\\\" but they were struck with thunder clap and lightning for their wickedness. Then they worshipped the calf even after clear proofs, evidences, and signs had come to them. (Even) so We forgave them. And We gave Musa (Moses) a clear proof of authority.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 155,\n          \"sura\" : 4\n        },\n        \"text\" : \"Because of their breaking the covenant, and of their rejecting the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah, and of their killing the Prophets unjustly, and of their saying: \\\"Our hearts are wrapped (with coverings, i.e. we do not understand what the Messengers say)\\\" - nay, Allah has set a seal upon their hearts because of their disbelief, so they believe not but a little.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 157,\n          \"sura\" : 4\n        },\n        \"text\" : \"And because of their saying (in boast), \\\"We killed Messiah 'Iesa (Jesus), son of Maryam (Mary), the Messenger of Allah,\\\" - but they killed him not, nor crucified him, but the resemblance of 'Iesa (Jesus) was put over another man (and they killed that man), and those who differ therein are full of doubts. They have no (certain) knowledge, they follow nothing but conjecture. For surely; they killed him not [i.e. 'Iesa (Jesus), son of Maryam (Mary)]:\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 158,\n          \"sura\" : 4\n        },\n        \"text\" : \"But Allah raised him ['Iesa (Jesus)] up (with his body and soul) unto Himself (and he is in the heavens). And Allah is Ever All-Powerful, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 159,\n          \"sura\" : 4\n        },\n        \"text\" : \"And there is none of the people of the Scripture (Jews and Christians), but must believe in him ['Iesa (Jesus), son of Maryam (Mary), as only a Messenger of Allah and a human being], before his ['Iesa (Jesus) or a Jew's or a Christian's] death (at the time of the appearance of the angel of death). And on the Day of Resurrection, he ['Iesa (Jesus)] will be a witness against them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 160,\n          \"sura\" : 4\n        },\n        \"text\" : \"For the wrong-doing of the Jews, We made unlawful to them certain good foods which has been lawful to them, and for their hindering many from Allah's Way;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 162,\n          \"sura\" : 4\n        },\n        \"text\" : \"But those among them who are well-grounded in knowledge, and the believers, believe in what has been sent down to you (Muhammad SAW) and what was sent down before you, and those who perform As-Salat (Iqamat-as-Salat), and give Zakat and believe in Allah and in the Last Day, it is they to whom We shall give a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 164,\n          \"sura\" : 4\n        },\n        \"text\" : \"And Messengers We have mentioned to you before, and Messengers We have not mentioned to you, - and to Musa (Moses) Allah spoke directly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 165,\n          \"sura\" : 4\n        },\n        \"text\" : \"Messengers as bearers of good news as well as of warning in order that mankind should have no plea against Allah after the Messengers. And Allah is Ever All-Powerful, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 166,\n          \"sura\" : 4\n        },\n        \"text\" : \"But Allah bears witness to that which He has sent down (the Quran) unto you (O Muhammad SAW), He has sent it down with His Knowledge, and the angels bear witness. And Allah is All-Sufficient as a Witness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 167,\n          \"sura\" : 4\n        },\n        \"text\" : \"Verily, those who disbelieve [by concealing the truth about Prophet Muhammad SAW and his message of true Islamic Monotheism written with them in the Taurat (Torah) and the Injeel (Gospel)] and prevent (mankind) from the Path of Allah (Islamic Monotheism), they have certainly strayed far away. (Tafsir Al-Qurtubi). (See V. 7:157)\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 168,\n          \"sura\" : 4\n        },\n        \"text\" : \"Verily, those who disbelieve and did wrong [by concealing the truth about Prophet Muhammad SAW and his message of true Islamic Monotheism written with them in the Taurat (Torah) and the Injeel (Gospel)], Allah will not forgive them, nor will He guide them to any way, - (Tafsir Al-Qurtubi).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 169,\n          \"sura\" : 4\n        },\n        \"text\" : \"Except the way of Hell, to dwell therein forever, and this is ever easy for Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 170,\n          \"sura\" : 4\n        },\n        \"text\" : \"O mankind! Verily, there has come to you the Messenger (Muhammad SAW) with the truth from your Lord, so believe in him, it is better for you. But if you disbelieve, then certainly to Allah belongs all that is in the heavens and the earth. And Allah is Ever All-Knowing, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 171,\n          \"sura\" : 4\n        },\n        \"text\" : \"O people of the Scripture (Jews and Christians)! Do not exceed the limits in your religion, nor say of Allah aught but the truth. The Messiah 'Iesa (Jesus), son of Maryam (Mary), was (no more than) a Messenger of Allah and His Word, (\\\"Be!\\\" - and he was) which He bestowed on Maryam (Mary) and a spirit (Ruh) created by Him; so believe in Allah and His Messengers. Say not: \\\"Three (trinity)!\\\" Cease! (it is) better for you. For Allah is (the only) One Ilah (God), Glory be to Him (Far Exalted is He) above having a son. To Him belongs all that is in the heavens and all that is in the earth. And Allah is All-Sufficient as a Disposer of affairs.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 172,\n          \"sura\" : 4\n        },\n        \"text\" : \"The Messiah will never be proud to reject to be a slave to Allah, nor the angels who are near (to Allah). And whosoever rejects His worship and is proud, then He will gather them all together unto Himself.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 173,\n          \"sura\" : 4\n        },\n        \"text\" : \"So, as for those who believed (in the Oneness of Allah - Islamic Monotheism) and did deeds of righteousness, He will give their (due) rewards, and more out of His Bounty. But as for those who refuse His worship and were proud, He will punish them with a painful torment. And they will not find for themselves besides Allah any protector or helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 175,\n          \"sura\" : 4\n        },\n        \"text\" : \"So, as for those who believed in Allah and held fast to Him, He will admit them to His Mercy and Grace (i.e. Paradise), and guide them to Himself by a Straight Path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 176,\n          \"sura\" : 4\n        },\n        \"text\" : \"They ask you for a legal verdict. Say: \\\"Allah directs (thus) about Al-Kalalah (those who leave neither descendants nor ascendants as heirs). If it is a man that dies, leaving a sister, but no child, she shall have half the inheritance. If (such a deceased was) a woman, who left no child, her brother takes her inheritance. If there are two sisters, they shall have two-thirds of the inheritance; if there are brothers and sisters, the male will have twice the share of the female. (Thus) does Allah makes clear to you (His Law) lest you go astray. And Allah is the All-Knower of everything.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! Fulfill (your) obligations. Lawful to you (for food) are all the beasts of cattle except that which will be announced to you (herein), game (also) being unlawful when you assume Ihram for Hajj or 'Umrah (pilgrimage). Verily, Allah commands that which He wills.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! Violate not the sanctity of the Symbols of Allah, nor of the Sacred Month, nor of the animals brought for sacrifice, nor the garlanded people or animals, etc. [Marked by the garlands on their necks made from the outer part of the tree-stems (of Makkah) for their security], nor the people coming to the Sacred House (Makkah), seeking the bounty and good pleasure of their Lord. But when you finish the Ihram (of Hajj or 'Umrah), you may hunt, and let not the hatred of some people in (once) stopping you from Al-Masjid-al-Haram (at Makkah) lead you to transgression (and hostility on your part). Help you one another in Al-Birr and At-Taqwa (virtue, righteousness and piety); but do not help one another in sin and transgression. And fear Allah. Verily, Allah is Severe in punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 5\n        },\n        \"text\" : \"Forbidden to you (for food) are: Al-Maytatah (the dead animals - cattle-beast not slaughtered), blood, the flesh of swine, and the meat of that which has been slaughtered as a sacrifice for others than Allah, or has been slaughtered for idols, etc., or on which Allah's Name has not been mentioned while slaughtering, and that which has been killed by strangling, or by a violent blow, or by a headlong fall, or by the goring of horns - and that which has been (partly) eaten by a wild animal - unless you are able to slaughter it (before its death) - and that which is sacrificed (slaughtered) on An-Nusub (stone altars). (Forbidden) also is to use arrows seeking luck or decision, (all) that is Fisqun (disobedience of Allah and sin). This day, those who disbelieved have given up all hope of your religion, so fear them not, but fear Me. This day, I have perfected your religion for you, completed My Favour upon you, and have chosen for you Islam as your religion. But as for him who is forced by severe hunger, with no inclination to sin (such can eat these above-mentioned meats), then surely, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 5\n        },\n        \"text\" : \"They ask you (O Muhammad SAW) what is lawful for them (as food). Say: \\\"Lawful unto you are At-Tayyibat [all kind of Halal (lawful-good) foods which Allah has made lawful (meat of slaughtered eatable animals, milk products, fats, vegetables and fruits, etc.)]. And those beasts and birds of prey which you have trained as hounds, training and teaching them (to catch) in the manner as directed to you by Allah; so eat of what they catch for you, but pronounce the Name of Allah over it, and fear Allah. Verily, Allah is Swift in reckoning.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 5\n        },\n        \"text\" : \"Made lawful to you this day are At-Tayyibat [all kinds of Halal (lawful) foods, which Allah has made lawful (meat of slaughtered eatable animals, etc., milk products, fats, vegetables and fruits, etc.). The food (slaughtered cattle, eatable animals, etc.) of the people of the Scripture (Jews and Christians) is lawful to you and yours is lawful to them. (Lawful to you in marriage) are chaste women from the believers and chaste women from those who were given the Scripture (Jews and Christians) before your time, when you have given their due Mahr (bridal money given by the husband to his wife at the time of marriage), desiring chastity (i.e. taking them in legal wedlock) not committing illegal sexual intercourse, nor taking them as girl-friends. And whosoever disbelieves in the Oneness of Allah and in all the other Articles of Faith [i.e. His (Allah's), Angels, His Holy Books, His Messengers, the Day of Resurrection and Al-Qadar (Divine Preordainments)], then fruitless is his work, and in the Hereafter he will be among the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! When you intend to offer As-Salat (the prayer), wash your faces and your hands (forearms) up to the elbows, rub (by passing wet hands over) your heads, and (wash) your feet up to ankles. If you are in a state of Janaba (i.e. had a sexual discharge), purify yourself (bathe your whole body). But if you are ill or on a journey or any of you comes from answering the call of nature, or you have been in contact with women (i.e. sexual intercourse) and you find no water, then perform Tayammum with clean earth and rub therewith your faces and hands. Allah does not want to place you in difficulty, but He wants to purify you, and to complete His Favour on you that you may be thankful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 5\n        },\n        \"text\" : \"And remember Allah's Favour upon you and His Covenant with which He bound you when you said: \\\"We hear and we obey.\\\" And fear Allah. Verily, Allah is All-Knower of the secrets of (your) breasts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! Stand out firmly for Allah and be just witnesses and let not the enmity and hatred of others make you avoid justice. Be just: that is nearer to piety, and fear Allah. Verily, Allah is Well-Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 5\n        },\n        \"text\" : \"Allah has promised those who believe (in the Oneness of Allah - Islamic Monotheism) and do deeds of righteousness, that for them there is forgiveness and a great reward (i.e. Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! Remember the Favour of Allah unto you when some people desired (made a plan) to stretch out their hands against you, but (Allah) withheld their hands from you. So fear Allah. And in Allah let believers put their trust.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 5\n        },\n        \"text\" : \"Indeed Allah took the covenant from the Children of Israel (Jews), and We appointed twelve leaders among them. And Allah said: \\\"I am with you if you perform As-Salat (Iqamat-as-Salat) and give Zakat and believe in My Messengers; honour and assist them, and lend to Allah a good loan. Verily, I will remit your sins and admit you to Gardens under which rivers flow (in Paradise). But if any of you after this, disbelieved, he has indeed gone astray from the Straight Path.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 5\n        },\n        \"text\" : \"So because of their breach of their covenant, We cursed them, and made their hearts grow hard. They change the words from their (right) places and have abandoned a good part of the Message that was sent to them. And you will not cease to discover deceit in them, except a few of them. But forgive them, and overlook (their misdeeds). Verily, Allah loves Al-Muhsinun (good-doers - see V. 2:112).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 5\n        },\n        \"text\" : \"And from those who call themselves Christians, We took their covenant, but they have abandoned a good part of the Message that was sent to them. So We planted amongst them enmity and hatred till the Day of Resurrection (when they discarded Allah's Book, disobeyed Allah's Messengers and His Orders and transgressed beyond bounds in Allah's disobedience), and Allah will inform them of what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 5\n        },\n        \"text\" : \"O people of the Scripture (Jews and Christians)! Now has come to you Our Messenger (Muhammad SAW) explaining to you much of that which you used to hide from the Scripture and passing over (i.e. leaving out without explaining) much. Indeed, there has come to you from Allah a light (Prophet Muhammad SAW) and a plain Book (this Quran).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 5\n        },\n        \"text\" : \"Wherewith Allah guides all those who seek His Good Pleasure to ways of peace, and He brings them out of darkness by His Will unto light and guides them to a Straight Way (Islamic Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 5\n        },\n        \"text\" : \"Surely, in disbelief are they who say that Allah is the Messiah, son of Maryam (Mary). Say (O Muhammad SAW): \\\"Who then has the least power against Allah, if He were to destroy the Messiah, son of Maryam (Mary), his mother, and all those who are on the earth together?\\\" And to Allah belongs the dominion of the heavens and the earth, and all that is between them. He creates what He wills. And Allah is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 5\n        },\n        \"text\" : \"And (both) the Jews and the Christians say: \\\"We are the children of Allah and His loved ones.\\\" Say: \\\"Why then does He punish you for your sins?\\\" Nay, you are but human beings, of those He has created, He forgives whom He wills and He punishes whom He wills. And to Allah belongs the dominion of the heavens and the earth and all that is between them, and to Him is the return (of all).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 5\n        },\n        \"text\" : \"O people of the Scripture (Jews and Christians)! Now has come to you Our Messenger (Muhammad SAW) making (things) clear unto you, after a break in (the series of) Messengers, lest you say: \\\"There came unto us no bringer of glad tidings and no warner.\\\" But now has come unto you a bringer of glad tidings and a warner. And Allah is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 5\n        },\n        \"text\" : \"And (remember) when Musa (Moses) said to his people: \\\"O my people! Remember the Favour of Allah to you, when He made Prophets among you, made you kings, and gave you what He had not given to any other among the 'Alamin (mankind and jinns, in the past).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 5\n        },\n        \"text\" : \"\\\"O my people! Enter the holy land (Palestine) which Allah has assigned to you, and turn not back (in flight) for then you will be returned as losers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 5\n        },\n        \"text\" : \"They said: \\\"O Musa (Moses)! In it (this holy land) are a people of great strength, and we shall never enter it, till they leave it; when they leave, then we will enter.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 5\n        },\n        \"text\" : \"Two men of those who feared (Allah and) on whom Allah had bestowed His Grace [they were Yusha' (Joshua) and Kalab (Caleb)] said: \\\"Assault them through the gate, for when you are in, victory will be yours, and put your trust in Allah if you are believers indeed.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 5\n        },\n        \"text\" : \"They said: \\\"O Musa (Moses)! We shall never enter it as long as they are there. So go you and your Lord and fight you two, we are sitting right here.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 5\n        },\n        \"text\" : \"He [Musa (Moses)] said: \\\"O my Lord! I have power only over myself and my brother, so separate us from the people who are the Fasiqun (rebellious and disobedient to Allah)!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 5\n        },\n        \"text\" : \"(Allah) said: \\\"Therefore it (this holy land) is forbidden to them for forty years; in distraction they will wander through the land. So be not sorrowful over the people who are the Fasiqun (rebellious and disobedient to Allah).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 5\n        },\n        \"text\" : \"And (O Muhammad SAW) recite to them (the Jews) the story of the two sons of Adam [Habil (Abel) and Qabil (Cain)] in truth; when each offered a sacrifice (to Allah), it was accepted from the one but not from the other. The latter said to the former: \\\"I will surely kill you.\\\" The former said: \\\"Verily, Allah accepts only from those who are Al-Muttaqun (the pious - see V. 2:2).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 5\n        },\n        \"text\" : \"\\\"If you do stretch your hand against me to kill me, I shall never stretch my hand against you to kill you, for I fear Allah; the Lord of the 'Alamin (mankind, jinns, and all that exists).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 5\n        },\n        \"text\" : \"Then Allah sent a crow who scratched the ground to show him to hide the dead body of his brother. He (the murderer) said: \\\"Woe to me! Am I not even able to be as this crow and to hide the dead body of my brother?\\\" Then he became one of those who regretted.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 5\n        },\n        \"text\" : \"Because of that We ordained for the Children of Israel that if anyone killed a person not in retaliation of murder, or (and) to spread mischief in the land - it would be as if he killed all mankind, and if anyone saved a life, it would be as if he saved the life of all mankind. And indeed, there came to them Our Messengers with clear proofs, evidences, and signs, even then after that many of them continued to exceed the limits (e.g. by doing oppression unjustly and exceeding beyond the limits set by Allah by committing the major sins) in the land!.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 5\n        },\n        \"text\" : \"The recompense of those who wage war against Allah and His Messenger and do mischief in the land is only that they shall be killed or crucified or their hands and their feet be cut off on the opposite sides, or be exiled from the land. That is their disgrace in this world, and a great torment is theirs in the Hereafter.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 5\n        },\n        \"text\" : \"Except for those who (having fled away and then) came back (as Muslims) with repentance before they fall into your power; in that case, know that Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! Do your duty to Allah and fear Him. Seek the means of approach to Him, and strive hard in His Cause as much as you can. So that you may be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 5\n        },\n        \"text\" : \"Verily, those who disbelieve, if they had all that is in the earth, and as much again therewith to ransom themselves thereby from the torment on the Day of Resurrection, it would never be accepted of them, and theirs would be a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 5\n        },\n        \"text\" : \"Cut off (from the wrist joint) the (right) hand of the thief, male or female, as a recompense for that which they committed, a punishment by way of example from Allah. And Allah is All-Powerful, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 5\n        },\n        \"text\" : \"But whosoever repents after his crime and does righteous good deeds (by obeying Allah), then verily, Allah will pardon him (accept his repentance). Verily, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 5\n        },\n        \"text\" : \"Know you not that to Allah (Alone) belongs the dominion of the heavens and the earth! He punishes whom He wills and He forgives whom He wills. And Allah is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 5\n        },\n        \"text\" : \"O Messenger (Muhammad SAW)! Let not those who hurry to fall into disbelief grieve you, of such who say: \\\"We believe\\\" with their mouths but their hearts have no faith. And of the Jews are men who listen much and eagerly to lies - listen to others who have not come to you. They change the words from their places; they say, \\\"If you are given this, take it, but if you are not given this, then beware!\\\" And whomsoever Allah wants to put in Al-Fitnah [error, because of his rejecting the Faith], you can do nothing for him against Allah. Those are the ones whose hearts Allah does not want to purify (from disbelief and hypocrisy); for them there is a disgrace in this world, and in the Hereafter a great torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 5\n        },\n        \"text\" : \"(They like to) listen to falsehood, to devour anything forbidden. So if they come to you (O Muhammad SAW), either judge between them, or turn away from them. If you turn away from them, they cannot hurt you in the least. And if you judge, judge with justice between them. Verily, Allah loves those who act justly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 5\n        },\n        \"text\" : \"But how do they come to you for decision while they have the Taurat (Torah), in which is the (plain) Decision of Allah; yet even after that, they turn away. For they are not (really) believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 5\n        },\n        \"text\" : \"Verily, We did send down the Taurat (Torah) [to Musa (Moses)], therein was guidance and light, by which the Prophets, who submitted themselves to Allah's Will, judged the Jews. And the rabbis and the priests [too judged the Jews by the Taurat (Torah) after those Prophets] for to them was entrusted the protection of Allah's Book, and they were witnesses thereto. Therefore fear not men but fear Me (O Jews) and sell not My Verses for a miserable price. And whosoever does not judge by what Allah has revealed, such are the Kafirun (i.e. disbelievers - of a lesser degree as they do not act on Allah's Laws).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 5\n        },\n        \"text\" : \"And We ordained therein for them: \\\"Life for life, eye for eye, nose for nose, ear for ear, tooth for tooth, and wounds equal for equal.\\\" But if anyone remits the retaliation by way of charity, it shall be for him an expiation. And whosoever does not judge by that which Allah has revealed, such are the Zalimun (polytheists and wrong-doers - of a lesser degree).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 5\n        },\n        \"text\" : \"Let the people of the Injeel (Gospel) judge by what Allah has revealed therein. And whosoever does not judge by what Allah has revealed (then) such (people) are the Fasiqun (the rebellious i.e. disobedient (of a lesser degree) to Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 5\n        },\n        \"text\" : \"And We have sent down to you (O Muhammad SAW) the Book (this Quran) in truth, confirming the Scripture that came before it and Mohayminan (trustworthy in highness and a witness) over it (old Scriptures). So judge between them by what Allah has revealed, and follow not their vain desires, diverging away from the truth that has come to you. To each among you, We have prescribed a law and a clear way. If Allah willed, He would have made you one nation, but that (He) may test you in what He has given you; so strive as in a race in good deeds. The return of you (all) is to Allah; then He will inform you about that in which you used to differ.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 5\n        },\n        \"text\" : \"And so judge (you O Muhammad SAW) between them by what Allah has revealed and follow not their vain desires, but beware of them lest they turn you (O Muhammad SAW) far away from some of that which Allah has sent down to you. And if they turn away, then know that Allah's Will is to punish them for some sins of theirs. And truly, most of men are Fasiqun (rebellious and disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 5\n        },\n        \"text\" : \"Do they then seek the judgement of (the Days of) Ignorance? And who is better in judgement than Allah for a people who have firm Faith.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! Take not the Jews and the Christians as Auliya' (friends, protectors, helpers, etc.), they are but Auliya' to one another. And if any amongst you takes them as Auliya', then surely he is one of them. Verily, Allah guides not those people who are the Zalimun (polytheists and wrong-doers and unjust).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 5\n        },\n        \"text\" : \"And you see those in whose hearts there is a disease (of hypocrisy), they hurry to their friendship, saying: \\\"We fear lest some misfortune of a disaster may befall us.\\\" Perhaps Allah may bring a victory or a decision according to His Will. Then they will become regretful for what they have been keeping as a secret in themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 5\n        },\n        \"text\" : \"And those who believe will say: \\\"Are these the men (hypocrites) who swore their strongest oaths by Allah that they were with you (Muslims)?\\\" All that they did has been in vain (because of their hypocrisy), and they have become the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! Whoever from among you turns back from his religion (Islam), Allah will bring a people whom He will love and they will love Him; humble towards the believers, stern towards the disbelievers, fighting in the Way of Allah, and never afraid of the blame of the blamers. That is the Grace of Allah which He bestows on whom He wills. And Allah is All-Sufficient for His creatures' needs, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 5\n        },\n        \"text\" : \"Verily, your Wali (Protector or Helper) is Allah, His Messenger, and the believers, - those who perform As-Salat (Iqamat-as-Salat), and give Zakat, and they bow down (submit themselves with obedience to Allah in prayer).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 5\n        },\n        \"text\" : \"And whosoever takes Allah, His Messenger, and those who have believed, as Protectors, then the party of Allah will be the victorious.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! Take not for Auliya' (protectors and helpers) those who take your religion for a mockery and fun from among those who received the Scripture (Jews and Christians) before you, nor from among the disbelievers; and fear Allah if you indeed are true believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 5\n        },\n        \"text\" : \"And when you proclaim the call for As-Salat [call for the prayer (Adhan)], they take it (but) as a mockery and fun; that is because they are a people who understand not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 5\n        },\n        \"text\" : \"Say: \\\"O people of the Scripture (Jews and Christians)! Do you criticize us for no other reason than that we believe in Allah, and in (the revelation) which has been sent down to us and in that which has been sent down before (us), and that most of you are Fasiqun [rebellious and disobedient (to Allah)]?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 5\n        },\n        \"text\" : \"Say (O Muhammad SAW to the people of the Scripture): \\\"Shall I inform you of something worse than that, regarding the recompense from Allah: those (Jews) who incurred the Curse of Allah and His Wrath, those of whom (some) He transformed into monkeys and swines, those who worshipped Taghut (false deities); such are worse in rank (on the Day of Resurrection in the Hell-fire), and far more astray from the Right Path (in the life of this world).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 5\n        },\n        \"text\" : \"When they come to you, they say: \\\"We believe.\\\" But in fact they enter with (an intention of) disbelief and they go out with the same. And Allah knows all what they were hiding.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 5\n        },\n        \"text\" : \"The Jews say: \\\"Allah's Hand is tied up (i.e. He does not give and spend of His Bounty).\\\" Be their hands tied up and be they accursed for what they uttered. Nay, both His Hands are widely outstretched. He spends (of His Bounty) as He wills. Verily, the Revelation that has come to you from Allah increases in most of them their obstinate rebellion and disbelief. We have put enmity and hatred amongst them till the Day of Resurrection. Every time they kindled the fire of war, Allah extinguished it; and they (ever) strive to make mischief on earth. And Allah does not like the Mufsidun (mischief-makers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 5\n        },\n        \"text\" : \"And if only the people of the Scripture (Jews and Christians) had believed (in Muhammad SAW) and warded off evil (sin, ascribing partners to Allah) and had become Al-Muttaqun (the pious - see V. 2:2) We would indeed have blotted out their sins and admitted them to Gardens of pleasure (in Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 5\n        },\n        \"text\" : \"O Messenger (Muhammad SAW)! Proclaim (the Message) which has been sent down to you from your Lord. And if you do not, then you have not conveyed His Message. Allah will protect you from mankind. Verily, Allah guides not the people who disbelieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 5\n        },\n        \"text\" : \"Surely, those who believe (in the Oneness of Allah, in His Messenger Muhammad SAW and all that was revealed to him from Allah), those who are the Jews and the Sabians and the Christians, - whosoever believed in Allah and the Last Day, and worked righteousness, on them shall be no fear, nor shall they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 5\n        },\n        \"text\" : \"Verily, We took the covenant of the Children of Israel and sent them Messengers. Whenever there came to them a Messenger with what they themselves desired not - a group of them they called liars, and others among them they killed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 5\n        },\n        \"text\" : \"They thought there will be no Fitnah (trial or punishment), so they became blind and deaf; after that Allah turned to them (with Forgiveness); yet again many of them became blind and deaf. And Allah is the All-Seer of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 5\n        },\n        \"text\" : \"Surely, they have disbelieved who say: \\\"Allah is the Messiah ['Iesa (Jesus)], son of Maryam (Mary).\\\" But the Messiah ['Iesa (Jesus)] said: \\\"O Children of Israel! Worship Allah, my Lord and your Lord.\\\" Verily, whosoever sets up partners in worship with Allah, then Allah has forbidden Paradise for him, and the Fire will be his abode. And for the Zalimun (polytheists and wrong-doers) there are no helpers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 5\n        },\n        \"text\" : \"Surely, disbelievers are those who said: \\\"Allah is the third of the three (in a Trinity).\\\" But there is no ilah (god) (none who has the right to be worshipped) but One Ilah (God -Allah). And if they cease not from what they say, verily, a painful torment will befall the disbelievers among them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 5\n        },\n        \"text\" : \"Will they not repent to Allah and ask His Forgiveness? For Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 5\n        },\n        \"text\" : \"The Messiah ['Iesa (Jesus)], son of Maryam (Mary), was no more than a Messenger; many were the Messengers that passed away before him. His mother [Maryam (Mary)] was a Siddiqah [i.e. she believed in the words of Allah and His Books (see Verse 66:12)]. They both used to eat food (as any other human being, while Allah does not eat). Look how We make the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) clear to them, yet look how they are deluded away (from the truth).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 5\n        },\n        \"text\" : \"Say (O Muhammad SAW to mankind): \\\"How do you worship besides Allah something which has no power either to harm or to benefit you? But it is Allah Who is the All-Hearer, All-Knower.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 5\n        },\n        \"text\" : \"Those among the Children of Israel who disbelieved were cursed by the tongue of Dawud (David) and 'Iesa (Jesus), son of Maryam (Mary). That was because they disobeyed (Allah and the Messengers) and were ever transgressing beyond bounds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 5\n        },\n        \"text\" : \"You see many of them taking the disbelievers as their Auliya' (protectors and helpers). Evil indeed is that which their ownselves have sent forward before them, for that (reason) Allah's Wrath fell upon them and in torment they will abide.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 5\n        },\n        \"text\" : \"And had they believed in Allah, and in the Prophet (Muhammad SAW) and in what has been revealed to him, never would they have taken them (the disbelievers) as Auliya' (protectors and helpers), but many of them are the Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 5\n        },\n        \"text\" : \"And when they (who call themselves Christians) listen to what has been sent down to the Messenger (Muhammad SAW), you see their eyes overflowing with tears because of the truth they have recognised. They say: \\\"Our Lord! We believe; so write us down among the witnesses.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 5\n        },\n        \"text\" : \"\\\"And why should we not believe in Allah and in that which has come to us of the truth (Islamic Monotheism)? And we wish that our Lord will admit us (in Paradise on the Day of Resurrection) along with the righteous people (Prophet Muhammad SAW and his Companions).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 5\n        },\n        \"text\" : \"So because of what they said, Allah rewarded them Gardens under which rivers flow (in Paradise), they will abide therein forever. Such is the reward of good-doers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 5\n        },\n        \"text\" : \"But those who disbelieved and belied Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.), they shall be the dwellers of the (Hell) Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! Make not unlawful the Taiyibat (all that is good as regards foods, things, deeds, beliefs, persons, etc.) which Allah has made lawful to you, and transgress not. Verily, Allah does not like the transgressors.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 5\n        },\n        \"text\" : \"And eat of the things which Allah has provided for you, lawful and good, and fear Allah in Whom you believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 5\n        },\n        \"text\" : \"Allah will not punish you for what is uninentional in your oaths, but He will punish you for your deliberate oaths; for its expiation (a deliberate oath) feed ten Masakin (poor persons), on a scale of the average of that with which you feed your own families; or clothe them; or manumit a slave. But whosoever cannot afford (that), then he should fast for three days. That is the expiation for the oaths when you have sworn. And protect your oaths (i.e. do not swear much). Thus Allah make clear to you His Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) that you may be grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! Intoxicants (all kinds of alcoholic drinks), gambling, Al-Ansab, and Al-Azlam (arrows for seeking luck or decision) are an abomination of Shaitan's (Satan) handiwork. So avoid (strictly all) that (abomination) in order that you may be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 5\n        },\n        \"text\" : \"Shaitan (Satan) wants only to excite enmity and hatred between you with intoxicants (alcoholic drinks) and gambling, and hinder you from the remembrance of Allah and from As-Salat (the prayer). So, will you not then abstain?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 5\n        },\n        \"text\" : \"And obey Allah and the Messenger (Muhammad SAW), and beware (of even coming near to drinking or gambling or Al-Ansab, or Al-Azlam, etc.) and fear Allah. Then if you turn away, you should know that it is Our Messenger's duty to convey (the Message) in the clearest way.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 5\n        },\n        \"text\" : \"Those who believe and do righteous good deeds, there is no sin on them for what they ate (in the past), if they fear Allah (by keeping away from His forbidden things), and believe and do righteous good deeds, and again fear Allah and believe, and once again fear Allah and do good deeds with Ihsan (perfection). And Allah loves the good-doers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! Allah will certainly make a trial of you with something in (the matter of) the game that is well within reach of your hands and your lances, that Allah may test who fears Him unseen. Then whoever transgresses thereafter, for him there is a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! Kill not game while you are in a state of Ihram for Hajj or 'Umrah (pilgrimage), and whosoever of you kills it intentionally, the penalty is an offering, brought to the Ka'bah, of an eatable animal (i.e. sheep, goat, cow, etc.) equivalent to the one he killed, as adjudged by two just men among you; or, for expiation, he should feed Masakin (poor persons), or its equivalent in Saum (fasting), that he may taste the heaviness (punishment) of his deed. Allah has forgiven what is past, but whosoever commits it again, Allah will take retribution from him. And Allah is All-Mighty, All-Able of Retribution.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 5\n        },\n        \"text\" : \"Lawful to you is (the pursuit of) water-game and its use for food - for the benefit of yourselves and those who travel, but forbidden is (the pursuit of) land-game as long as you are in a state of Ihram (for Hajj or 'Umrah). And fear Allah to Whom you shall be gathered back.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 5\n        },\n        \"text\" : \"Allah has made the Ka'bah, the Sacred House, an asylum of security and Hajj and 'Umrah (pilgrimage) for mankind, and also the Sacred Month and the animals of offerings and the garlanded (people or animals, etc. marked with the garlands on their necks made from the outer part of the stem of the Makkah trees for their security), that you may know that Allah has knowledge of all that is in the heavens and all that is in the earth, and that Allah is the All-Knower of each and everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 5\n        },\n        \"text\" : \"Know that Allah is Severe in punishment and that Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 5\n        },\n        \"text\" : \"The Messenger's duty [i.e. Our Messenger Muhammad SAW whom We have sent to you, (O mankind)] is but to convey (the Message). And Allah knows all that you reveal and all that you conceal.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 100,\n          \"sura\" : 5\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Not equal are Al-Khabith (all that is evil and bad as regards things, deeds, beliefs, persons, foods, etc.) and At-Taiyib (all that is good as regards things, deeds, beliefs, persons, foods, etc.), even though the abundance of Al-Khabith (evil) may please you.\\\" So fear Allah much [(abstain from all kinds of sins and evil deeds which He has forbidden) and love Allah much (perform all kinds of good deeds which He has ordained)], O men of understanding in order that you may be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! Ask not about things which, if made plain to you, may cause you trouble. But if you ask about them while the Quran is being revealed, they will be made plain to you. Allah has forgiven that, and Allah is Oft-Forgiving, Most Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 5\n        },\n        \"text\" : \"Allah has not instituted things like Bahirah (a she-camel whose milk was spared for the idols and nobody was allowed to milk it) or a Sa'ibah (a she-camel let loose for free pasture for their false gods, e.g. idols, etc., and nothing was allowed to be carried on it), or a Wasilah (a she-camel set free for idols because it has given birth to a she-camel at its first delivery and then again gives birth to a she-camel at its second delivery) or a Ham (a stallion-camel freed from work for their idols, after it had finished a number of copulations assigned for it, all these animals were liberated in honour of idols as practised by pagan Arabs in the pre-Islamic period). But those who disbelieve invent lies against Allah, and most of them have no understanding.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 5\n        },\n        \"text\" : \"And when it is said to them: \\\"Come to what Allah has revealed and unto the Messenger (Muhammad SAW for the verdict of that which you have made unlawful).\\\" They say: \\\"Enough for us is that which we found our fathers following,\\\" even though their fathers had no knowledge whatsoever and no guidance.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! Take care of your ownselves, [do righteous deeds, fear Allah much (abstain from all kinds of sins and evil deeds which He has forbidden) and love Allah much (perform all kinds of good deeds which He has ordained)]. If you follow the right guidance and enjoin what is right (Islamic Monotheism and all that Islam orders one to do) and forbid what is wrong (polytheism, disbelief and all that Islam has forbidden) no hurt can come to you from those who are in error. The return of you all is to Allah, then He will inform you about (all) that which you used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who believe! When death approaches any of you, and you make a bequest, then take the testimony of two just men of your own folk or two others from outside, if you are travelling through the land and the calamity of death befalls you. Detain them both after As-Salat (the prayer), (then) if you are in doubt (about their truthfulness), let them both swear by Allah (saying): \\\"We wish not for any worldly gain in this, even though he (the beneficiary) be our near relative. We shall not hide Testimony of Allah, for then indeed we should be of the sinful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 5\n        },\n        \"text\" : \"If then it gets known that these two had been guilty of sin, let two others stand forth in their places, nearest in kin from among those who claim a lawful right. Let them swear by Allah (saying): \\\"We affirm that our testimony is truer than that of both of them, and that we have not trespassed (the truth), for then indeed we should be of the wrong-doers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 5\n        },\n        \"text\" : \"That should make it closer (to the fact) that their testimony would be in its true nature and shape (and thus accepted), or else they would fear that (other) oaths would be admitted after their oaths. And fear Allah and listen (with obedience to Him). And Allah guides not the people who are Al-Fasiqun (the rebellious and disobedient).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 5\n        },\n        \"text\" : \"On the Day when Allah will gather the Messengers together and say to them: \\\"What was the response you received (from men to your teaching)? They will say: \\\"We have no knowledge, verily, only You are the All-Knower of all that is hidden (or unseen, etc.).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 5\n        },\n        \"text\" : \"(Remember) when Allah will say (on the Day of Resurrection). \\\"O 'Iesa (Jesus), son of Maryam (Mary)! Remember My Favour to you and to your mother when I supported you with Ruh-ul-Qudus [Jibrael (Gabriel)] so that you spoke to the people in the cradle and in maturity; and when I taught you writing, Al-Hikmah (the power of understanding), the Taurat (Torah) and the Injeel (Gospel); and when you made out of the clay, as it were, the figure of a bird, by My Permission, and you breathed into it, and it became a bird by My Permission, and you healed those born blind, and the lepers by My Permission, and when you brought forth the dead by My Permission; and when I restrained the Children of Israel from you (when they resolved to kill you) since you came unto them with clear proofs, and the disbelievers among them said: 'This is nothing but evident magic.' \\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 5\n        },\n        \"text\" : \"And when I (Allah) put in the hearts of Al-Hawarieen (the disciples) [of 'Iesa (Jesus)] to believe in Me and My Messenger, they said: \\\"We believe. And bear witness that we are Muslims.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 5\n        },\n        \"text\" : \"(Remember) when Al-Hawariun (the disciples) said: \\\"O 'Iesa (Jesus), son of Maryam (Mary)! Can your Lord send down to us a table spread (with food) from heaven?\\\" 'Iesa (Jesus) said: \\\"Fear Allah, if you are indeed believers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 5\n        },\n        \"text\" : \"'Iesa (Jesus), son of Maryam (Mary), said: \\\"O Allah, our Lord! Send us from heaven a table spread (with food) that there may be for us - for the first and the last of us - a festival and a sign from You; and provide us sustenance, for You are the Best of sustainers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 115,\n          \"sura\" : 5\n        },\n        \"text\" : \"Allah said: \\\"I am going to send it down unto you, but if any of you after that disbelieves, then I will punish him with a torment such as I have not inflicted on anyone among (all) the 'Alamin (mankind and jinns).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 5\n        },\n        \"text\" : \"And (remember) when Allah will say (on the Day of Resurrection): \\\"O 'Iesa (Jesus), son of Maryam (Mary)! Did you say unto men: 'Worship me and my mother as two gods besides Allah?' \\\" He will say: \\\"Glory be to You! It was not for me to say what I had no right (to say). Had I said such a thing, You would surely have known it. You know what is in my inner-self though I do not know what is in Yours, truly, You, only You, are the All-Knower of all that is hidden and unseen.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 117,\n          \"sura\" : 5\n        },\n        \"text\" : \"\\\"Never did I say to them aught except what You (Allah) did command me to say: 'Worship Allah, my Lord and your Lord.' And I was a witness over them while I dwelt amongst them, but when You took me up, You were the Watcher over them, and You are a Witness to all things. (This is a great admonition and warning to the Christians of the whole world).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 118,\n          \"sura\" : 5\n        },\n        \"text\" : \"\\\"If You punish them, they are Your slaves, and if You forgive them, verily You, only You are the All-Mighty, the All-Wise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 119,\n          \"sura\" : 5\n        },\n        \"text\" : \"Allah will say: \\\"This is a Day on which the truthful will profit from their truth: theirs are Gardens under which rivers flow (in Paradise) - they shall abide therein forever. Allah is pleased with them and they with Him. That is the great success (Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 120,\n          \"sura\" : 5\n        },\n        \"text\" : \"To Allah belongs the dominion of the heavens and the earth and all that is therein, and He is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 6\n        },\n        \"text\" : \"All praises and thanks be to Allah, Who (Alone) created the heavens and the earth, and originated the darkness and the light, yet those who disbelieve hold others as equal with their Lord.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 6\n        },\n        \"text\" : \"And He is Allah (to be worshipped Alone) in the heavens and on the earth, He knows what you conceal and what you reveal, and He knows what you earn (good or bad).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"To whom belongs all that is in the heavens and the earth?\\\" Say: \\\"To Allah. He has prescribed Mercy for Himself. Indeed He will gather you together on the Day of Resurrection, about which there is no doubt. Those who destroy themselves will not believe [in Allah as being the only Ilah (God), and Muhammad SAW as being one of His Messengers, and in Resurrection, etc.].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 6\n        },\n        \"text\" : \"And to Him belongs whatsoever exists in the night and the day, and He is the All-Hearing, the All-Knowing.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Shall I take as a Wali (helper, protector, etc.) any other than Allah, the Creator of the heavens and the earth? And it is He Who feeds but is not fed.\\\" Say: \\\"Verily, I am commanded to be the first of those who submit themselves to Allah (as Muslims).\\\" And be not you (O Muhammad SAW) of the Mushrikun [polytheists, pagans, idolaters and disbelievers in the Oneness of Allah].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 6\n        },\n        \"text\" : \"Who is averted from (such a torment) on that Day, (Allah) has surely been Merciful to him. And that would be the obvious success.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 6\n        },\n        \"text\" : \"And if Allah touches you with harm, none can remove it but He, and if He touches you with good, then He is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 6\n        },\n        \"text\" : \"And He is the Irresistible, above His slaves, and He is the All-Wise, Well-Acquainted with all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"What thing is the most great in witness?\\\" Say: \\\"Allah (the Most Great!) is Witness between me and you; this Quran has been revealed to me that I may therewith warn you and whomsoever it may reach. Can you verily bear witness that besides Allah there are other aliha (gods)?\\\" Say \\\"I bear no (such) witness!\\\" Say: \\\"But in truth He (Allah) is the only one Ilah (God). And truly I am innocent of what you join in worship with Him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 6\n        },\n        \"text\" : \"Those to whom We have given the Scripture (Jews and Christians) recognize him (i.e. Muhammad SAW as a Messenger of Allah, and they also know that there is no Ilah (God) but Allah and Islam is Allah's Religion), as they recognize their own sons. Those who destroy themselves will not believe. (Tafsir At-Tabari)\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 6\n        },\n        \"text\" : \"And who does more wrong than he who invents a lie against Allah or rejects His Ayat (proofs, evidences, verses, lessons, revelations, etc.)? Verily, the Zalimun (polytheists and wrong-doers, etc.) shall never be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 6\n        },\n        \"text\" : \"And on the Day when We shall gather them all together, We shall say to those who joined partners in worship (with Us): \\\"Where are your partners (false deities) whom you used to assert (as partners in worship with Allah)?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 6\n        },\n        \"text\" : \"There will then be (left) no Fitnah (excuses or statements or arguments) for them but to say: \\\"By Allah, our Lord, we were not those who joined others in worship with Allah.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 6\n        },\n        \"text\" : \"And they said: \\\"There is no (other life) but our (present) life of this world, and never shall we be resurrected (on the Day of Resurrection).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 6\n        },\n        \"text\" : \"They indeed are losers who denied their Meeting with Allah, until all of a sudden, the Hour (signs of death) is on them, and they say: \\\"Alas for us that we gave no thought to it,\\\" while they will bear their burdens on their backs; and evil indeed are the burdens that they will bear!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 6\n        },\n        \"text\" : \"We know indeed the grief which their words cause you (O Muhammad SAW): it is not you that they deny, but it is the Verses (the Quran) of Allah that the Zalimun (polytheists and wrong-doers) deny.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 6\n        },\n        \"text\" : \"Verily, (many) Messengers were denied before you (O Muhammad SAW), but with patience they bore the denial, and they were hurt, till Our Help reached them, and none can alter the Words (Decisions) of Allah. Surely there has reached you the information (news) about the Messengers (before you).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 6\n        },\n        \"text\" : \"If their aversion (from you, O Muhammad SAW and from that with which you have been sent) is hard on you, (and you cannot be patient from their harm to you), then if you were able to seek a tunnel in the ground or a ladder to the sky, so that you may bring them a sign (and you cannot do it, so be patient). And had Allah willed, He could have gathered them together (all) unto true guidance, so be not you one of those who are Al-Jahilun (the ignorant).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 6\n        },\n        \"text\" : \"It is only those who listen (to the Message of Prophet Muhammad SAW), will respond (benefit from it), but as for the dead (disbelievers), Allah will raise them up, then to Him they will be returned (for their recompense).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 6\n        },\n        \"text\" : \"And they said: \\\"Why is not a sign sent down to him from his Lord?\\\" Say: \\\"Allah is certainly Able to send down a sign, but most of them know not.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 6\n        },\n        \"text\" : \"There is not a moving (living) creature on earth, nor a bird that flies with its two wings, but are communities like you. We have neglected nothing in the Book, then unto their Lord they (all) shall be gathered.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 6\n        },\n        \"text\" : \"Those who reject Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) are deaf and dumb in darkness. Allah sends astray whom He wills and He guides on the Straight Path whom He wills.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Tell me if Allah's Torment comes upon you, or the Hour comes upon you, would you then call upon any one other than Allah? (Reply) if you are truthful!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 6\n        },\n        \"text\" : \"Nay! To Him Alone you call, and, if He will, He would remove that (distress) for which you call upon Him, and you forget at that time whatever partners you joined with Him (in worship)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 6\n        },\n        \"text\" : \"So, when they forgot (the warning) with which they had been reminded, We opened to them the gates of every (pleasant) thing, until in the midst of their enjoyment in that which they were given, all of a sudden, We took them to punishment, and lo! They were plunged into destruction with deep regrets and sorrows.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 6\n        },\n        \"text\" : \"So the roots of the people who did wrong were cut off. And all the praises and thanks be to Allah, the Lord of the 'Alamin (mankind, jinns, and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say (to the disbelievers): \\\"Tell me, if Allah took away your hearing and your sight, and sealed up your hearts, who is there - an ilah (a god) other than Allah who could restore them to you?\\\" See how variously We explain the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.), yet they turn aside.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say: \\\"Tell me, if the punishment of Allah comes to you suddenly (during the night), or openly (during the day), will any be destroyed except the Zalimun (polytheists and wrong-doing people)?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 6\n        },\n        \"text\" : \"And We send not the Messengers but as givers of glad tidings and as warners. So whosoever believes and does righteous good deeds, upon such shall come no fear, nor shall they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"I don't tell you that with me are the treasures of Allah, nor (that) I know the unseen; nor I tell you that I am an angel. I but follow what is revealed to me by inspiration.\\\" Say: \\\"Are the blind and the one who sees equal? will you not then take thought?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 6\n        },\n        \"text\" : \"And warn therewith (the Quran) those who fear that they will be gathered before their Lord, when there will be neither a protector nor an intercessor for them besides Him, so that they may fear Allah and keep their duty to Him (by abstaining from committing sins and by doing all kinds of good deeds which He has ordained).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 6\n        },\n        \"text\" : \"Thus We have tried some of them with others, that they might say: \\\"Is it these (poor believers) that Allah has favoured from amongst us?\\\" Does not Allah know best those who are grateful?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 6\n        },\n        \"text\" : \"When those who believe in Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) come to you, say: \\\"Salamun 'Alaikum\\\" (peace be on you); your Lord has written Mercy for Himself, so that, if any of you does evil in ignorance, and thereafter repents and does righteous good deeds (by obeying Allah), then surely, He is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"I have been forbidden to worship those whom you invoke (worship) besides Allah.\\\" Say: \\\"I will not follow your vain desires. If I did, I would go astray, and I would not be one of the rightly guided.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"I am on clear proof from my Lord (Islamic Monotheism), but you deny (the truth that has come to me from Allah). I have not gotten what you are asking for impatiently (the torment). The decision is only for Allah, He declares the truth, and He is the Best of judges.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say: \\\"If I had that which you are asking for impatiently (the torment), the matter would have been settled at once between me and you, but Allah knows best the Zalimun (polytheists and wrong-doers, etc.).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 6\n        },\n        \"text\" : \"And with Him are the keys of the Ghaib (all that is hidden), none knows them but He. And He knows whatever there is in (or on) the earth and in the sea; not a leaf falls, but he knows it. There is not a grain in the darkness of the earth nor anything fresh or dry, but is written in a Clear Record.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 6\n        },\n        \"text\" : \"It is He, Who takes your souls by night (when you are asleep), and has knowledge of all that you have done by day, then he raises (wakes) you up again that a term appointed (your life period) be fulfilled, then in the end unto Him will be your return. Then He will inform you what you used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 6\n        },\n        \"text\" : \"He is the Irresistible, Supreme over His slaves, and He sends guardians (angels guarding and writing all of one's good and bad deeds) over you, until when death approaches one of you, Our Messengers (angel of death and his assistants) take his soul, and they never neglect their duty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 6\n        },\n        \"text\" : \"Then they are returned to Allah, their Maula [True Master (God), the Just Lord (to reward them)]. Surely, His is the judgement and He is the Swiftest in taking account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Who rescues you from the darkness of the land and the sea (dangers like storms), when you call upon Him in humility and in secret (saying): If He (Allah) only saves us from this (danger), we shall truly be grateful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Allah rescues you from it and from all (other) distresses, and yet you worship others besides Allah.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 6\n        },\n        \"text\" : \"Those who fear Allah, keep their duty to Him and avoid evil are not responsible for them (the disbelievers) in any case, but (their duty) is to remind them, that they may avoid that (mockery at the Quran). [The order of this Verse was cancelled (abrogated) by the Verse 4:140].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 6\n        },\n        \"text\" : \"And leave alone those who take their religion as play and amusement, and are deceived by the life of this world. But remind (them) with it (the Quran) lest a person be given up to destruction for that which he has earned, when he will find for himself no protector or intercessor besides Allah, and even if he offers every ransom, it will not be accepted from him. Such are they who are given up to destruction because of that which they have earned. For them will be a drink of boiling water and a painful torment because they used to disbelieve\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Shall we invoke others besides Allah (false deities), that can do us neither good nor harm, and shall we turn on our heels after Allah has guided us (to true Monotheism)? - like one whom the Shayatin (devils) have made to go astray, confused (wandering) through the earth, his companions calling him to guidance (saying): 'Come to us.' \\\" Say: \\\"Verily, Allah's Guidance is the only guidance, and we have been commanded to submit (ourselves) to the Lord of the 'Alamin (mankind, jinns and all that exists);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 6\n        },\n        \"text\" : \"And to perform As-Salat (Iqamat-as-Salat)\\\", and to be obedient to Allah and fear Him, and it is He to Whom you shall be gathered.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 6\n        },\n        \"text\" : \"It is He Who has created the heavens and the earth in truth, and on the Day (i.e. the Day of Resurrection) He will say: \\\"Be!\\\", - and it shall become. His Word is the truth. His will be the dominion on the Day when the trumpet will be blown. All-Knower of the unseen and the seen. He is the All-Wise, Well-Aware (of all things).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 6\n        },\n        \"text\" : \"When he saw the moon rising up, he said: \\\"This is my lord.\\\" But when it set, he said: \\\"Unless my Lord guides me, I shall surely be among the erring people.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 6\n        },\n        \"text\" : \"When he saw the sun rising up, he said: \\\"This is my lord. This is greater.\\\" But when it set, he said: \\\"O my people! I am indeed free from all that you join as partners in worship with Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 6\n        },\n        \"text\" : \"Verily, I have turned my face towards Him Who has created the heavens and the earth Hanifa (Islamic Monotheism, i.e. worshipping none but Allah Alone) and I am not of Al-Mushrikun (see V. 2:105)\\\".\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 6\n        },\n        \"text\" : \"His people disputed with him. He said: \\\"Do you dispute with me concerning Allah while He has guided me, and I fear not those whom you associate with Allah in worship. (Nothing can happen to me) except when my Lord (Allah) wills something. My Lord comprehends in His Knowledge all things. Will you not then remember?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 6\n        },\n        \"text\" : \"And how should I fear those whom you associate in worship with Allah (though they can neither benefit nor harm), while you fear not that you have joined in worship with Allah things for which He has not sent down to you any authority. (So) which of the two parties has more right to be in security? If you but know.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 6\n        },\n        \"text\" : \"It is those who believe (in the Oneness of Allah and worship none but Him Alone) and confuse not their belief with Zulm (wrong i.e. by worshipping others besides Allah), for them (only) there is security and they are the guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 6\n        },\n        \"text\" : \"And that was Our Proof which We gave Ibrahim (Abraham) against his people. We raise whom We will in degrees. Certainly your Lord is All-Wise, All-Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 6\n        },\n        \"text\" : \"This is the Guidance of Allah with which He guides whomsoever He will of His slaves. But if they had joined in worship others with Allah, all that they used to do would have been of no benefit to them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 6\n        },\n        \"text\" : \"They are those whom Allah had guided. So follow their guidance. Say: \\\"No reward I ask of you for this (the Quran). It is only a reminder for the 'Alamin (mankind and jinns).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 6\n        },\n        \"text\" : \"They (the Jews, Quraish pagans, idolaters, etc.) did not estimate Allah with an estimation due to Him when they said: \\\"Nothing did Allah send down to any human being (by inspiration).\\\" Say (O Muhammad SAW): \\\"Who then sent down the Book which Musa (Moses) brought, a light and a guidance to mankind which you (the Jews) have made into (separate) papersheets, disclosing (some of it) and concealing (much). And you (believers in Allah and His Messenger Muhammad SAW), were taught (through the Quran) that which neither you nor your fathers knew.\\\" Say: \\\"Allah (sent it down).\\\" Then leave them to play in their vain discussions. (Tafsir Al-Qurtubi, Vol. 7, Page 37).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 6\n        },\n        \"text\" : \"And this (the Quran) is a blessed Book which We have sent down, confirming (the revelations) which came before it, so that you may warn the Mother of Towns (i.e. Makkah) and all those around it. Those who believe in the Hereafter believe in (the Quran), and they are constant in guarding their Salat (prayers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 6\n        },\n        \"text\" : \"And who can be more unjust than he who invents a lie against Allah, or says: \\\"I have received inspiration,\\\" whereas he is not inspired in anything; and who says, \\\"I will reveal the like of what Allah has revealed.\\\" And if you could but see when the Zalimun (polytheists and wrong-doers, etc.) are in the agonies of death, while the angels are stretching forth their hands (saying): \\\"Deliver your souls! This day you shall be recompensed with the torment of degradation because of what you used to utter against Allah other than the truth. And you used to reject His Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) with disrespect!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 6\n        },\n        \"text\" : \"And truly you have come unto Us alone (without wealth, companions or anything else) as We created you the first time. You have left behind you all that which We had bestowed on you. We see not with you your intercessors whom you claimed to be partners with Allah. Now all relations between you and them have been cut off, and all that you used to claim has vanished from you.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 6\n        },\n        \"text\" : \"Verily! It is Allah Who causes the seed-grain and the fruit-stone (like date-stone, etc.) to split and sprout. He brings forth the living from the dead, and it is He Who brings forth the dead from the living. Such is Allah, then how are you deluded away from the truth?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 6\n        },\n        \"text\" : \"(He is the) Cleaver of the daybreak. He has appointed the night for resting, and the sun and the moon for reckoning. Such is the measuring of the All-Mighty, the All-Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 6\n        },\n        \"text\" : \"It is He Who sends down water (rain) from the sky, and with it We bring forth vegetation of all kinds, and out of it We bring forth green stalks, from which We bring forth thick clustered grain. And out of the date-palm and its spathe come forth clusters of dates hanging low and near, and gardens of grapes, olives and pomegranates, each similar (in kind) yet different (in variety and taste). Look at their fruits when they begin to bear, and the ripeness thereof. Verily! In these things there are signs for people who believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 100,\n          \"sura\" : 6\n        },\n        \"text\" : \"Yet, they join the jinns as partners in worship with Allah, though He has created them (the jinns), and they attribute falsely without knowledge sons and daughters to Him. Be He Glorified and Exalted above (all) that they attribute to Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 6\n        },\n        \"text\" : \"He is the Originator of the heavens and the earth. How can He have children when He has no wife? He created all things and He is the All-Knower of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 6\n        },\n        \"text\" : \"Such is Allah, your Lord! La ilaha illa Huwa (none has the right to be worshipped but He), the Creator of all things. So worship Him (Alone), and He is the Wakil (Trustee, Disposer of affairs, Guardian, etc.) over all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 6\n        },\n        \"text\" : \"No vision can grasp Him, but His Grasp is over all vision. He is the Most Subtle and Courteous, Well-Acquainted with all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 6\n        },\n        \"text\" : \"Had Allah willed, they would not have taken others besides Him in worship. And We have not made you a watcher over them nor are you set over them to dispose of their affairs.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 6\n        },\n        \"text\" : \"And insult not those whom they (disbelievers) worship besides Allah, lest they insult Allah wrongfully without knowledge. Thus We have made fair-seeming to each people its own doings; then to their Lord is their return and He shall then inform them of all that they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 6\n        },\n        \"text\" : \"And they swear their strongest oaths by Allah, that if there came to them a sign, they would surely believe therein. Say: \\\"Signs are but with Allah and what will make you (Muslims) perceive that (even) if it (the sign) came, they will not believe?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 6\n        },\n        \"text\" : \"And We shall turn their hearts and their eyes away (from guidance), as they refused to believe therein for the first time, and We shall leave them in their trespass to wander blindly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 6\n        },\n        \"text\" : \"And even if We had sent down unto them angels, and the dead had spoken unto them, and We had gathered together all things before their very eyes, they would not have believed, unless Allah willed, but most of them behave ignorantly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 113,\n          \"sura\" : 6\n        },\n        \"text\" : \"(And this is in order) that the hearts of those who disbelieve in the Hereafter may incline to such (deceit), and that they may remain pleased with it, and that they may commit what they are committing (all kinds of sins and evil deeds, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 6\n        },\n        \"text\" : \"[Say (O Muhammad SAW)] \\\"Shall I seek a judge other than Allah while it is He Who has sent down unto you the Book (The Quran), explained in detail.\\\" Those unto whom We gave the Scripture [the Taurat (Torah) and the Injeel (Gospel)] know that it is revealed from your Lord in truth. So be not you of those who doubt.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 115,\n          \"sura\" : 6\n        },\n        \"text\" : \"And the Word of your Lord has been fulfilled in truth and in justice. None can change His Words. And He is the All-Hearer, the All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 6\n        },\n        \"text\" : \"And if you obey most of those on earth, they will mislead you far away from Allah's Path. They follow nothing but conjectures, and they do nothing but lie.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 118,\n          \"sura\" : 6\n        },\n        \"text\" : \"So eat of that (meat) on which Allah's Name has been pronounced (while slaughtering the animal), if you are believers in His Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 119,\n          \"sura\" : 6\n        },\n        \"text\" : \"And why should you not eat of that (meat) on which Allah's Name has been pronounced (at the time of slaughtering the animal), while He has explained to you in detail what is forbidden to you, except under compulsion of necessity? And surely many do lead (mankind) astray by their own desires through lack of knowledge. Certainly your Lord knows best the transgressors.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 120,\n          \"sura\" : 6\n        },\n        \"text\" : \"Leave (O mankind, all kinds of) sin, open and secret. Verily, those who commit sin will get due recompense for that which they used to commit.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 121,\n          \"sura\" : 6\n        },\n        \"text\" : \"Eat not (O believers) of that (meat) on which Allah's Name has not been pronounced (at the time of the slaughtering of the animal), for sure it is Fisq (a sin and disobedience of Allah). And certainly, the Shayatin (devils) do inspire their friends (from mankind) to dispute with you, and if you obey them [by making Al-Maytatah (a dead animal) legal by eating it], then you would indeed be Mushrikun (polytheists) [because they (devils and their friends) made lawful to you to eat that which Allah has made unlawful to eat and you obeyed them by considering it lawful to eat, and by doing so you worshipped them, and to worship others besides Allah is polytheism].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 124,\n          \"sura\" : 6\n        },\n        \"text\" : \"And when there comes to them a sign (from Allah) they say: \\\"We shall not believe until we receive the like of that which the Messengers of Allah had received.\\\" Allah knows best with whom to place His Message. Humiliation and disgrace from Allah and a severe torment will overtake the criminals (polytheists, sinners, etc.) for that which they used to plot.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 125,\n          \"sura\" : 6\n        },\n        \"text\" : \"And whomsoever Allah wills to guide, He opens his breast to Islam, and whomsoever He wills to send astray, He makes his breast closed and constricted, as if he is climbing up to the sky. Thus Allah puts the wrath on those who believe not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 128,\n          \"sura\" : 6\n        },\n        \"text\" : \"And on the Day when He will gather them (all) together (and say): \\\"O you assembly of jinns! Many did you mislead of men,\\\" and their Auliya' (friends and helpers, etc.) amongst men will say: \\\"Our Lord! We benefited one from the other, but now we have reached our appointed term which You did appoint for us.\\\" He will say: \\\"The Fire be your dwelling-place, you will dwell therein forever, except as Allah may will. Certainly your Lord is All-Wise, All-Knowing.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 131,\n          \"sura\" : 6\n        },\n        \"text\" : \"This is because your Lord would not destroy the (populations of) towns for their wrong-doing (i.e. associating others in worship along with Allah) while their people were unaware (so the Messengers were sent).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 132,\n          \"sura\" : 6\n        },\n        \"text\" : \"For all there will be degrees (or ranks) according to what they did. And your Lord is not unaware of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 133,\n          \"sura\" : 6\n        },\n        \"text\" : \"And your Lord is Rich (Free of all wants), full of Mercy, if He will, He can destroy you, and in your place make whom He will as your successors, as He raised you from the seed of other people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 134,\n          \"sura\" : 6\n        },\n        \"text\" : \"Surely, that which you are promised will verily come to pass, and you cannot escape (from the Punishment of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 136,\n          \"sura\" : 6\n        },\n        \"text\" : \"And they assign to Allah a share of the tilth and cattle which He has created, and they say: \\\"This is for Allah according to their pretending, and this is for our (Allah's so-called) partners.\\\" But the share of their (Allah's so-called) \\\"partners\\\" reaches not Allah, while the share of Allah reaches their (Allah's so-called) \\\"partners\\\"! Evil is the way they judge!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 137,\n          \"sura\" : 6\n        },\n        \"text\" : \"And so to many of the Mushrikun (polytheists - see V. 2:105) their (Allah's so-called) \\\"partners\\\" have made fair-seeming the killing of their children, in order to lead them to their own destruction and cause confusion in their religion. And if Allah had willed they would not have done so. So leave them alone with their fabrications.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 138,\n          \"sura\" : 6\n        },\n        \"text\" : \"And according to their pretending, they say that such and such cattle and crops are forbidden, and none should eat of them except those whom we allow. And (they say) there are cattle forbidden to be used for burden or any other work, and cattle on which (at slaughtering) the Name of Allah is not pronounced; lying against Him (Allah). He will recompense them for what they used to fabricate.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 139,\n          \"sura\" : 6\n        },\n        \"text\" : \"And they say: \\\"What is in the bellies of such and such cattle (milk or foetus) is for our males alone, and forbidden to our females (girls and women), but if it is born dead, then all have shares therein.\\\" He will punish them for their attribution (of such false orders to Allah). Verily, He is All-Wise, All-Knower. (Tafsir At-Tabari, Vol. 8, Page 49).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 140,\n          \"sura\" : 6\n        },\n        \"text\" : \"Indeed lost are they who have killed their children, from folly, without knowledge, and have forbidden that which Allah has provided for them, inventing a lie against Allah. They have indeed gone astray and were not guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 141,\n          \"sura\" : 6\n        },\n        \"text\" : \"And it is He Who produces gardens trellised and untrellised, and date-palms, and crops of different shape and taste (its fruits and its seeds) and olives, and pomegranates, similar (in kind) and different (in taste). Eat of their fruit when they ripen, but pay the due thereof (its Zakat, according to Allah's Orders 1\\/10th or 1\\/20th) on the day of its harvest, and waste not by extravagance. Verily, He likes not Al-Musrifun (those who waste by extravagance),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 142,\n          \"sura\" : 6\n        },\n        \"text\" : \"And of the cattle (are some) for burden (like camels etc.) and (some are) small (unable to carry burden like sheep, goats etc. for food, meat, milk, wool etc.). Eat of what Allah has provided for you, and follow not the footsteps of Shaitan (Satan). Surely he is to you an open enemy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 144,\n          \"sura\" : 6\n        },\n        \"text\" : \"And of the camels two (male and female), and of oxen two (male and female). Say: \\\"Has He forbidden the two males or the two females or (the young) which the wombs of the two females enclose? Or were you present when Allah ordered you such a thing? Then who does more wrong than one who invents a lie against Allah, to lead mankind astray without knowledge. Certainly Allah guides not the people who are Zalimun (polytheists and wrong-doers, etc.).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 145,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"I find not in that which has been inspired to me anything forbidden to be eaten by one who wishes to eat it, unless it be Maytatah (a dead animal) or blood poured forth (by slaughtering or the like), or the flesh of swine (pork, etc.) for that surely is impure, or impious (unlawful) meat (of an animal) which is slaughtered as a sacrifice for others than Allah (or has been slaughtered for idols, etc., or on which Allah's Name has not been mentioned while slaughtering). But whosoever is forced by necessity without wilful disobedience, nor transgressing due limits, (for him) certainly, your Lord is Oft-Forgiving, Most Merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 148,\n          \"sura\" : 6\n        },\n        \"text\" : \"Those who took partners (in worship) with Allah will say: \\\"If Allah had willed, we would not have taken partners (in worship) with Him, nor would our fathers, and we would not have forbidden anything (against His Will).\\\" Likewise belied those who were before them, (they argued falsely with Allah's Messengers), till they tasted of Our Wrath. Say: \\\"Have you any knowledge (proof) that you can produce before us? Verily, you follow nothing but guess and you do nothing but lie.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 149,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say: \\\"With Allah is the perfect proof and argument, (i.e. the Oneness of Allah, the sending of His Messengers and His Holy Books, etc. to mankind), had He so willed, He would indeed have guided you all.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 150,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say: \\\"Bring forward your witnesses, who can testify that Allah has forbidden this. Then if they testify, testify not you (O Muhammad SAW) with them. And you should not follow the vain desires of such as treat Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) as falsehoods, and such as believe not in the Hereafter, and they hold others as equal (in worship) with their Lord.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 151,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Come, I will recite what your Lord has prohibited you from: Join not anything in worship with Him; be good and dutiful to your parents; kill not your children because of poverty - We provide sustenance for you and for them; come not near to Al-Fawahish (shameful sins, illegal sexual intercourse, etc.) whether committed openly or secretly, and kill not anyone whom Allah has forbidden, except for a just cause (according to Islamic law). This He has commanded you that you may understand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 152,\n          \"sura\" : 6\n        },\n        \"text\" : \"\\\"And come not near to the orphan's property, except to improve it, until he (or she) attains the age of full strength; and give full measure and full weight with justice. We burden not any person, but that which he can bear. And whenever you give your word (i.e. judge between men or give evidence, etc.), say the truth even if a near relative is concerned, and fulfill the Covenant of Allah, This He commands you, that you may remember.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 153,\n          \"sura\" : 6\n        },\n        \"text\" : \"\\\"And verily, this (i.e. Allah's Commandments mentioned in the above two Verses 151 and 152) is my Straight Path, so follow it, and follow not (other) paths, for they will separate you away from His Path. This He has ordained for you that you may become Al-Muttaqun (the pious - see V. 2:2).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 154,\n          \"sura\" : 6\n        },\n        \"text\" : \"Then, We gave Musa (Moses) the Book [the Taurat (Torah)], to complete (Our Favour) upon those who would do right, and explaining all things in detail and a guidance and a mercy that they might believe in the meeting with their Lord.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 155,\n          \"sura\" : 6\n        },\n        \"text\" : \"And this is a blessed Book (the Quran) which We have sent down, so follow it and fear Allah (i.e. do not disobey His Orders), that you may receive mercy (i.e. saved from the torment of Hell).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 157,\n          \"sura\" : 6\n        },\n        \"text\" : \"Or lest you (pagan Arabs) should say: \\\"If only the Book had been sent down to us, we would surely have been better guided than they (Jews and Christians).\\\" So now has come unto you a clear proof (the Quran) from your Lord, and a guidance and a mercy. Who then does more wrong than one who rejects the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah and turns away therefrom? We shall requite those who turn away from Our Ayat with an evil torment, because of their turning away (from them). [Tafsir At-Tabari, Vol. 8, Page 95]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 159,\n          \"sura\" : 6\n        },\n        \"text\" : \"Verily, those who divide their religion and break up into sects (all kinds of religious sects), you (O Muhammad SAW) have no concern in them in the least. Their affair is only with Allah, Who then will tell them what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 160,\n          \"sura\" : 6\n        },\n        \"text\" : \"Whoever brings a good deed (Islamic Monotheism and deeds of obedience to Allah and His Messenger SAW) shall have ten times the like thereof to his credit, and whoever brings an evil deed (polytheism, disbelief, hypocrisy, and deeds of disobedience to Allah and His Messenger SAW) shall have only the recompense of the like thereof, and they will not be wronged.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 161,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Truly, my Lord has guided me to a Straight Path, a right religion, the religion of Ibrahim (Abraham), Hanifa [i.e. the true Islamic Monotheism - to believe in One God (Allah i.e. to worship none but Allah, Alone)] and he was not of Al-Mushrikun (see V. 2:105).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 162,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Verily, my Salat (prayer), my sacrifice, my living, and my dying are for Allah, the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 164,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say: \\\"Shall I seek a lord other than Allah, while He is the Lord of all things? No person earns any (sin) except against himself (only), and no bearer of burdens shall bear the burden of another. Then unto your Lord is your return, so He will tell you that wherein you have been differing.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 7\n        },\n        \"text\" : \"Alif-Lam-Mim-Sad. [These letters are one of the miracles of the Quran and none but Allah (Alone) knows their meanings].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 7\n        },\n        \"text\" : \"[Say (O Muhammad SAW) to these idolaters (pagan Arabs) of your folk:] Follow what has been sent down unto you from your Lord (the Quran and Prophet Muhammad's Sunnah), and follow not any Auliya' (protectors and helpers, etc. who order you to associate partners in worship with Allah), besides Him (Allah). Little do you remember!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 7\n        },\n        \"text\" : \"Then surely, We shall question those (people) to whom it (the Book) was sent and verily, We shall question the Messengers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 7\n        },\n        \"text\" : \"Then surely, We shall narrate unto them (their whole story) with knowledge, and indeed We were not absent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 7\n        },\n        \"text\" : \"(Allah) said: \\\"What prevented you (O Iblis) that you did not prostrate, when I commanded you?\\\" Iblis said: \\\"I am better than him (Adam), You created me from fire, and him You created from clay.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 7\n        },\n        \"text\" : \"(Allah) said: \\\"(O Iblis) get down from this (Paradise), it is not for you to be arrogant here. Get out, for you are of those humiliated and disgraced.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 7\n        },\n        \"text\" : \"(Iblis) said: \\\"Allow me respite till the Day they are raised up (i.e. the Day of Resurrection).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 7\n        },\n        \"text\" : \"(Allah) said: \\\"You are of those allowed respite.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 7\n        },\n        \"text\" : \"(Allah) said (to Iblis) \\\"Get out from this (Paradise) disgraced and expelled. Whoever of them (mankind) will follow you, then surely I will fill Hell with you all.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 7\n        },\n        \"text\" : \"And he [Shaitan (Satan)] swore by Allah to them both (saying): \\\"Verily, I am one of the sincere well-wishers for you both.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 7\n        },\n        \"text\" : \"So he misled them with deception. Then when they tasted of the tree, that which was hidden from them of their shame (private parts) became manifest to them and they began to stick together the leaves of Paradise over themselves (in order to cover their shame). And their Lord called out to them (saying): \\\"Did I not forbid you that tree and tell you: Verily, Shaitan (Satan) is an open enemy unto you?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 7\n        },\n        \"text\" : \"They said: \\\"Our Lord! We have wronged ourselves. If You forgive us not, and bestow not upon us Your Mercy, we shall certainly be of the losers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 7\n        },\n        \"text\" : \"(Allah) said: \\\"Get down, one of you an enemy to the other [i.e. Adam, Hawwa (Eve), and Shaitan (Satan), etc.]. On earth will be a dwelling-place for you and an enjoyment, - for a time.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 7\n        },\n        \"text\" : \"He said: \\\"Therein you shall live, and therein you shall die, and from it you shall be brought out (i.e. resurrected).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 7\n        },\n        \"text\" : \"O Children of Adam! We have bestowed raiment upon you to cover yourselves (screen your private parts, etc.) and as an adornment, and the raiment of righteousness, that is better. Such are among the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah, that they may remember (i.e. leave falsehood and follow truth).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 7\n        },\n        \"text\" : \"And when they commit a Fahisha (evil deed, going round the Ka'bah in naked state, every kind of unlawful sexual intercourse, etc.), they say: \\\"We found our fathers doing it, and Allah has commanded us of it.\\\" Say: \\\"Nay, Allah never commands of Fahisha. Do you say of Allah what you know not?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 7\n        },\n        \"text\" : \"Say (O Muhammad SAW): My Lord has commanded justice and (said) that you should face Him only (i.e. worship none but Allah and face the Qiblah, i.e. the Ka'bah at Makkah during prayers) in each and every place of worship, in prayers (and not to face other false deities and idols), and invoke Him only making your religion sincere to Him by not joining in worship any partner to Him and with the intention that you are doing your deeds for Allah's sake only. As He brought you (into being) in the beginning, so shall you be brought into being (on the Day of Resurrection) [in two groups, one as a blessed one (believers), and the other as a wretched one (disbelievers)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 7\n        },\n        \"text\" : \"A group He has guided, and a group deserved to be in error; (because) surely they took the Shayatin (devils) as Auliya' (protectors and helpers) instead of Allah, and consider that they are guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 7\n        },\n        \"text\" : \"O Children of Adam! Take your adornment (by wearing your clean clothes), while praying and going round (the Tawaf of) the Ka'bah, and eat and drink but waste not by extravagance, certainly He (Allah) likes not Al-Musrifun (those who waste by extravagance).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 7\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Who has forbidden the adoration with clothes given by Allah, which He has produced for his slaves, and At-Taiyibat [all kinds of Halal (lawful) things] of food?\\\" Say: \\\"They are, in the life of this world, for those who believe, (and) exclusively for them (believers) on the Day of Resurrection (the disbelievers will not share them).\\\" Thus We explain the Ayat (Islamic laws) in detail for people who have knowledge.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 7\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"(But) the things that my Lord has indeed forbidden are Al-Fawahish (great evil sins, every kind of unlawful sexual intercourse, etc.) whether committed openly or secretly, sins (of all kinds), unrighteous oppression, joining partners (in worship) with Allah for which He has given no authority, and saying things about Allah of which you have no knowledge.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 7\n        },\n        \"text\" : \"O Children of Adam! If there come to you Messengers from amongst you, reciting to you, My Verses, then whosoever becomes pious and righteous, on them shall be no fear, nor shall they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 7\n        },\n        \"text\" : \"Who is more unjust than one who invents a lie against Allah or rejects His Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.)? For such their appointed portion (good things of this worldly life and their period of stay therein) will reach them from the Book (of Decrees) until, when Our Messengers (the angel of death and his assistants) come to them to take their souls, they (the angels) will say: \\\"Where are those whom you used to invoke and worship besides Allah,\\\" they will reply, \\\"They have vanished and deserted us.\\\" And they will bear witness against themselves, that they were disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 7\n        },\n        \"text\" : \"(Allah) will say: \\\"Enter you in the company of nations who passed away before you, of men and jinns, into the Fire.\\\" Every time a new nation enters, it curses its sister nation (that went before), until they will be gathered all together in the Fire. The last of them will say to the first of them: \\\"Our Lord! These misled us, so give them a double torment of the Fire.\\\" He will say: \\\"For each one there is double (torment), but you know not.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 7\n        },\n        \"text\" : \"But those who believed (in the Oneness of Allah - Islamic Monotheism), and worked righteousness - We tax not any person beyond his scope, such are the dwellers of Paradise. They will abide therein.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 7\n        },\n        \"text\" : \"And We shall remove from their breasts any (mutual) hatred or sense of injury (which they had, if at all, in the life of this world); rivers flowing under them, and they will say: \\\"All the praises and thanks be to Allah, Who has guided us to this, never could we have found guidance, were it not that Allah had guided us! Indeed, the Messengers of our Lord did come with the truth.\\\" And it will be cried out to them: \\\"This is the Paradise which you have inherited for what you used to do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 7\n        },\n        \"text\" : \"And the dwellers of Paradise will call out to the dwellers of the Fire (saying): \\\"We have indeed found true what our Lord had promised us; have you also found true, what your Lord promised (warnings, etc.)?\\\" They shall say: \\\"Yes.\\\" Then a crier will proclaim between them: \\\"The Curse of Allah is on the Zalimun (polytheists and wrong-doers, etc.),\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 7\n        },\n        \"text\" : \"Those who hindered (men) from the Path of Allah, and would seek to make it crooked, and they were disbelievers in the Hereafter.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 7\n        },\n        \"text\" : \"And between them will be a barrier screen and on Al-A'raf (a wall with elevated places) will be men (whose good and evil deeds would be equal in scale), who would recognise all (of the Paradise and Hell people), by their marks (the dwellers of Paradise by their white faces and the dwellers of Hell by their black faces), they will call out to the dwellers of Paradise, \\\"Salamun 'Alaikum\\\" (peace be on you), and at that time they (men on Al-A'raf) will not yet have entered it (Paradise), but they will hope to enter (it) with certainty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 7\n        },\n        \"text\" : \"And the men on Al-A'raf (the wall) will call unto the men whom they would recognise by their marks, saying: \\\"Of what benefit to you were your great numbers (and hoards of wealth), and your arrogance against Faith?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 7\n        },\n        \"text\" : \"Are they those, of whom you swore that Allah would never show them mercy. (Behold! It has been said to them): \\\"Enter Paradise, no fear shall be on you, nor shall you grieve.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 7\n        },\n        \"text\" : \"And the dwellers of the Fire will call to the dwellers of Paradise: \\\"Pour on us some water or anything that Allah has provided you with.\\\" They will say: \\\"Both (water and provision) Allah has forbidden to the disbelievers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 7\n        },\n        \"text\" : \"\\\"Who took their religion as an amusement and play, and the life of the world deceived them.\\\" So this Day We shall forget them as they forgot their meeting of this Day, and as they used to reject Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 7\n        },\n        \"text\" : \"Await they just for the final fulfillment of the event? On the Day the event is finally fulfilled (i.e. the Day of Resurrection), those who neglected it before will say: \\\"Verily, the Messengers of our Lord did come with the truth, now are there any intercessors for us that they might intercede on our behalf? Or could we be sent back (to the first life of the world) so that we might do (good) deeds other than those (evil) deeds which we used to do?\\\" Verily, they have lost their ownselves (i.e. destroyed themselves) and that which they used to fabricate (invoking and worshipping others besides Allah) has gone away from them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 7\n        },\n        \"text\" : \"Indeed your Lord is Allah, Who created the heavens and the earth in Six Days, and then He Istawa (rose over) the Throne (really in a manner that suits His Majesty). He brings the night as a cover over the day, seeking it rapidly, and (He created) the sun, the moon, the stars subjected to His Command. Surely, His is the Creation and Commandment. Blessed be Allah, the Lord of the 'Alamin (mankind, jinns and all that exists)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 7\n        },\n        \"text\" : \"And do not do mischief on the earth, after it has been set in order, and invoke Him with fear and hope; Surely, Allah's Mercy is (ever) near unto the good-doers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 7\n        },\n        \"text\" : \"And it is He Who sends the winds as heralds of glad tidings, going before His Mercy (rain). Till when they have carried a heavy-laden cloud, We drive it to a land that is dead, then We cause water (rain) to descend thereon. Then We produce every kind of fruit therewith. Similarly, We shall raise up the dead, so that you may remember or take heed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 7\n        },\n        \"text\" : \"Indeed, We sent Nuh (Noah) to his people and he said: \\\"O my people! Worship Allah! You have no other Ilah (God) but Him. (La ilaha ill-Allah: none has the right to be worshipped but Allah). Certainly, I fear for you the torment of a Great Day!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 7\n        },\n        \"text\" : \"[Nuh (Noah)] said: \\\"O my people! There is no error in me, but I am a Messenger from the Lord of the 'Alamin (mankind, jinns and all that exists)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 7\n        },\n        \"text\" : \"\\\"I convey unto you the Messages of my Lord and give sincere advice to you. And I know from Allah what you know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 7\n        },\n        \"text\" : \"\\\"Do you wonder that there has come to you a Reminder from your Lord through a man from amongst you, that he may warn you, so that you may fear Allah and that you may receive (His) Mercy?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 7\n        },\n        \"text\" : \"And to 'Ad (people, We sent) their brother Hud. He said: \\\"O my people! Worship Allah! You have no other Ilah (God) but Him. (La ilaha ill-Allah: none has the right to be worshipped but Allah). Will you not fear (Allah)?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 7\n        },\n        \"text\" : \"(Hud) said: \\\"O my people! There is no foolishness in me, but (I am) a Messenger from the Lord of the 'Alamin (mankind, jinns and all that exists)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 7\n        },\n        \"text\" : \"\\\"Do you wonder that there has come to you a Reminder (and an advice) from your Lord through a man from amongst you that he may warn you? And remember that He made you successors after the people of Nuh (Noah), and increased you amply in stature. So remember the graces (bestowed upon you) from Allah, so that you may be successful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 7\n        },\n        \"text\" : \"They said: \\\"You have come to us that we should worship Allah Alone and forsake that which our fathers used to worship. So bring us that wherewith you have threatened us if you are of the truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 7\n        },\n        \"text\" : \"(Hud) said: \\\"Torment and wrath have already fallen on you from your Lord. Dispute you with me over names which you have named - you and your fathers, with no authority from Allah? Then wait, I am with you among those who wait.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 7\n        },\n        \"text\" : \"And to Thamud (people, We sent) their brother Salih (Saleh). He said: \\\"O my people! Worship Allah! You have no other Ilah (God) but Him. (La ilaha ill-Allah: none has the right to be worshipped but Allah). Indeed there has come to you a clear sign (the miracle of the coming out of a huge she-camel from the midst of a rock) from your Lord. This she-camel of Allah is a sign unto you; so you leave her to graze in Allah's earth, and touch her not with harm, lest a painful torment should seize you.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 7\n        },\n        \"text\" : \"\\\"And remember when He made you successors after 'Ad (people) and gave you habitations in the land, you build for yourselves palaces in plains, and carve out homes in the mountains. So remember the graces (bestowed upon you) from Allah, and do not go about making mischief on the earth.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 7\n        },\n        \"text\" : \"So they killed the she-camel and insolently defied the Commandment of their Lord, and said: \\\"O Salih (Saleh)! Bring about your threats if you are indeed one of the Messengers (of Allah).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 7\n        },\n        \"text\" : \"And to (the people of) Madyan (Midian), (We sent) their brother Shu'aib. He said: \\\"O my people! Worship Allah! You have no other Ilah (God) but Him. [La ilaha ill-Allah (none has the right to be worshipped but Allah)].\\\" Verily, a clear proof (sign) from your Lord has come unto you; so give full measure and full weight and wrong not men in their things, and do not mischief on the earth after it has been set in order, that will be better for you, if you are believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 7\n        },\n        \"text\" : \"\\\"And sit not on every road, threatening, and hindering from the Path of Allah those who believe in Him. and seeking to make it crooked. And remember when you were but few, and He multiplied you. And see what was the end of the Mufsidun (mischief-makers, corrupts, liars).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 7\n        },\n        \"text\" : \"\\\"And if there is a party of you who believes in that with which I have been sent and a party who do not believe, so be patient until Allah judges between us, and He is the Best of judges.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 7\n        },\n        \"text\" : \"The chiefs of those who were arrogant among his people said: \\\"We shall certainly drive you out, O Shu'aib, and those who have believed with you from our town, or else you (all) shall return to our religion.\\\" He said: \\\"Even though we hate it!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 7\n        },\n        \"text\" : \"\\\"We should have invented a lie against Allah if we returned to your religion, after Allah has rescued us from it. And it is not for us to return to it unless Allah, our Lord, should will. Our Lord comprehends all things in His Knowledge. In Allah (Alone) we put our trust. Our Lord! Judge between us and our people in truth, for You are the Best of those who give judgment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 7\n        },\n        \"text\" : \"And We sent no Prophet unto any town (and they denied him), but We seized its people with suffering from extreme poverty (or loss in wealth) and loss of health and calamities, so that they might humiliate themselves (and repent to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 7\n        },\n        \"text\" : \"Did they then feel secure against the Plan of Allah. None feels secure from the Plan of Allah except the people who are the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 7\n        },\n        \"text\" : \"Those were the towns whose story We relate unto you (O Muhammad SAW). And there came indeed to them their Messengers with clear proofs, but they were not such as to believe in that which they had rejected before. Thus Allah does seal up the hearts of the disbelievers (from each and every kind of religious guidance).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 7\n        },\n        \"text\" : \"And most of them We found not (true) to their covenant, but most of them We found indeed Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 7\n        },\n        \"text\" : \"And Musa (Moses) said: \\\"O Fir'aun (Pharaoh)! I am a Messenger from the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 7\n        },\n        \"text\" : \"\\\"Proper it is for me that I say nothing concerning Allah but the truth. Indeed I have come unto you from your Lord with a clear proof. So let the Children of Israel depart along with me.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 7\n        },\n        \"text\" : \"They said: \\\"Put him and his brother off (for a time), and send callers (men) to the cities to collect (and) -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 7\n        },\n        \"text\" : \"\\\"That they bring up to you all well-versed sorcerers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 115,\n          \"sura\" : 7\n        },\n        \"text\" : \"They said: \\\"O Musa (Moses)! Either you throw (first), or shall we have the (first) throw?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 117,\n          \"sura\" : 7\n        },\n        \"text\" : \"And We inspired Musa (Moses) (saying): \\\"Throw your stick,\\\" and behold! It swallowed up straight away all the falsehoods which they showed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 118,\n          \"sura\" : 7\n        },\n        \"text\" : \"Thus truth was confirmed, and all that they did was made of no effect.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 121,\n          \"sura\" : 7\n        },\n        \"text\" : \"They said: \\\"We believe in the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 123,\n          \"sura\" : 7\n        },\n        \"text\" : \"Fir'aun (Pharaoh) said: \\\"You have believed in him [Musa (Moses)] before I give you permission. Surely, this is a plot which you have plotted in the city to drive out its people, but you shall come to know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 124,\n          \"sura\" : 7\n        },\n        \"text\" : \"\\\"Surely, I will cut off your hands and your feet on opposite sides, then I will crucify you all.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 128,\n          \"sura\" : 7\n        },\n        \"text\" : \"Musa (Moses) said to his people: \\\"Seek help in Allah and be patient. Verily, the earth is Allah's. He gives it as a heritage to whom He will of His slaves, and the (blessed) end is for the Muttaqun (pious - see V. 2:2).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 131,\n          \"sura\" : 7\n        },\n        \"text\" : \"But whenever good came to them, they said: \\\"Ours is this.\\\" And if evil afflicted them, they ascribed it to evil omens connected with Musa (Moses) and those with him. Be informed! Verily, their evil omens are with Allah but most of them know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 132,\n          \"sura\" : 7\n        },\n        \"text\" : \"They said [to Musa (Moses)]: \\\"Whatever Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) you may bring to us, to work therewith your sorcery on us, we shall never believe in you.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 134,\n          \"sura\" : 7\n        },\n        \"text\" : \"And when the punishment fell on them they said: \\\"O Musa (Moses)! Invoke your Lord for us because of His Promise to you. If you will remove the punishment from us, we indeed shall believe in you, and we shall let the Children of Israel go with you.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 137,\n          \"sura\" : 7\n        },\n        \"text\" : \"And We made the people who were considered weak to inherit the eastern parts of the land and the western parts thereof which We have blessed. And the fair Word of your Lord was fulfilled for the Children of Israel, because of their endurance. And We destroyed completely all the great works and buildings which Fir'aun (Pharaoh) and his people erected.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 138,\n          \"sura\" : 7\n        },\n        \"text\" : \"And We brought the Children of Israel (with safety) across the sea, and they came upon a people devoted to some of their idols (in worship). They said: \\\"O Musa (Moses)! Make for us an ilahan (a god) as they have aliha (gods).\\\" He said: \\\"Verily, you are a people who know not (the Majesty and Greatness of Allah and what is obligatory upon you, i.e. to worship none but Allah Alone, the One and the Only God of all that exists).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 139,\n          \"sura\" : 7\n        },\n        \"text\" : \"[Musa (Moses) added:] \\\"Verily, these people will be destroyed for that which they are engaged in (idols-worship). And all that they are doing is in vain.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 140,\n          \"sura\" : 7\n        },\n        \"text\" : \"He said: \\\"Shall I seek for you an Ilahan (a God) other than Allah, while He has given you superiority over the 'Alamin (mankind and jinns of your time).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 142,\n          \"sura\" : 7\n        },\n        \"text\" : \"And We appointed for Musa (Moses) thirty nights and added (to the period) ten (more), and he completed the term, appointed by his Lord, of forty nights. And Musa (Moses) said to his brother Harun (Aaron): \\\"Replace me among my people, act in the Right Way (by ordering the people to obey Allah and to worship Him Alone) and follow not the way of the Mufsidun (mischief-makers).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 143,\n          \"sura\" : 7\n        },\n        \"text\" : \"And when Musa (Moses) came at the time and place appointed by Us, and his Lord spoke to him, he said: \\\"O my Lord! Show me (Yourself), that I may look upon You.\\\" Allah said: \\\"You cannot see Me, but look upon the mountain if it stands still in its place then you shall see Me.\\\" So when his Lord appeared to the mountain, He made it collapse to dust, and Musa (Moses) fell down unconscious. Then when he recovered his senses he said: \\\"Glory be to You, I turn to You in repentance and I am the first of the believers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 144,\n          \"sura\" : 7\n        },\n        \"text\" : \"(Allah) said: \\\"O Musa (Moses) I have chosen you above men by My Messages, and by My speaking (to you). So hold that which I have given you and be of the grateful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 145,\n          \"sura\" : 7\n        },\n        \"text\" : \"And We wrote for him on the Tablets the lesson to be drawn from all things and the explanation of all things (and said): Hold unto these with firmness, and enjoin your people to take the better therein. I shall show you the home of Al-Fasiqun (the rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 146,\n          \"sura\" : 7\n        },\n        \"text\" : \"I shall turn away from My Ayat (verses of the Quran) those who behave arrogantly on the earth, without a right, and (even) if they see all the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.), they will not believe in them. And if they see the way of righteousness (monotheism, piety, and good deeds), they will not adopt it as the Way, but if they see the way of error (polytheism, crimes and evil deeds), they will adopt that way, that is because they have rejected Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) and were heedless (to learn a lesson) from them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 149,\n          \"sura\" : 7\n        },\n        \"text\" : \"And when they regretted and saw that they had gone astray, they (repented and) said: \\\"If our Lord have not mercy upon us and forgive us, we shall certainly be of the losers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 153,\n          \"sura\" : 7\n        },\n        \"text\" : \"But those who committed evil deeds and then repented afterwards and believed, verily, your Lord after (all) that is indeed Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 156,\n          \"sura\" : 7\n        },\n        \"text\" : \"And ordain for us good in this world, and in the Hereafter. Certainly we have turned unto You.\\\" He said: (As to) My Punishment I afflict therewith whom I will and My Mercy embraces all things. That (Mercy) I shall ordain for those who are the Muttaqun (pious - see V. 2:2), and give Zakat; and those who believe in Our Ayat (proofs, evidences, verses, lessons, signs and revelations, etc.);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 157,\n          \"sura\" : 7\n        },\n        \"text\" : \"Those who follow the Messenger, the Prophet who can neither read nor write (i.e. Muhammad SAW) whom they find written with them in the Taurat (Torah) (Deut, xviii, 15) and the Injeel (Gospel) (John xiv, 16), - he commands them for Al-Ma'ruf (i.e. Islamic Monotheism and all that Islam has ordained); and forbids them from Al-Munkar (i.e. disbelief, polytheism of all kinds, and all that Islam has forbidden); he allows them as lawful At-Taiyibat [(i.e. all good and lawful) as regards things, deeds, beliefs, persons, foods, etc.], and prohibits them as unlawful Al-Khaba'ith (i.e. all evil and unlawful as regards things, deeds, beliefs, persons, foods, etc.), he releases them from their heavy burdens (of Allah's Covenant), and from the fetters (bindings) that were upon them. So those who believe in him (Muhammad SAW), honour him, help him, and follow the light (the Quran) which has been sent down with him, it is they who will be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 158,\n          \"sura\" : 7\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"O mankind! Verily, I am sent to you all as the Messenger of Allah - to Whom belongs the dominion of the heavens and the earth. La ilaha illa Huwa (none has the right to be worshipped but He); It is He Who gives life and causes death. So believe in Allah and His Messenger (Muhammad SAW), the Prophet who can neither read nor write (i.e. Muhammad SAW) who believes in Allah and His Words [(this Quran), the Taurat (Torah) and the Injeel (Gospel) and also Allah's Word: \\\"Be!\\\" - and he was, i.e. 'Iesa (Jesus) son of Maryam (Mary)], and follow him so that you may be guided.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 161,\n          \"sura\" : 7\n        },\n        \"text\" : \"And (remember) when it was said to them: \\\"Dwell in this town (Jerusalem) and eat therefrom wherever you wish, and say, '(O Allah) forgive our sins'; and enter the gate prostrate (bowing with humility). We shall forgive you your wrong-doings. We shall increase (the reward) for the good-doers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 164,\n          \"sura\" : 7\n        },\n        \"text\" : \"And when a community among them said: \\\"Why do you preach to a people whom Allah is about to destroy or to punish with a severe torment?\\\" (The preachers) said: \\\"In order to be free from guilt before your Lord (Allah), and perhaps they may fear Allah.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 165,\n          \"sura\" : 7\n        },\n        \"text\" : \"So when they forgot the remindings that had been given to them, We rescued those who forbade evil, but We seized those who did wrong with a severe torment because they used to rebel (disobey Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 166,\n          \"sura\" : 7\n        },\n        \"text\" : \"So when they exceeded the limits of what they were prohibited, We said to them: \\\"Be you monkeys, despised and rejected.\\\" (It is a severe warning to the mankind that they should not disobey what Allah commands them to do, and be far away from what He prohibits them).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 167,\n          \"sura\" : 7\n        },\n        \"text\" : \"And (remember) when your Lord declared that He would certainly keep on sending against them (i.e. the Jews), till the Day of Resurrection, those who would afflict them with a humiliating torment. Verily, your Lord is Quick in Retribution (for the disobedient, wicked) and certainly He is Oft-Forgiving, Most Merciful (for the obedient and those who beg Allah's Forgiveness).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 168,\n          \"sura\" : 7\n        },\n        \"text\" : \"And We have broken them (i.e. the Jews) up into various separate groups on the earth, some of them are righteous and some are away from that. And We tried them with good (blessings) and evil (calamities) in order that they might turn (to Allah's Obedience).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 169,\n          \"sura\" : 7\n        },\n        \"text\" : \"Then after them succeeded an (evil) generation, which inherited the Book, but they chose (for themselves) the goods of this low life (evil pleasures of this world) saying (as an excuse): \\\"(Everything) will be forgiven to us.\\\" And if (again) the offer of the like (evil pleasures of this world) came their way, they would (again) seize them (would commit those sins). Was not the covenant of the Book taken from them that they would not say about Allah anything but the truth? And they have studied what is in it (the Book). And the home of the Hereafter is better for those who are Al-Muttaqun (the pious - see V. 2:2). Do not you then understand?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 170,\n          \"sura\" : 7\n        },\n        \"text\" : \"And as to those who hold fast to the Book (i.e. act on its teachings) and perform As-Salat (Iqamat-as-Salat), certainly, We shall never waste the reward of those who do righteous deeds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 171,\n          \"sura\" : 7\n        },\n        \"text\" : \"And (remember) when We raised the mountain over them as if it had been a canopy, and they thought that it was going to fall on them. (We said): \\\"Hold firmly to what We have given you [i.e. the Taurat (Torah)], and remember that which is therein (act on its commandments), so that you may fear Allah and obey Him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 173,\n          \"sura\" : 7\n        },\n        \"text\" : \"Or lest you should say: \\\"It was only our fathers afortime who took others as partners in worship along with Allah, and we were (merely their) descendants after them; will You then destroy us because of the deeds of men who practised Al-Batil (i.e. polytheism and committing crimes and sins, invoking and worshipping others besides Allah)?\\\" (Tafsir At-Tabari).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 178,\n          \"sura\" : 7\n        },\n        \"text\" : \"Whomsoever Allah guides, he is the guided one, and whomsoever He sends astray, those! They are the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 180,\n          \"sura\" : 7\n        },\n        \"text\" : \"And (all) the Most Beautiful Names belong to Allah, so call on Him by them, and leave the company of those who belie or deny (or utter impious speech against) His Names. They will be requited for what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 182,\n          \"sura\" : 7\n        },\n        \"text\" : \"Those who reject Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.), We shall gradually seize them with punishment in ways they perceive not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 185,\n          \"sura\" : 7\n        },\n        \"text\" : \"Do they not look in the dominion of the heavens and the earth and all things that Allah has created, and that it may be that the end of their lives is near. In what message after this will they then believe?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 186,\n          \"sura\" : 7\n        },\n        \"text\" : \"Whomsoever Allah sends astray, none can guide him; and He lets them wander blindly in their transgressions.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 187,\n          \"sura\" : 7\n        },\n        \"text\" : \"They ask you about the Hour (Day of Resurrection): \\\"When will be its appointed time?\\\" Say: \\\"The knowledge thereof is with my Lord (Alone). None can reveal its time but He. Heavy is its burden through the heavens and the earth. It shall not come upon you except all of a sudden.\\\" They ask you as if you have a good knowledge of it. Say: \\\"The knowledge thereof is with Allah (Alone) but most of mankind know not.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 188,\n          \"sura\" : 7\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"I possess no power of benefit or hurt to myself except as Allah wills. If I had the knowledge of the Ghaib (unseen), I should have secured for myself an abundance of wealth, and no evil should have touched me. I am but a warner, and a bringer of glad tidings unto people who believe.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 189,\n          \"sura\" : 7\n        },\n        \"text\" : \"It is He Who has created you from a single person (Adam), and (then) He has created from him his wife [Hawwa (Eve)], in order that he might enjoy the pleasure of living with her. When he had sexual relation with her, she became pregnant and she carried it about lightly. Then when it became heavy, they both invoked Allah, their Lord (saying): \\\"If You give us a Salih (good in every aspect) child, we shall indeed be among the grateful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 190,\n          \"sura\" : 7\n        },\n        \"text\" : \"But when He gave them a Salih (good in every aspect) child, they ascribed partners to Him (Allah) in that which He has given to them. High be Allah, Exalted above all that they ascribe as partners to Him. (Tafsir At-Tabari, Vol. 9, Page 148).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 191,\n          \"sura\" : 7\n        },\n        \"text\" : \"Do they attribute as partners to Allah those who created nothing but they themselves are created?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 193,\n          \"sura\" : 7\n        },\n        \"text\" : \"And if you call them to guidance, they follow you not. It is the same for you whether you call them or you keep silent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 194,\n          \"sura\" : 7\n        },\n        \"text\" : \"Verily, those whom you call upon besides Allah are slaves like you. So call upon them and let them answer you if you are truthful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 195,\n          \"sura\" : 7\n        },\n        \"text\" : \"Have they feet wherewith they walk? Or have they hands wherewith they hold? Or have they eyes wherewith they see? Or have they ears wherewith they hear? Say (O Muhammad SAW): \\\"Call your (so-called) partners (of Allah) and then plot against me, and give me no respite!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 196,\n          \"sura\" : 7\n        },\n        \"text\" : \"\\\"Verily, my Wali (Protector, Supporter, and Helper, etc.) is Allah Who has revealed the Book (the Quran), and He protects (supports and helps) the righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 197,\n          \"sura\" : 7\n        },\n        \"text\" : \"\\\"And those whom you call upon besides Him (Allah) cannot help you nor can they help themselves.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 198,\n          \"sura\" : 7\n        },\n        \"text\" : \"And if you call them to guidance, they hear not and you will see them looking at you, yet they see not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 200,\n          \"sura\" : 7\n        },\n        \"text\" : \"And if an evil whisper comes to you from Shaitan (Satan) then seek refuge with Allah. Verily, He is All-Hearer, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 201,\n          \"sura\" : 7\n        },\n        \"text\" : \"Verily, those who are Al-Muttaqun (the pious - see V. 2:2), when an evil thought comes to them from Shaitan (Satan), they remember (Allah), and (indeed) they then see (aright).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 8\n        },\n        \"text\" : \"They ask you (O Muhammad SAW) about the spoils of war. Say: \\\"The spoils are for Allah and the Messenger.\\\" So fear Allah and adjust all matters of difference among you, and obey Allah and His Messenger (Muhammad SAW), if you are believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 8\n        },\n        \"text\" : \"The believers are only those who, when Allah is mentioned, feel a fear in their hearts and when His Verses (this Quran) are recited unto them, they (i.e. the Verses) increase their Faith; and they put their trust in their Lord (Alone);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 8\n        },\n        \"text\" : \"And (remember) when Allah promised you (Muslims) one of the two parties (of the enemy i.e. either the army or the caravan) that it should be yours, you wished that the one not armed (the caravan) should be yours, but Allah willed to justify the truth by His Words and to cut off the roots of the disbelievers (i.e. in the battle of Badr).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 8\n        },\n        \"text\" : \"Allah made it only as glad tidings, and that your hearts be at rest therewith. And there is no victory except from Allah. Verily, Allah is All-Mighty, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 8\n        },\n        \"text\" : \"(Remember) when your Lord inspired the angels, \\\"Verily, I am with you, so keep firm those who have believed. I will cast terror into the hearts of those who have disbelieved, so strike them over the necks, and smite over all their fingers and toes.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 8\n        },\n        \"text\" : \"This is because they defied and disobeyed Allah and His Messenger. And whoever defies and disobeys Allah and His Messenger, then verily, Allah is Severe in punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 8\n        },\n        \"text\" : \"And whoever turns his back to them on such a day - unless it be a stratagem of war, or to retreat to a troop (of his own), - he indeed has drawn upon himself wrath from Allah. And his abode is Hell, and worst indeed is that destination!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 8\n        },\n        \"text\" : \"You killed them not, but Allah killed them. And you (Muhammad SAW) threw not when you did throw but Allah threw, that He might test the believers by a fair trial from Him. Verily, Allah is All-Hearer, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 8\n        },\n        \"text\" : \"This (is the fact) and surely, Allah weakens the deceitful plots of the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 8\n        },\n        \"text\" : \"(O disbelievers) if you ask for a judgement, now has the judgement come unto you and if you cease (to do wrong), it will be better for you, and if you return (to the attack), so shall We return, and your forces will be of no avail to you, however numerous it be, and verily, Allah is with the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 8\n        },\n        \"text\" : \"O you who believe! Obey Allah and His Messenger, and turn not away from him (i.e. Messenger Muhammad SAW) while you are hearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 8\n        },\n        \"text\" : \"Verily! The worst of (moving) living creatures with Allah are the deaf and the dumb, those who understand not (i.e. the disbelievers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 8\n        },\n        \"text\" : \"Had Allah known of any good in them, He would indeed have made them listen, and even if He had made them listen, they would but have turned away, averse (to the truth).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 8\n        },\n        \"text\" : \"O you who believe! Answer Allah (by obeying Him) and (His) Messenger when he (SAW) calls you to that which will give you life, and know that Allah comes in between a person and his heart (i.e. He prevents an evil person to decide anything). And verily to Him you shall (all) be gathered.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 8\n        },\n        \"text\" : \"And fear the Fitnah (affliction and trial, etc.) which affects not in particular (only) those of you who do wrong (but it may afflict all the good and the bad people), and know that Allah is Severe in punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 8\n        },\n        \"text\" : \"O you who believe! Betray not Allah and His Messenger, nor betray knowingly your Amanat (things entrusted to you, and all the duties which Allah has ordained for you).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 8\n        },\n        \"text\" : \"And know that your possessions and your children are but a trial and that surely with Allah is a mighty reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 8\n        },\n        \"text\" : \"O you who believe! If you obey and fear Allah, He will grant you Furqan a criterion [(to judge between right and wrong), or (Makhraj, i.e. making a way for you to get out from every difficulty)], and will expiate for you your sins, and forgive you, and Allah is the Owner of the Great Bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 8\n        },\n        \"text\" : \"And (remember) when the disbelievers plotted against you (O Muhammad SAW) to imprison you, or to kill you, or to get you out (from your home, i.e. Makkah); they were plotting and Allah too was planning, and Allah is the Best of the planners.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 8\n        },\n        \"text\" : \"And (remember) when they said: \\\"O Allah! If this (the Quran) is indeed the truth (revealed) from You, then rain down stones on us from the sky or bring on us a painful torment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 8\n        },\n        \"text\" : \"And Allah would not punish them while you (Muhammad SAW) are amongst them, nor will He punish them while they seek (Allah's) Forgiveness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 8\n        },\n        \"text\" : \"And why should not Allah punish them while they stop (men) from Al-Masjid-al-Haram, and they are not its guardians? None can be its guardian except Al-Muttaqun (the pious - see V. 2:2), but most of them know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 8\n        },\n        \"text\" : \"Their Salat (prayer) at the House (of Allah, i.e. the Ka'bah at Makkah) was nothing but whistling and clapping of hands. Therefore taste the punishment because you used to disbelieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 8\n        },\n        \"text\" : \"Verily, those who disbelieve spend their wealth to hinder (men) from the Path of Allah, and so will they continue to spend it; but in the end it will become an anguish for them. Then they will be overcomed. And those who disbelieve will be gathered unto Hell.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 8\n        },\n        \"text\" : \"In order that Allah may distinguish the wicked (disbelievers, polytheists and doers of evil deeds) from the good (believers of Islamic Monotheism and doers of righteous deeds), and put the wicked (disbelievers, polytheists and doers of evil deeds) one on another, heap them together and cast them into Hell. Those! it is they who are the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 8\n        },\n        \"text\" : \"And fight them until there is no more Fitnah (disbelief and polytheism: i.e. worshipping others besides Allah) and the religion (worship) will all be for Allah Alone [in the whole of the world]. But if they cease (worshipping others besides Allah), then certainly, Allah is All-Seer of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 8\n        },\n        \"text\" : \"And if they turn away, then know that Allah is your Maula (Patron, Lord, Protector and Supporter, etc.), (what) an Excellent Maula, and (what) an Excellent Helper!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 8\n        },\n        \"text\" : \"And know that whatever of war-booty that you may gain, verily one-fifth (1\\/5th) of it is assigned to Allah, and to the Messenger, and to the near relatives [of the Messenger (Muhammad SAW)], (and also) the orphans, Al-Masakin (the poor) and the wayfarer, if you have believed in Allah and in that which We sent down to Our slave (Muhammad SAW) on the Day of criterion (between right and wrong), the Day when the two forces met (the battle of Badr) - And Allah is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 8\n        },\n        \"text\" : \"(And remember) when you (the Muslim army) were on the near side of the valley, and they on the farther side, and the caravan on the ground lower than you. Even if you had made a mutual appointment to meet, you would certainly have failed in the appointment, but (you met) that Allah might accomplish a matter already ordained (in His Knowledge); so that those who were to be destroyed (for their rejecting the Faith) might be destroyed after a clear evidence, and those who were to live (i.e. believers) might live after a clear evidence. And surely, Allah is All-Hearer, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 8\n        },\n        \"text\" : \"(And remember) when Allah showed them to you as few in your (i.e. Muhammad's SAW) dream, if He had shown them to you as many, you would surely have been discouraged, and you would surely have disputed in making a decision. But Allah saved (you). Certainly, He is the All-Knower of what is in the breasts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 8\n        },\n        \"text\" : \"And (remember) when you met (the army of the disbelievers on the Day of the battle of Badr), He showed them to you as few in your eyes and He made you as few in their eyes, so that Allah might accomplish a matter already ordained (in His Knowledge), and to Allah return all matters (for decision).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 8\n        },\n        \"text\" : \"O you who believe! When you meet (an enemy) force, take a firm stand against them and remember the Name of Allah much (both with tongue and mind), so that you may be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 8\n        },\n        \"text\" : \"And obey Allah and His Messenger, and do not dispute (with one another) lest you lose courage and your strength depart, and be patient. Surely, Allah is with those who are As-Sabirin (the patient ones, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 8\n        },\n        \"text\" : \"And be not like those who come out of their homes boastfully and to be seen of men, and hinder (men) from the Path of Allah. and Allah is Muhitun (encircling and thoroughly comprehending) all that they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 8\n        },\n        \"text\" : \"And (remember) when Shaitan (Satan) made their (evil) deeds seem fair to them and said, \\\"No one of mankind can overcome you this Day (of the battle of Badr) and verily, I am your neighbour (for each and every help).\\\" But when the two forces came in sight of each other, he ran away and said \\\"Verily, I have nothing to do with you. Verily! I see what you see not. Verily! I fear Allah for Allah is Severe in punishment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 8\n        },\n        \"text\" : \"When the hypocrites and those in whose hearts was a disease (of disbelief) said: \\\"These people (Muslims) are deceived by their religion.\\\" But whoever puts his trust in Allah, then surely, Allah is All-Mighty, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 8\n        },\n        \"text\" : \"\\\"This is because of that which your hands had forwarded. And verily, Allah is not unjust to His slaves.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 8\n        },\n        \"text\" : \"Similar to the behaviour of the people of Fir'aun (Pharaoh), and of those before them; they rejected the Ayat (proofs, verses, etc.) of Allah, so Allah punished them for their sins. Verily, Allah is All-Strong, Severe in punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 8\n        },\n        \"text\" : \"That is so because Allah will never change a grace which He has bestowed on a people until they change what is in their ownselves. And verily, Allah is All-Hearer, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 8\n        },\n        \"text\" : \"Similar to the behaviour of the people of Fir'aun (Pharaoh), and those before them. They belied the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.), of their Lord, so We destroyed them for their sins, and We drowned the people of Fir'aun (Pharaoh) for they were all Zalimun (polytheists and wrong-doers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 8\n        },\n        \"text\" : \"Verily, The worst of moving (living) creatures before Allah are those who disbelieve, - so they shall not believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 8\n        },\n        \"text\" : \"They are those with whom you made a covenant, but they break their covenant every time and they do not fear Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 8\n        },\n        \"text\" : \"If you (O Muhammad SAW) fear treachery from any people throw back (their covenant) to them (so as to be) on equal terms (that there will be no more covenant between you and them). Certainly Allah likes not the treacherous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 8\n        },\n        \"text\" : \"And let not those who disbelieve think that they can outstrip (escape from the punishment). Verily, they will never be able to save themselves (from Allah's Punishment).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 8\n        },\n        \"text\" : \"And make ready against them all you can of power, including steeds of war (tanks, planes, missiles, artillery, etc.) to threaten the enemy of Allah and your enemy, and others besides whom, you may not know but whom Allah does know. And whatever you shall spend in the Cause of Allah shall be repaid unto you, and you shall not be treated unjustly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 8\n        },\n        \"text\" : \"But if they incline to peace, you also incline to it, and (put your) trust in Allah. Verily, He is the All-Hearer, the All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 8\n        },\n        \"text\" : \"And if they intend to deceive you, then verily, Allah is All-Sufficient for you. He it is Who has supported you with His Help and with the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 8\n        },\n        \"text\" : \"And He has united their (i.e. believers') hearts. If you had spent all that is in the earth, you could not have united their hearts, but Allah has united them. Certainly He is All-Mighty, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 8\n        },\n        \"text\" : \"O Prophet (Muhammad SAW)! Allah is Sufficient for you and for the believers who follow you.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 8\n        },\n        \"text\" : \"Now Allah has lightened your (task), for He knows that there is weakness in you. So if there are of you a hundred steadfast persons, they shall overcome two hundred, and if there are a thousand of you, they shall overcome two thousand with the Leave of Allah. And Allah is with As-Sabirin (the patient ones, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 8\n        },\n        \"text\" : \"It is not for a Prophet that he should have prisoners of war (and free them with ransom) until he had made a great slaughter (among his enemies) in the land. You desire the good of this world (i.e. the money of ransom for freeing the captives), but Allah desires (for you) the Hereafter. And Allah is All-Mighty, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 8\n        },\n        \"text\" : \"Were it not a previous ordainment from Allah, a severe torment would have touched you for what you took.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 8\n        },\n        \"text\" : \"So enjoy what you have gotten of booty in war, lawful and good, and be afraid of Allah. Certainly, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 8\n        },\n        \"text\" : \"O Prophet! Say to the captives that are in your hands: \\\"If Allah knows any good in your hearts, He will give you something better than what has been taken from you, and He will forgive you, and Allah is Oft-Forgiving, Most Merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 8\n        },\n        \"text\" : \"But if they intend to betray you (O Muhammad SAW), they have already betrayed Allah before. So He gave (you) power over them. And Allah is All-Knower, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 8\n        },\n        \"text\" : \"Verily, those who believed, and emigrated and strove hard and fought with their property and their lives in the Cause of Allah as well as those who gave (them) asylum and help, - these are (all) allies to one another. And as to those who believed but did not emigrate (to you O Muhammad SAW), you owe no duty of protection to them until they emigrate, but if they seek your help in religion, it is your duty to help them except against a people with whom you have a treaty of mutual alliance, and Allah is the All-Seer of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 8\n        },\n        \"text\" : \"And those who disbelieve are allies to one another, (and) if you (Muslims of the whole world collectively) do not do so (i.e. become allies, as one united block with one Khalifah - chief Muslim ruler for the whole Muslim world to make victorious Allah's Religion of Islamic Monotheism), there will be Fitnah (wars, battles, polytheism, etc.) and oppression on earth, and a great mischief and corruption (appearance of polytheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 8\n        },\n        \"text\" : \"And those who believed, and emigrated and strove hard in the Cause of Allah (Al-Jihad), as well as those who gave (them) asylum and aid; - these are the believers in truth, for them is forgiveness and Rizqun Karim (a generous provision i.e. Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 8\n        },\n        \"text\" : \"And those who believed afterwards, and emigrated and strove hard along with you, (in the Cause of Allah) they are of you. But kindred by blood are nearer to one another regarding inheritance in the decree ordained by Allah. Verily, Allah is the All-Knower of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 9\n        },\n        \"text\" : \"Freedom from (all) obligations (is declared) from Allah and His Messenger (SAW) to those of the Mushrikun (polytheists, pagans, idolaters, disbelievers in the Oneness of Allah), with whom you made a treaty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 9\n        },\n        \"text\" : \"So travel freely (O Mushrikun - see V. 2:105) for four months (as you will) throughout the land, but know that you cannot escape (from the Punishment of) Allah, and Allah will disgrace the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 9\n        },\n        \"text\" : \"And a declaration from Allah and His Messenger to mankind on the greatest day (the 10th of Dhul-Hijjah - the 12th month of Islamic calendar) that Allah is free from (all) obligations to the Mushrikun (see V. 2:105) and so is His Messenger. So if you (Mushrikun) repent, it is better for you, but if you turn away, then know that you cannot escape (from the Punishment of) Allah. And give tidings (O Muhammad SAW) of a painful torment to those who disbelieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 9\n        },\n        \"text\" : \"Except those of the Mushrikun with whom you have a treaty, and who have not subsequently failed you in aught, nor have supported anyone against you. So fulfill their treaty to them to the end of their term. Surely Allah loves Al- Mattaqun (the pious - see V. 2:2).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 9\n        },\n        \"text\" : \"Then when the Sacred Months (the Ist, 7th, 11th, and 12th months of the Islamic calendar) have passed, then kill the Mushrikun (see V. 2:105) wherever you find them, and capture them and besiege them, and prepare for them each and every ambush. But if they repent and perform As-Salat (Iqamat-as-Salat), and give Zakat, then leave their way free. Verily, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 9\n        },\n        \"text\" : \"And if anyone of the Mushrikun (polytheists, idolaters, pagans, disbelievers in the Oneness of Allah) seeks your protection then grant him protection, so that he may hear the Word of Allah (the Quran), and then escort him to where he can be secure, that is because they are men who know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 9\n        },\n        \"text\" : \"How can there be a covenant with Allah and with His Messenger for the Mushrikun (polytheists, idolaters, pagans, disbelievers in the Oneness of Allah) except those with whom you made a covenant near Al-Masjid-al-Haram (at Makkah)? So long, as they are true to you, stand you true to them. Verily, Allah loves Al-Muttaqun (the pious - see V. 2:2).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 9\n        },\n        \"text\" : \"How (can there be such a covenant with them) that when you are overpowered by them, they regard not the ties, either of kinship or of covenant with you? With (good words from) their mouths they please you, but their hearts are averse to you, and most of them are Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 9\n        },\n        \"text\" : \"They have purchased with the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah a little gain, and they hindered men from His Way; evil indeed is that which they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 9\n        },\n        \"text\" : \"Will you not fight a people who have violated their oaths (pagans of Makkah) and intended to expel the Messenger, while they did attack you first? Do you fear them? Allah has more right that you should fear Him, if you are believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 9\n        },\n        \"text\" : \"Fight against them so that Allah will punish them by your hands and disgrace them and give you victory over them and heal the breasts of a believing people,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 9\n        },\n        \"text\" : \"And remove the anger of their (believers') hearts. Allah accepts the repentance of whom He wills. Allah is All-Knowing, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 9\n        },\n        \"text\" : \"Do you think that you shall be left alone while Allah has not yet tested those among you who have striven hard and fought and have not taken Walijah [(Batanah - helpers, advisors and consultants from disbelievers, pagans, etc.) giving openly to them their secrets] besides Allah and His Messenger, and the believers. Allah is Well-Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 9\n        },\n        \"text\" : \"It is not for the Mushrikun (polytheists, idolaters, pagans, disbelievers in the Oneness of Allah), to maintain the Mosques of Allah (i.e. to pray and worship Allah therein, to look after their cleanliness and their building, etc.), while they witness against their ownselves of disbelief. The works of such are in vain and in Fire shall they abide.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 9\n        },\n        \"text\" : \"The Mosques of Allah shall be maintained only by those who believe in Allah and the Last Day; perform As-Salat (Iqamat-as-Salat), and give Zakat and fear none but Allah. It is they who are expected to be on true guidance.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 9\n        },\n        \"text\" : \"Do you consider the providing of drinking water to the pilgrims and the maintenance of Al-Masjid-al-Haram (at Makkah) as equal to the worth of those who believe in Allah and the Last Day, and strive hard and fight in the Cause of Allah? They are not equal before Allah. And Allah guides not those people who are the Zalimun (polytheists and wrong-doers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 9\n        },\n        \"text\" : \"Those who believed (in the Oneness of Allah - Islamic Monotheism) and emigrated and strove hard and fought in Allah's Cause with their wealth and their lives are far higher in degree with Allah. They are the successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 9\n        },\n        \"text\" : \"They will dwell therein forever. Verily, with Allah is a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 9\n        },\n        \"text\" : \"Say: If your fathers, your sons, your brothers, your wives, your kindred, the wealth that you have gained, the commerce in which you fear a decline, and the dwellings in which you delight  are dearer to you than Allah and His Messenger, and striving hard and fighting in His Cause, then wait until Allah brings about His Decision (torment). And Allah guides not the people who are Al-Fasiqun (the rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 9\n        },\n        \"text\" : \"Truly Allah has given you victory on many battle fields, and on the Day of Hunain (battle) when you rejoiced at your great number but it availed you naught and the earth, vast as it is, was straitened for you, then you turned back in flight.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 9\n        },\n        \"text\" : \"Then Allah did send down His Sakinah (calmness, tranquillity and reassurance, etc.) on the Messenger (Muhammad SAW), and on the believers, and sent down forces (angels) which you saw not, and punished the disbelievers. Such is the recompense of disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 9\n        },\n        \"text\" : \"Then after that Allah will accept the repentance of whom He will. And Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 9\n        },\n        \"text\" : \"O you who believe (in Allah's Oneness and in His Messenger (Muhammad SAW)! Verily, the Mushrikun (polytheists, pagans, idolaters, disbelievers in the Oneness of Allah, and in the Message of Muhammad SAW) are Najasun (impure). So let them not come near Al-Masjid-al-Haram (at Makkah) after this year, and if you fear poverty, Allah will enrich you if He will, out of His Bounty. Surely, Allah is All-Knowing, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 9\n        },\n        \"text\" : \"Fight against those who (1) believe not in Allah, (2) nor in the Last Day, (3) nor forbid that which has been forbidden by Allah and His Messenger (4) and those who acknowledge not the religion of truth (i.e. Islam) among the people of the Scripture (Jews and Christians), until they pay the Jizyah with willing submission, and feel themselves subdued.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 9\n        },\n        \"text\" : \"And the Jews say: 'Uzair (Ezra) is the son of Allah, and the Christians say: Messiah is the son of Allah. That is a saying from their mouths. They imitate the saying of the disbelievers of old. Allah's Curse be on them, how they are deluded away from the truth!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 9\n        },\n        \"text\" : \"They (Jews and Christians) took their rabbis and their monks to be their lords besides Allah (by obeying them in things which they made lawful or unlawful according to their own desires without being ordered by Allah), and (they also took as their Lord) Messiah, son of Maryam (Mary), while they (Jews and Christians) were commanded [in the Taurat (Torah) and the Injeel (Gospel)) to worship none but One Ilah (God - Allah) La ilaha illa Huwa (none has the right to be worshipped but He). Praise and glory be to Him, (far above is He) from having the partners they associate (with Him).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 9\n        },\n        \"text\" : \"They (the disbelievers, the Jews and the Christians) want to extinguish Allah's Light (with which Muhammad SAW has been sent - Islamic Monotheism) with their mouths, but Allah will not allow except that His Light should be perfected even though the Kafirun (disbelievers) hate (it).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 9\n        },\n        \"text\" : \"It is He Who has sent His Messenger (Muhammad SAW) with guidance and the religion of truth (Islam), to make it superior over all religions even though the Mushrikun (polytheists, pagans, idolaters, disbelievers in the Oneness of Allah) hate (it).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 9\n        },\n        \"text\" : \"O you who believe! Verily, there are many of the (Jewish) rabbis and the (Christian) monks who devour the wealth of mankind in falsehood, and hinder (them) from the Way of Allah (i.e. Allah's Religion of Islamic Monotheism). And those who hoard up gold and silver [Al-Kanz: the money, the Zakat of which has not been paid], and spend it not in the Way of Allah, -announce unto them a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 9\n        },\n        \"text\" : \"Verily, the number of months with Allah is twelve months (in a year), so was it ordained by Allah on the Day when He created the heavens and the earth; of them four are Sacred, (i.e. the 1st, the 7th, the 11th and the 12th months of the Islamic calendar). That is the right religion, so wrong not yourselves therein, and fight against the Mushrikun (polytheists, pagans, idolaters, disbelievers in the Oneness of Allah) collectively, as they fight against you collectively. But know that Allah is with those who are Al-Muttaqun (the pious - see V. 2:2).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 9\n        },\n        \"text\" : \"The postponing (of a Sacred Month) is indeed an addition to disbelief: thereby the disbelievers are led astray, for they make it lawful one year and forbid it another year in order to adjust the number of months forbidden by Allah, and make such forbidden ones lawful. The evil of their deeds seems pleasing to them. And Allah guides not the people, who disbelieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 9\n        },\n        \"text\" : \"O you who believe! What is the matter with you, that when you are asked to march forth in the Cause of Allah (i.e. Jihad) you cling heavily to the earth? Are you pleased with the life of this world rather than the Hereafter? But little is the enjoyment of the life of this world as compared with the Hereafter.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 9\n        },\n        \"text\" : \"If you march not forth, He will punish you with a painful torment and will replace you by another people, and you cannot harm Him at all, and Allah is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 9\n        },\n        \"text\" : \"If you help him (Muhammad SAW) not (it does not matter), for Allah did indeed help him when the disbelievers drove him out, the second of two, when they (Muhammad SAW and Abu Bakr) were in the cave, and he (SAW) said to his companion (Abu Bakr): \\\"Be not sad (or afraid), surely Allah is with us.\\\" Then Allah sent down His Sakinah (calmness, tranquillity, peace, etc.) upon him, and strengthened him with forces (angels) which you saw not, and made the word of those who disbelieved the lowermost, while it was the Word of Allah that became the uppermost, and Allah is All-Mighty, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 9\n        },\n        \"text\" : \"March forth, whether you are light (being healthy, young and wealthy) or heavy (being ill, old and poor), strive hard with your wealth and your lives in the Cause of Allah. This is better for you, if you but knew.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 9\n        },\n        \"text\" : \"Had it been a near gain (booty in front of them) and an easy journey, they would have followed you, but the distance (Tabuk expedition) was long for them, and they would swear by Allah, \\\"If we only could, we would certainly have come forth with you.\\\" They destroy their ownselves, and Allah knows that they are liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 9\n        },\n        \"text\" : \"May Allah forgive you (O Muhammad SAW). Why did you grant them leave (for remaining behind, you should have persisted as regards your order to them to proceed on Jihad), until those who told the truth were seen by you in a clear light, and you had known the liars?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 9\n        },\n        \"text\" : \"Those who believe in Allah and the Last Day would not ask your leave to be exempted from fighting with their properties and their lives, and Allah is the All-Knower of Al-Muttaqun (the pious - see V. 2:2).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 9\n        },\n        \"text\" : \"It is only those who believe not in Allah and the Last Day and whose hearts are in doubt that ask your leave (to be exempted from Jihad). So in their doubts they waver.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 9\n        },\n        \"text\" : \"And if they had intended to march out, certainly, they would have made some preparation for it, but Allah was averse to their being sent forth, so He made them lag behind, and it was said (to them), \\\"Sit you among those who sit (at home).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 9\n        },\n        \"text\" : \"Had they marched out with you, they would have added to you nothing except disorder, and they would have hurried about in your midst (spreading corruption) and sowing sedition among you, and there are some among you who would have listened to them. And Allah is the All-Knower of the Zalimun (polytheists and wrong-doers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 9\n        },\n        \"text\" : \"Verily, they had plotted sedition before, and had upset matters for you, - until the truth (victory) came and the Decree of Allah (His Religion, Islam) became manifest though they hated it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 9\n        },\n        \"text\" : \"And among them is he who says:\\\"Grant me leave (to be exempted from Jihad) and put me not into trial.\\\" Surely, they have fallen into trial. And verily, Hell is surrounding the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 9\n        },\n        \"text\" : \"If good befalls you (O Muhammad SAW), it grieves them, but if a calamity overtakes you, they say: \\\"We took our precaution beforehand,\\\" and they turn away rejoicing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 9\n        },\n        \"text\" : \"Say: \\\"Nothing shall ever happen to us except what Allah has ordained for us. He is our Maula (Lord, Helper and Protector).\\\" And in Allah let the believers put their trust.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 9\n        },\n        \"text\" : \"Say: \\\"Do you wait for us (anything) except one of the two best things (martyrdom or victory); while we await for you either that Allah will afflict you with a punishment from Himself or at our hands. So wait, we too are waiting with you.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 9\n        },\n        \"text\" : \"Say: \\\"Spend (in Allah's Cause) willingly or unwillingly, it will not be accepted from you. Verily, you are ever a people who are Fasiqun (rebellious, disobedient to Allah).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 9\n        },\n        \"text\" : \"And nothing prevents their contributions from being accepted from them except that they disbelieved in Allah and in His Messenger (Muhammad SAW); and that they came not to As-Salat (the prayer) except in a lazy state; and that they offer not contributions but unwillingly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 9\n        },\n        \"text\" : \"So let not their wealth or their children amaze you (O Muhammad SAW); in reality Allah's Plan is to punish them with these things in the life of the this world, and that their souls shall depart (die) while they are disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 9\n        },\n        \"text\" : \"They swear by Allah that they are truly of you while they are not of you, but they are a people (hypocrites) who are afraid (that you may kill them).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 9\n        },\n        \"text\" : \"Would that they were contented with what Allah and His Messenger (SAW) gave them and had said: \\\"Allah is Sufficient for us. Allah will give us of His Bounty, and (also) His Messenger (from alms, etc.). We implore Allah (to enrich us).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 9\n        },\n        \"text\" : \"As-Sadaqat (here it means Zakat) are only for the Fuqara' (poor), and Al-Masakin (the poor) and those employed to collect (the funds); and for to attract the hearts of those who have been inclined (towards Islam); and to free the captives; and for those in debt; and for Allah's Cause (i.e. for Mujahidun - those fighting in the holy wars), and for the wayfarer (a traveller who is cut off from everything); a duty imposed by Allah. And Allah is All-Knower, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 9\n        },\n        \"text\" : \"And among them are men who hurt the Prophet (Muhammad SAW) and say: \\\"He is (lending his) ear (to every news).\\\" Say: \\\"He listens to what is best for you; he believes in Allah; has faith in the believers; and is a mercy to those of you who believe.\\\" But those who hurt Allah's Messenger (Muhammad SAW) will have a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 9\n        },\n        \"text\" : \"They swear by Allah to you (Muslims) in order to please you, but it is more fitting that they should please Allah and His Messenger (Muhammad SAW), if they are believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 9\n        },\n        \"text\" : \"Know they not that whoever opposes and shows hostility to Allah and His Messenger (SAW), certainly for him will be the Fire of Hell to abide therein. That is extreme disgrace.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 9\n        },\n        \"text\" : \"The hypocrites fear lest a Surah (chapter of the Quran) should be revealed about them, showing them what is in their hearts. Say: \\\"(Go ahead and) mock! But certainly Allah will bring to light all that you fear.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 9\n        },\n        \"text\" : \"If you ask them (about this), they declare: \\\"We were only talking idly and joking.\\\" Say: \\\"Was it at Allah, and His Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) and His Messenger (SAW) that you were mocking?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 9\n        },\n        \"text\" : \"The hypocrites, men and women, are from one another, they enjoin (on the people) Al-Munkar (i.e. disbelief and polytheism of all kinds and all that Islam has forbidden), and forbid (people) from Al-Ma'ruf (i.e. Islamic Monotheism and all that Islam orders one to do), and they close their hands [from giving (spending in Allah's Cause) alms, etc.]. They have forgotten Allah, so He has forgotten them. Verily, the hypocrites are the Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 9\n        },\n        \"text\" : \"Allah has promised the hypocrites; men and women, and the disbelievers, the Fire of Hell, therein shall they abide. It will suffice them. Allah has cursed them and for them is the lasting torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 9\n        },\n        \"text\" : \"Like those before you, they were mightier than you in power, and more abundant in wealth and children. They had enjoyed their portion awhile, so enjoy your portion awhile as those before you enjoyed their portion awhile; and you indulged in play and pastime (and in telling lies against Allah and His Messenger Muhammad SAW) as they indulged in play and pastime. Such are they whose deeds are in vain in this world and in the Hereafter. Such are they who are the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 9\n        },\n        \"text\" : \"Has not the story reached them of those before them? - The people of Nuh (Noah), 'Ad, and Thamud, the people of Ibrahim (Abraham), the dwellers of Madyan (Midian) and the cities overthrown [i.e. the people to whom Lout (Lot) preached], to them came their Messengers with clear proofs. So it was not Allah Who wronged them, but they used to wrong themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 9\n        },\n        \"text\" : \"The believers, men and women, are Auliya' (helpers, supporters, friends, protectors) of one another, they enjoin (on the people) Al-Ma'ruf (i.e. Islamic Monotheism and all that Islam orders one to do), and forbid (people) from Al-Munkar (i.e. polytheism and disbelief of all kinds, and all that Islam has forbidden); they perform As-Salat (Iqamat-as-Salat) and give the Zakat, and obey Allah and His Messenger. Allah will have His Mercy on them. Surely Allah is All-Mighty, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 9\n        },\n        \"text\" : \"Allah has promised to the believers -men and women, - Gardens under which rivers flow to dwell therein forever, and beautiful mansions in Gardens of 'Adn (Eden Paradise). But the greatest bliss is the Good Pleasure of Allah. That is the supreme success.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 9\n        },\n        \"text\" : \"They swear by Allah that they said nothing (bad), but really they said the word of disbelief, and they disbelieved after accepting Islam, and they resolved that (plot to murder Prophet Muhammad SAW) which they were unable to carry out, and they could not find any cause to do so except that Allah and His Messenger had enriched them of His Bounty. If then they repent, it will be better for them, but if they turn away, Allah will punish them with a painful torment in this worldly life and in the Hereafter. And there is none for them on earth as a Wali (supporter, protector) or a helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 9\n        },\n        \"text\" : \"And of them are some who made a covenant with Allah (saying): \\\"If He bestowed on us of His Bounty, we will verily, give Sadaqah (Zakat and voluntary charity in Allah's Cause) and will be certainly among those who are righteous.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 9\n        },\n        \"text\" : \"So He punished them by putting hypocrisy into their hearts till the Day whereon they shall meet Him, because they broke that (covenant with Allah) which they had promised Him and because they used to tell lies.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 9\n        },\n        \"text\" : \"Know they not that Allah knows their secret ideas, and their Najwa (secret counsels), and that Allah is the All-Knower of the unseen.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 9\n        },\n        \"text\" : \"Those who defame such of the believers who give charity (in Allah's Cause) voluntarily, and those who could not find to give charity (in Allah's Cause) except what is available to them, so they mock at them (believers), Allah will throw back their mockery on them, and they shall have a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 9\n        },\n        \"text\" : \"Whether you (O Muhammad SAW) ask forgiveness for them (hypocrites) or ask not forgiveness for them  (and even) if you ask seventy times for their forgiveness  Allah will not forgive them, because they have disbelieved in Allah and His Messenger (Muhammad SAW). And Allah guides not those people who are Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 9\n        },\n        \"text\" : \"Those who stayed away (from Tabuk expedition) rejoiced in their staying behind the Messenger of Allah; they hated to strive and fight with their properties and their lives in the Cause of Allah, and they said: \\\"March not forth in the heat.\\\" Say: \\\"The Fire of Hell is more intense in heat\\\", if only they could understand!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 9\n        },\n        \"text\" : \"If Allah brings you back to a party of them (the hypocrites), and they ask your permission to go out (to fight), say: \\\"Never shall you go out with me, nor fight an enemy with me; you agreed to sit inactive on the first occasion, then you sit (now) with those who lag behind.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 9\n        },\n        \"text\" : \"And never (O Muhammad SAW) pray (funeral prayer) for any of them (hypocrites) who dies, nor stand at his grave. Certainly they disbelieved in Allah and His Messenger, and died while they were Fasiqun (rebellious, - disobedient to Allah and His Messenger SAW).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 9\n        },\n        \"text\" : \"And let not their wealth or their children amaze you. Allah's Plan is to punish them with these things in this world, and that their souls shall depart (die) while they are disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 9\n        },\n        \"text\" : \"And when a Surah (chapter from the Quran) is revealed, enjoining them to believe in Allah and to strive hard and fight along with His Messenger, the wealthy among them ask your leave to exempt them (from Jihad) and say, \\\"Leave us (behind), we would be with those who sit (at home).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 9\n        },\n        \"text\" : \"They are content to be with those (the women) who sit behind (at home). Their hearts are sealed up (from all kinds of goodness and right guidance), so they understand not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 9\n        },\n        \"text\" : \"But the Messenger (Muhammad SAW) and those who believed with him (in Islamic Monotheism) strove hard and fought with their wealth and their lives (in Allah's Cause). Such are they for whom are the good things, and it is they who will be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 9\n        },\n        \"text\" : \"For them Allah has got ready Gardens (Paradise) under which rivers flow, to dwell therein forever. That is the supreme success.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 9\n        },\n        \"text\" : \"And those who made excuses from the bedouins came (to you, O Prophet SAW) asking your permission to exempt them (from the battle), and those who had lied to Allah and His Messenger sat at home (without asking the permission for it); a painful torment will seize those of them who disbelieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 9\n        },\n        \"text\" : \"There is no blame on those who are weak or ill or who find no resources to spend [in holy fighting (Jihad)], if they are sincere and true (in duty) to Allah and His Messenger. No ground (of complaint) can there be against the Muhsinun (good-doers - see the footnote of V. 9:120). And Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 9\n        },\n        \"text\" : \"The ground (of complaint) is only against those who are rich, and yet ask exemption. They are content to be with (the women) who sit behind (at home) and Allah has sealed up their hearts (from all kinds of goodness and right guidance) so that they know not (what they are losing).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 9\n        },\n        \"text\" : \"They (the hypocrites) will present their excuses to you (Muslims), when you return to them. Say (O Muhammad SAW) \\\"Present no excuses, we shall not believe you. Allah has already informed us of the news concerning you. Allah and His Messenger will observe your deeds. In the end you will be brought back to the All-Knower of the unseen and the seen, then He (Allah) will inform you of what you used to do.\\\" [Tafsir At-Tabari]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 9\n        },\n        \"text\" : \"They will swear by Allah to you (Muslims) when you return to them, that you may turn away from them. So turn away from them. Surely, they are Rijsun [i.e. Najasun (impure) because of their evil deeds], and Hell is their dwelling place, - a recompense for that which they used to earn.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 9\n        },\n        \"text\" : \"They (the hypocrites) swear to you (Muslims) that you may be pleased with them, but if you are pleased with them, certainly Allah is not pleased with the people who are Al-Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 9\n        },\n        \"text\" : \"The bedouins are the worst in disbelief and hypocrisy, and more likely to be in ignorance of the limits (Allah's Commandments and His Legal Laws, etc.) which Allah has revealed to His Messenger. And Allah is All-Knower, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 9\n        },\n        \"text\" : \"And of the bedouins there are some who look upon what they spend (in Allah's Cause) as a fine and watch for calamities for you, on them be the calamity of evil. And Allah is All-Hearer, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 9\n        },\n        \"text\" : \"And of the bedouins there are some who believe in Allah and the Last Day, and look upon what they spend in Allah's Cause as approaches to Allah, and a cause of receiving the Messenger's invocations. Indeed these (spendings in Allah's Cause) are an approach for them. Allah will admit them to His Mercy. Certainly Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 100,\n          \"sura\" : 9\n        },\n        \"text\" : \"And the first to embrace Islam of the Muhajirun (those who migrated from Makkah to Al-Madinah) and the Ansar (the citizens of Al-Madinah who helped and gave aid to the Muhajirun) and also those who followed them exactly (in Faith). Allah is well-pleased with them as they are well-pleased with Him. He has prepared for them Gardens under which rivers flow (Paradise), to dwell therein forever. That is the supreme success.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 9\n        },\n        \"text\" : \"And among the bedouins round about you, some are hypocrites, and so are some among the people of Al-Madinah, they exaggerate and persist in hypocrisy, you (O Muhammad SAW) know them not, We know them. We shall punish them twice, and thereafter they shall be brought back to a great (horrible) torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 9\n        },\n        \"text\" : \"And (there are) others who have acknowledged their sins, they have mixed a deed that was righteous with another that was evil. Perhaps Allah will turn unto them in forgiveness. Surely, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 9\n        },\n        \"text\" : \"Take Sadaqah (alms) from their wealth in order to purify them and sanctify them with it, and invoke Allah for them. Verily! Your invocations are a source of security for them, and Allah is All-Hearer, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 9\n        },\n        \"text\" : \"Know they not that Allah accepts repentance from His slaves and takes the Sadaqat (alms, charities) and that Allah Alone is the One Who forgives and accepts repentance, Most Merciful?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 9\n        },\n        \"text\" : \"And say (O Muhammad SAW) \\\"Do deeds! Allah will see your deeds, and (so will) His Messenger and the believers. And you will be brought back to the All-Knower of the unseen and the seen. Then He will inform you of what you used to do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 9\n        },\n        \"text\" : \"And others await Allah's Decree, whether He will punish them or will forgive them. And Allah is All-Knowing, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 9\n        },\n        \"text\" : \"And as for those who put up a mosque by way of harming and disbelief, and to disunite the believers, and as an outpost for those who warred against Allah and His Messenger (Muhammad SAW) aforetime, they will indeed swear that their intention is nothing but good. Allah bears witness that they are certainly liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 9\n        },\n        \"text\" : \"Never stand you therein. Verily, the mosque whose foundation was laid from the first day on piety is more worthy that you stand therein (to pray). In it are men who love to clean and to purify themselves. And Allah loves those who make themselves clean and pure (i.e. who clean their private parts with dust [i.e. to be considered as soap) and water from urine and stools, after answering the call of nature].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 9\n        },\n        \"text\" : \"Is it then he, who laid the foundation of his building on piety to Allah and His Good Pleasure, better, or he who laid the foundation of his building on an undetermined brink of a precipice ready to crumble down, so that it crumbled to pieces with him into the Fire of Hell. And Allah guides not the people who are the Zalimun (cruel, violent, proud, polytheist and wrong-doer).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 9\n        },\n        \"text\" : \"The building which they built will never cease to be a cause of hypocrisy and doubt in their hearts, unless their hearts are cut to pieces. (i.e. till they die). And Allah is All-Knowing, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 9\n        },\n        \"text\" : \"Verily, Allah has purchased of the believers their lives and their properties; for the price that theirs shall be the Paradise. They fight in Allah's Cause, so they kill (others) and are killed. It is a promise in truth which is binding on Him in the Taurat (Torah) and the Injeel (Gospel) and the Quran. And who is truer to his covenant than Allah? Then rejoice in the bargain which you have concluded. That is the supreme success.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 9\n        },\n        \"text\" : \"(The believers whose lives Allah has purchased are) those who repent to Allah (from polytheism and hypocrisy, etc.), who worship Him, who praise Him, who fast (or go out in Allah's Cause), who bow down (in prayer), who prostrate themselves (in prayer), who enjoin (people) for Al-Ma'ruf (i.e. Islamic Monotheism and all what Islam has ordained) and forbid (people) from Al-Munkar (i.e. disbelief, polytheism of all kinds and all that Islam has forbidden), and who observe the limits set by Allah (do all that Allah has ordained and abstain from all kinds of sins and evil deeds which Allah has forbidden). And give glad tidings to the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 113,\n          \"sura\" : 9\n        },\n        \"text\" : \"It is not (proper) for the Prophet and those who believe to ask Allah's Forgiveness for the Mushrikun (polytheists, idolaters, pagans, disbelievers in the Oneness of Allah) even though they be of kin, after it has become clear to them that they are the dwellers of the Fire (because they died in a state of disbelief).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 9\n        },\n        \"text\" : \"And [Ibrahim's (Abraham)] invoking (of Allah) for his father's forgiveness was only because of a promise he [Ibrahim (Abraham)] had made to him (his father). But when it became clear to him [Ibrahim (Abraham)] that he (his father) is an enemy to Allah, he dissociated himself from him. Verily Ibrahim (Abraham) was Al-Awwah (has fifteen different meanings but the correct one seems to be that he used to invoke Allah with humility, glorify Him and remember Him much), and was forbearing. (Tafsir Al-Qurtubi).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 115,\n          \"sura\" : 9\n        },\n        \"text\" : \"And Allah will never lead a people astray after He has guided them until He makes clear to them as to what they should avoid. Verily, Allah is the All-Knower of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 9\n        },\n        \"text\" : \"Verily, Allah! Unto Him belongs the dominion of the heavens and the earth, He gives life and He causes death. And besides Allah you have neither any Wali (protector or guardian) nor any helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 117,\n          \"sura\" : 9\n        },\n        \"text\" : \"Allah has forgiven the Prophet (SAW), the Muhajirun (Muslim emigrants who left their homes and came to Al-Madinah) and the Ansar (Muslims of Al-Madinah) who followed him (Muhammad SAW) in the time of distress (Tabuk expedition, etc.), after the hearts of a party of them had nearly deviated (from the Right Path), but He accepted their repentance. Certainly, He is unto them full of Kindness, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 118,\n          \"sura\" : 9\n        },\n        \"text\" : \"And (He did forgive also) the three [who did not join the Tabuk expedition (whom the Prophet SAW)] left (i.e. he did not give his judgement in their case, and their case was suspended for Allah's Decision) till for them the earth, vast as it is, was straitened and their ownselves were straitened to them, and they perceived that there is no fleeing from Allah, and no refuge but with Him. Then, He accepted their repentance, that they might repent (unto Him). Verily, Allah is the One Who accepts repentance, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 119,\n          \"sura\" : 9\n        },\n        \"text\" : \"O you who believe! Be afraid of Allah, and be with those who are true (in words and deeds).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 120,\n          \"sura\" : 9\n        },\n        \"text\" : \"It was not becoming of the people of Al-Madinah and the bedouins of the neighbourhood to remain behind Allah's Messenger (Muhammad SAW when fighting in Allah's Cause) and (it was not becoming of them) to prefer their own lives to his life. That is because they suffer neither thirst nor fatigue, nor hunger in the Cause of Allah, nor they take any step to raise the anger of disbelievers nor inflict any injury upon an enemy but is written to their credit as a deed of righteousness. Surely, Allah wastes not the reward of the Muhsinun\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 121,\n          \"sura\" : 9\n        },\n        \"text\" : \"Nor do they spend anything (in Allah's Cause) - small or great - nor cross a valley, but is written to their credit, that Allah may recompense them with the best of what they used to do (i.e. Allah will reward their good deeds according to the reward of their best deeds which they did in the most perfect manner).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 122,\n          \"sura\" : 9\n        },\n        \"text\" : \"And it is not (proper) for the believers to go out to fight (Jihad) all together. Of every troop of them, a party only should go forth, that they (who are left behind) may get instructions in (Islamic) religion, and that they may warn their people when they return to them, so that they may beware (of evil).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 123,\n          \"sura\" : 9\n        },\n        \"text\" : \"O you who believe! Fight those of the disbelievers who are close to you, and let them find harshness in you, and know that Allah is with those who are the Al-Muttaqun (the pious - see V. 2:2).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 127,\n          \"sura\" : 9\n        },\n        \"text\" : \"And whenever there comes down a Surah (chapter from the Quran), they look at one another (saying): \\\"Does any one see you?\\\" Then they turn away. Allah has turned their hearts (from the light) because they are a people that understand not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 128,\n          \"sura\" : 9\n        },\n        \"text\" : \"Verily, there has come unto you a Messenger (Muhammad SAW) from amongst yourselves (i.e. whom you know well). It grieves him that you should receive any injury or difficulty. He (Muhammad SAW) is anxious over you (to be rightly guided, to repent to Allah, and beg Him to pardon and forgive your sins, in order that you may enter Paradise and be saved from the punishment of the Hell-fire), for the believers (he SAW is) full of pity, kind, and merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 129,\n          \"sura\" : 9\n        },\n        \"text\" : \"But if they turn away, say (O Muhammad SAW): \\\"Allah is sufficient for me. La ilaha illa Huwa (none has the right to be worshipped but He), in Him I put my trust and He is the Lord of the Mighty Throne.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 10\n        },\n        \"text\" : \"Alif-Lam-Ra. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings]. These are the Verses of the Book (the Quran) Al-Hakim [showing lawful and unlawful things, explaining Allah's (Divine) Laws for mankind, leading them to eternal happiness by ordering them to follow the true Islamic Monotheism, - worshipping none but Allah Alone - that will guide them to Paradise and save them from Hell].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 10\n        },\n        \"text\" : \"Is it wonder for mankind that We have sent Our Inspirationto a man from among themselves (i.e. Prophet Muhammad SAW) (saying): \\\"Warn mankind (of the coming torment in Hell), and give good news to those who believe (in the Oneness of Allah and in His Prophet Muhammad SAW) that they shall have with their Lord the rewards of their good deeds?\\\" (But) the disbelievers say: \\\"This is indeed an evident sorcerer (i.e. Prophet Muhammad SAW and the Quran)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 10\n        },\n        \"text\" : \"Surely, your Lord is Allah Who created the heavens and the earth in six Days and then Istawa (rose over) the Throne (really in a manner that suits His Majesty), disposing the affair of all things. No intercessor (can plead with Him) except after His Leave. That is Allah, your Lord; so worship Him (Alone). Then, will you not remember?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 10\n        },\n        \"text\" : \"To Him is the return of all of you. The Promise of Allah is true. It is He Who begins the creation and then will repeat it, that He may reward with justice those who believed (in the Oneness of Allah - Islamic Monotheism) and did deeds of righteousness. But those who disbelieved will have a drink of boiling fluids and painful torment because they used to disbelieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 10\n        },\n        \"text\" : \"It is He Who made the sun a shining thing and the moon as a light and measured out its (their) stages, that you might know the number of years and the reckoning. Allah did not create this but in truth. He explains the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) in detail for people who have knowledge.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 10\n        },\n        \"text\" : \"Verily, in the alternation of the night and the day and in all that Allah has created in the heavens and the earth are Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) for those people who keep their duty to Allah, and fear Him much.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 10\n        },\n        \"text\" : \"Verily, those who believe [in the Oneness of Allah along with the six articles of Faith, i.e. to believe in Allah, His Angels, His Books, His Messengers, Day of Resurrection, and Al-Qadar (Divine Preordainments) - Islamic Monotheism], and do deeds of righteousness, their Lord will guide them through their Faith; under them will flow rivers in the Gardens of delight (Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 10\n        },\n        \"text\" : \"Their way of request therein will be Subhanaka Allahumma (Glory to You, O Allah!) and Salam (peace, safe from each and every evil) will be their greetings therein (Paradise)! and the close of their request will be: Al-Hamdu Lillahi Rabbil-'Alamin [All the praises and thanks are to Allah, the Lord of 'Alamin (mankind, jinns and all that exists)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 10\n        },\n        \"text\" : \"And were Allah to hasten for mankind the evil (they invoke for themselves and for their children, etc. while in a state of anger) as He hastens for them the good (they invoke) then they would have been ruined. So We leave those who expect not their meeting with Us, in their trespasses, wandering blindly in distraction. (Tafsir At-Tabari; Vol. 11, Page 91)\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"If Allah had so willed, I should not have recited it to you nor would He have made it known to you. Verily, I have stayed amongst you a life time before this. Have you then no sense?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 10\n        },\n        \"text\" : \"So who does more wrong than he who forges a lie against Allah or denies His Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.)? Surely, the Mujrimun (criminals, sinners, disbelievers and polytheists) will never be successful!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 10\n        },\n        \"text\" : \"And they worship besides Allah things that hurt them not, nor profit them, and they say: \\\"These are our intercessors with Allah.\\\" Say: \\\"Do you inform Allah of that which He knows not in the heavens and on the earth?\\\" Glorified and Exalted be He above all that which they associate as partners with Him!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 10\n        },\n        \"text\" : \"And they say: \\\"How is it that not a sign is sent down on him from his Lord?\\\" Say: \\\"The unseen belongs to Allah Alone, so wait you, verily I am with you among those who wait (for Allah's Judgement).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 10\n        },\n        \"text\" : \"And when We let mankind taste of mercy after some adversity has afflicted them, behold! They take to plotting against Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.)! Say: \\\"Allah is more Swift in planning!\\\" Certainly, Our Messengers (angels) record all of that which you plot.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 10\n        },\n        \"text\" : \"He it is Who enables you to travel through land and sea, till when you are in the ships and they sail with them with a favourable wind, and they are glad therein, then comes a stormy wind and the waves come to them from all sides, and they think that they are encircled therein, they invoke Allah, making their Faith pure for Him Alone, saying: \\\"If You (Allah) deliver us from this, we shall truly be of the grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 10\n        },\n        \"text\" : \"But when He delivered them, behold! They rebel (disobey Allah) in the earth wrongfully. O mankind! Your rebellion (disobedience to Allah) is only against your ownselves, - a brief enjoyment of this worldly life, then (in the end) unto Us is your return, and We shall inform you that which you used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 10\n        },\n        \"text\" : \"Verily the likeness of (this) worldly life is as the water (rain) which We send down from the sky, so by it arises the intermingled produce of the earth of which men and cattle eat until when the earth is clad with its adornments and is beautified, and its people think that they have all the powers of disposal over it, Our Command reaches it by night or by day and We make it like a clean-mown harvest, as if it had not flourished yesterday! Thus do We explain the Ayat (proofs, evidences, verses, lessons, signs, revelations, laws, etc.) in detail for the people who reflect.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 10\n        },\n        \"text\" : \"Allah calls to the home of peace (i.e. Paradise, by accepting Allah's religion of Islamic Monotheism and by doing righteous good deeds and abstaining from polytheism and evil deeds) and guides whom He wills to a Straight Path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 10\n        },\n        \"text\" : \"For those who have done good is the best (reward, i.e. Paradise) and even more (i.e. having the honour of glancing at the Countenance of Allah) Neither darkness nor dust nor any humiliating disgrace shall cover their faces. They are the dwellers of Paradise, they will abide therein forever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 10\n        },\n        \"text\" : \"And those who have earned evil deeds, the recompense of an evil deed is the like thereof, and humiliating disgrace will cover them (their faces). No defender will they have from Allah. Their faces will be covered, as it were, with pieces from the darkness of night. They are dwellers of the Fire, they will abide therein forever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 10\n        },\n        \"text\" : \"And the Day whereon We shall gather them all together, then We shall say to those who did set partners in worship with Us: \\\"Stop at your place! You and your partners (whom you had worshipped in the worldly life).\\\" then We shall separate them, and their (Allah's so-called) partners shall say: \\\"It was not us that you used to worship.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 10\n        },\n        \"text\" : \"\\\"So sufficient is Allah for a witness between us and you, that We indeed knew nothing of your worship of us.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 10\n        },\n        \"text\" : \"There! Every person will know (exactly) what (all) he had earned before, and they will be brought back to Allah, their rightful Lord (Maula), and their invented false deities will vanish from them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say (O MuhammadSAW): \\\"Who provides for you from the sky and from the earth? Or who owns hearing and sight? And who brings out the living from the dead and brings out the dead from the living? And who disposes the affairs?\\\" They will say: \\\"Allah.\\\" Say: \\\"Will you not then be afraid of Allah's Punishment (for setting up rivals in worship with Allah)?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 10\n        },\n        \"text\" : \"Such is Allah, your Lord in truth. So after the truth, what else can there be, save error? How then are you turned away?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 10\n        },\n        \"text\" : \"Thus is the Word of your Lord justified against those who rebel (disobey Allah) that they will not believe (in the Oneness of Allah and in Muhammad SAW as the Messenger of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say: \\\"Is there of your (Allah's so-called) partners one that originates the creation and then repeats it?\\\" Say: \\\"Allah originates the creation and then He repeats it. Then how are you deluded away (from the truth)?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say: \\\"Is there of your (Allah's so-called) partners one that guides to the truth?\\\" Say: \\\"It is Allah Who guides to the truth. Is then He, Who gives guidance to the truth, more worthy to be followed, or he who finds not guidance (himself) unless he is guided? Then, what is the matter with you? How judge you?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 10\n        },\n        \"text\" : \"And most of them follow nothing but conjecture. Certainly, conjecture can be of no avail against the truth. Surely, Allah is All-Aware of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 10\n        },\n        \"text\" : \"And this Quran is not such as could ever be produced by other than Allah (Lord of the heavens and the earth), but it is a confirmation of (the revelation) which was before it [i.e. the Taurat (Torah), and the Injeel (Gospel), etc.], and a full explanation of the Book (i.e. laws and orders, etc, decreed for mankind) - wherein there is no doubt from the the Lord of the 'Alamin (mankind, jinns, and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 10\n        },\n        \"text\" : \"Or do they say: \\\"He (Muhammad SAW) has forged it?\\\" Say: \\\"Bring then a Surah (chapter) like unto it, and call upon whomsoever you can, besides Allah, if you are truthful!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 10\n        },\n        \"text\" : \"And of them there are some who believe therein, and of them there are some who believe not therein, and your Lord is All-Aware of the Mufsidun (evil-doers, liars, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 10\n        },\n        \"text\" : \"Truly! Allah wrongs not mankind in aught; but mankind wrong themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 10\n        },\n        \"text\" : \"And on the Day when He shall gather (resurrect) them together, (it will be) as if they had not stayed (in the life of this world and graves, etc.) but an hour of a day. They will recognise each other. Ruined indeed will be those who denied the meeting with Allah, and were not guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 10\n        },\n        \"text\" : \"Whether We show you (in your lifetime, O Muhammad SAW) some of what We promise them (the torment), - or We cause you to die, - still unto Us is their return, and moreover Allah is Witness over what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"I have no power over any harm or profit to myself except what Allah may will. For every Ummah (a community or a nation), there is a term appointed; when their term is reached, neither can they delay it nor can they advance it an hour (or a moment).\\\" (Tafsir Al-Qurtubi).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 10\n        },\n        \"text\" : \"Is it then, that when it has actually befallen, that you will believe in it? What! Now (you believe)? And you used (aforetime) to hasten it on!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 10\n        },\n        \"text\" : \"And if every person who had wronged (by disbelieving in Allah and by worshipping others besides Allah), possessed all that is on earth, and sought to ransom himself therewith (it will not be accepted), and they would feel in their hearts regret when they see the torment, and they will be judged with justice, and no wrong will be done unto them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 10\n        },\n        \"text\" : \"No doubt, surely, all that is in the heavens and the earth belongs to Allah. No doubt, surely, Allah's Promise is true. But most of them know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 10\n        },\n        \"text\" : \"It is He Who gives life, and causes death, and to Him you (all) shall return.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 10\n        },\n        \"text\" : \"O mankind! There has come to you a good advice from your Lord (i.e. the Quran, ordering all that is good and forbidding all that is evil), and a healing for that (disease of ignorance, doubt, hypocrisy and differences, etc.) in your breasts, - a guidance and a mercy (explaining lawful and unlawful things, etc.) for the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say: \\\"In the Bounty of Allah, and in His Mercy (i.e. Islam and the Quran); -therein let them rejoice.\\\" That is better than what (the wealth) they amass.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say (O Muhammad SAW to these polytheists): \\\"Tell me, what provision Allah has sent down to you! And you have made of it lawful and unlawful.\\\" Say (O Muhammad SAW): \\\"Has Allah permitted you (to do so), or do you invent a lie against Allah?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 10\n        },\n        \"text\" : \"And what think those who invent lies against Allah, on the Day of Resurrection? [i.e. Do they think that they will be forgiven and excused! Nay, they will have an eternal punishment in the Fire of Hell]. Truly, Allah is full of Bounty to mankind, but most of them are ungrateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 10\n        },\n        \"text\" : \"Whatever you (O Muhammad SAW) may be doing, and whatever portion you may be reciting from the Quran, - and whatever deed you (mankind) may be doing (good or evil), We are Witness thereof, when you are doing it. And nothing is hidden from your Lord (so much as) the weight of an atom (or small ant) on the earth or in the heaven. Not what is less than that or what is greater than that but is (written) in a Clear Record. (Tafsir At-Tabari. Vol. 11, Page 129).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 10\n        },\n        \"text\" : \"No doubt! Verily, the Auliya' of Allah [i.e. those who believe in the Oneness of Allah and fear Allah much (abstain from all kinds of sins and evil deeds which he has forbidden), and love Allah much (perform all kinds of good deeds which He has ordained)], no fear shall come upon them nor shall they grieve,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 10\n        },\n        \"text\" : \"Those who believed (in the Oneness of Allah - Islamic Monotheism), and used to fear Allah much (by abstaining from evil deeds and sins and by doing righteous deeds).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 10\n        },\n        \"text\" : \"For them are glad tidings, in the life of the present world (i.e. righteous dream seen by the person himself or shown to others), and in the Hereafter. No change can there be in the Words of Allah, this is indeed the supreme success.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 10\n        },\n        \"text\" : \"And let not their speech grieve you (O Muhammad SAW), for all power and honour belong to Allah. He is the All-Hearer, the All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 10\n        },\n        \"text\" : \"No doubt! Verily, to Allah belongs whosoever is in the heavens and whosoever is in the earth. And those who worship and invoke others besides Allah, in fact they follow not the (Allah's so-called) partners, they follow only a conjecture and they only invent lies.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 10\n        },\n        \"text\" : \"They (Jews, Christians and pagans) say: \\\"Allah has begotten a son (children).\\\" Glory be to Him! He is Rich (Free of all wants). His is all that is in the heavens and all that is in the earth. No warrant you have for this. Do you say against Allah what you know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say: \\\"Verily, those who invent lie against Allah will never be successful\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 10\n        },\n        \"text\" : \"A brief enjoyment in this world! - and then unto Us will be their return, then We shall make them taste the severest torment because they used to disbelieve [in Allah, belie His Messengers, deny and challenge His Ayat (proofs, signs, verses, etc.)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 10\n        },\n        \"text\" : \"And recite to them the news of Nuh (Noah). When he said to his people: \\\"O my people, if my stay (with you), and my reminding (you) of the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah is hard on you, then I put my trust in Allah. So devise your plot, you and your partners, and let not your plot be in doubt for you. Then pass your sentence on me and give me no respite.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 10\n        },\n        \"text\" : \"\\\"But if you turn away [from accepting my doctrine of Islamic Monotheism, i.e. to worship none but Allah], then no reward have I asked of you, my reward is only from Allah, and I have been commanded to be one of the Muslims (those who submit to Allah's Will).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 10\n        },\n        \"text\" : \"Then after him We sent Messengers to their people, they brought them clear proofs, but they would not believe what they had already rejected beforehand. Thus We seal the hearts of the transgressors (those who disbelieve in the Oneness of Allah and disobey Him).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 10\n        },\n        \"text\" : \"Then when they had cast down, Musa (Moses) said: \\\"What you have brought is sorcery, Allah will surely make it of no effect. Verily, Allah does not set right the work of Al-Mufsidun (the evil-doers, corrupts, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 10\n        },\n        \"text\" : \"\\\"And Allah will establish and make apparent the truth by His Words, however much the Mujrimun (criminals, disbelievers, polytheists, sinners, etc.) may hate it.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 10\n        },\n        \"text\" : \"But none believed in Musa (Moses) except the offspring of his people, because of the fear of Fir'aun (Pharaoh) and his chiefs, lest they should persecute them; and verily, Fir'aun (Pharaoh) was arrogant tyrant on the earth, he was indeed one of the Musrifun (polytheists, sinners and transgressors, those who give up the truth and follow the evil, and commit all kinds of great sins).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 10\n        },\n        \"text\" : \"And Musa (Moses) said: \\\"O my people! If you have believed in Allah, then put your trust in Him if you are Muslims (those who submit to Allah's Will).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 10\n        },\n        \"text\" : \"They said: \\\"In Allah we put our trust. Our Lord! Make us not a trial for the folk who are Zalimun (polytheists and wrong-doing) (i.e. do not make them overpower us).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 10\n        },\n        \"text\" : \"Allah said: \\\"Verily, the invocation of you both is accepted. So you both keep to the Straight Way (i.e. keep on doing good deeds and preaching Allah's Message with patience), and follow not the path of those who know not (the truth i.e. to believe in the Oneness of Allah, and also to believe in the Reward of Allah: Paradise, etc.).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 10\n        },\n        \"text\" : \"And We took the Children of Israel across the sea, and Fir'aun (Pharaoh) with his hosts followed them in oppression and enmity, till when drowning overtook him, he said: \\\"I believe that La ilaha illa (Huwa): (none has the right to be worshipped but) He,\\\" in Whom the Children of Israel believe, and I am one of the Muslims (those who submit to Allah's Will).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 10\n        },\n        \"text\" : \"So this day We shall deliver your (dead) body (out from the sea) that you may be a sign to those who come after you! And verily, many among mankind are heedless of Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 10\n        },\n        \"text\" : \"And indeed We settled the Children of Israel in an honourable dwelling place (Sham and Misr), and provided them with good things, and they differed not until the knowledge came to them. Verily, Allah will judge between them on the Day of Resurrection in that in which they used to differ.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 10\n        },\n        \"text\" : \"And be not one of those who belie the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah, for then you shall be one of the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 10\n        },\n        \"text\" : \"And had your Lord willed, those on earth would have believed, all of them together. So, will you (O Muhammad SAW) then compel mankind, until they become believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 100,\n          \"sura\" : 10\n        },\n        \"text\" : \"It is not for any person to believe, except by the Leave of Allah, and He will put the wrath on those who are heedless.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say: \\\"Behold all that is in the heavens and the earth,\\\" but neither Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) nor warners benefit those who believe not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"O you mankind! If you are in doubt as to my religion (Islam), then (know that) I will never worship those whom you worship, besides Allah. But I worship Allah Who causes you to die, I am commanded to be one of the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 10\n        },\n        \"text\" : \"\\\"And (it is inspired to me): Direct your face (O Muhammad SAW) entirely towards the religion Hanifa (Islamic Monotheism, i.e. to worship none but Allah Alone), and never be one of the Mushrikun (those who ascribe partners to Allah, polytheists, idolaters, disbelievers in the Oneness of Allah, and those who worship others along with Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 10\n        },\n        \"text\" : \"\\\"And invoke not besides Allah, any that will neither profit you, nor hurt you, but if (in case) you did so, you shall certainly be one of the Zalimun (polytheists and wrong-doers).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 10\n        },\n        \"text\" : \"And if Allah touches you with hurt, there is none who can remove it but He; and if He intends any good for you, there is none who can repel His Favour which He causes it to reach whomsoever of His slaves He will. And He is the Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 10\n        },\n        \"text\" : \"And (O Muhammad SAW), follow the inspiration sent unto you, and be patient till Allah gives judgement. And He is the Best of judges.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 11\n        },\n        \"text\" : \"Alif-Lam-Ra. [These letters are one of the miracles of the Quran and none but Allah (Alone) knows their meanings]. (This is) a Book, the Verses whereof are perfected (in every sphere of knowledge, etc.), and then explained in detail from One (Allah), Who is All-Wise and Well-Acquainted (with all things).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 11\n        },\n        \"text\" : \"(Saying) worship none but Allah. Verily, I (Muhammad SAW) am unto you from Him a warner and a bringer of glad tidings.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 11\n        },\n        \"text\" : \"And (commanding you): \\\"Seek the forgiveness of your Lord, and turn to Him in repentance, that He may grant you good enjoyment, for a term appointed, and bestow His abounding Grace to every owner of grace (i.e. the one who helps and serves needy and deserving, physically and with his wealth, and even with good words). But if you turn away, then I fear for you the torment of a Great Day (i.e. the Day of Resurrection).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 11\n        },\n        \"text\" : \"To Allah is your return, and He is Able to do all things.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 11\n        },\n        \"text\" : \"No doubt! They did fold up their breasts, that they may hide from Him. Surely, even when they cover themselves with their garments, He knows what they conceal and what they reveal. Verily, He is the All-Knower of the (innermost secrets) of the breasts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 11\n        },\n        \"text\" : \"And no (moving) living creature is there on earth but its provision is due from Allah. And He knows its dwelling place and its deposit (in the uterous, grave, etc.). all is in a Clear Book (Al-Lauh Al-Mahfuz - the Book of Decrees with Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 11\n        },\n        \"text\" : \"And He it is Who has created the heavens and the earth in six Days and His Throne was on the water, that He might try you, which of you is the best in deeds. But if you were to say to them: \\\"You shall indeed be raised up after death,\\\" those who disbelieve would be sure to say, \\\"This is nothing but obvious magic.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 11\n        },\n        \"text\" : \"And if We delay the torment for them till a determined term, they are sure to say, \\\"What keeps it back?\\\" Verily, on the day it reaches them, nothing will turn it away from them, and they will be surrounded by (fall in) that at which they used to mock!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 11\n        },\n        \"text\" : \"But if We let him taste good (favour) after evil (poverty and harm) has touched him, he is sure to say: \\\"Ills have departed from me.\\\" Surely, he is exultant, and boastful (ungrateful to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 11\n        },\n        \"text\" : \"So perchance you (Muhammad SAW) may give up a part of what is revealed unto you, and that your breast feels straitened for it because they say, \\\"Why has not a treasure been sent down unto him, or an angel has come with him?\\\" But you are only a warner. And Allah is a Wakil (Disposer of affairs, Trustee, Guardian, etc.) over all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 11\n        },\n        \"text\" : \"Or they say, \\\"He (Prophet Muhammad SAW) forged it (the Quran).\\\" Say: \\\"Bring you then ten forged Surah (chapters) like unto it, and call whomsoever you can, other than Allah (to your help), if you speak the truth!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 11\n        },\n        \"text\" : \"If then they answer you not, know then that the Revelation (this Quran) is sent down with the Knowledge of Allah and that La ilaha illa Huwa: (none has the right to be worshipped but He)! Will you then be Muslims (those who submit to Islam)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 11\n        },\n        \"text\" : \"Whosoever desires the life of the world and its glitter; to them We shall pay in full (the wages of) their deeds therein, and they will have no diminution therein.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 11\n        },\n        \"text\" : \"Can they (Muslims) who rely on a clear proof (the Quran) from their Lord, and whom a witness [Prophet Muhammad SAW through Jibrael (Gabriel)] from Him follows it (can they be equal with the disbelievers); and before it, came the Book of Musa (Moses), a guidance and a mercy, they believe therein, but those of the sects (Jews, Christians and all the other non-Muslim nations) that reject it (the Quran), the Fire will be their promised meeting-place. So be not in doubt about it (i.e. those who denied Prophet Muhammad SAW and also denied all that which he brought from Allah, surely, they will enter Hell). Verily, it is the truth from your Lord, but most of the mankind believe not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 11\n        },\n        \"text\" : \"And who does more wrong than he who invents a lie against Allah. Such will be brought before their Lord, and the witnesses will say, \\\"These are the ones who lied against their Lord!\\\" No doubt! the curse of Allah is on the Zalimun (polytheists, wrong-doers, oppressors, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 11\n        },\n        \"text\" : \"Those who hinder (others) from the Path of Allah (Islamic Monotheism), and seek a crookedness therein, while they are disbelievers in the Hereafter.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 11\n        },\n        \"text\" : \"By no means will they escape (from Allah's Torment) on earth, nor have they protectors besides Allah! Their torment will be doubled! They could not bear to hear (the preachers of the truth) and they used not to see (the truth because of their severe aversion, inspite of the fact that they had the sense of hearing and sight).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 11\n        },\n        \"text\" : \"Verily, those who believe (in the Oneness of Allah - Islamic Monotheism) and do righteous good deeds, and humble themselves (in repentance and obedience) before their Lord, - they will be dwellers of Paradise to dwell therein forever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 11\n        },\n        \"text\" : \"\\\"That you worship none but Allah, surely, I fear for you the torment of a painful Day.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 11\n        },\n        \"text\" : \"He said: \\\"O my people! Tell me, if I have a clear proof from my Lord, and a Mercy (Prophethood, etc.) has come to me from Him, but that (Mercy) has been obscured from your sight. Shall we compel you to accept it (Islamic Monotheism) when you have a strong hatred for it?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 11\n        },\n        \"text\" : \"\\\"And O my people! I ask of you no wealth for it, my reward is from none but Allah. I am not going to drive away those who have believed. Surely, they are going to meet their Lord, but I see that you are a people that are ignorant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 11\n        },\n        \"text\" : \"\\\"And O my people! Who will help me against Allah, if I drove them away? Will you not then give a thought?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 11\n        },\n        \"text\" : \"\\\"And I do not say to you that with me are the Treasures of Allah, \\\"Nor that I know the Ghaib (unseen); \\\"nor do I say I am an angel, and I do not say of those whom your eyes look down upon that Allah will not bestow any good on them. Allah knows what is in their inner-selves (as regards belief, etc.). In that case, I should, indeed be one of the Zalimun (wrong-doers, oppressors, etc.).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 11\n        },\n        \"text\" : \"He said: \\\"Only Allah will bring it (the punishment) on you, if He will, and then you will escape not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 11\n        },\n        \"text\" : \"\\\"And my advice will not profit you, even if I wish to give you good counsel, if Allah's Will is to keep you astray. He is your Lord! and to Him you shall return.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 11\n        },\n        \"text\" : \"Or they (the pagans of Makkah) say: \\\"He (Muhammad SAW) has fabricated it (the Quran).\\\" Say: \\\"If I have fabricated it, upon me be my crimes, but I am innocent of (all) those crimes which you commit.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 11\n        },\n        \"text\" : \"\\\"And you will know who it is on whom will come a torment that will cover him with disgrace and on whom will fall a lasting torment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 11\n        },\n        \"text\" : \"And he [Nuh (Noah)] said: \\\"Embark therein, in the Name of Allah will be its moving course and its resting anchorage. Surely, my Lord is Oft-Forgiving, Most Merciful.\\\" (Tafsir At-Tabari, Vol. 12, Page 43)\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 11\n        },\n        \"text\" : \"So it (the ship) sailed with them amidst the waves like mountains, and Nuh (Noah) called out to his son, who had separated himself (apart), \\\"O my son! Embark with us and be not with the disbelievers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 11\n        },\n        \"text\" : \"The son replied: \\\"I will betake myself to a mountain, it will save me from the water.\\\" Nuh (Noah) said: \\\"This day there is no saviourfrom the Decree of Allah except him on whom He has mercy.\\\" And a wave came in between them, so he (the son) was among the drowned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 11\n        },\n        \"text\" : \"And it was said: \\\"O earth! Swallow up your water, and O sky! Withhold (your rain).\\\" And the water was diminished (made to subside) and the Decree (of Allah) was fulfilled (i.e. the destruction of the people of Nuh (Noah). And it (the ship) rested on Mount Judi, and it was said: \\\"Away with the people who are Zalimun (polytheists and wrong-doing)!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 11\n        },\n        \"text\" : \"And Nuh (Noah) called upon his Lord and said, \\\"O my Lord! Verily, my son is of my family! And certainly, Your Promise is true, and You are the Most Just of the judges.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 11\n        },\n        \"text\" : \"It was said: \\\"O Nuh (Noah)! Come down (from the ship) with peace from Us and blessings on you and on the people who are with you (and on some of their off spring), but (there will be other) people to whom We shall grant their pleasures (for a time), but in the end a painful torment will reach them from Us.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 11\n        },\n        \"text\" : \"And to 'Ad (people We sent) their brother Hud. He said, \\\"O my people! Worship Allah! You have no other Ilah (God) but Him. Certainly, you do nothing but invent (lies)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 11\n        },\n        \"text\" : \"\\\"And O my people! Ask forgiveness of your Lord and then repent to Him, He will send you (from the sky) abundant rain, and add strength to your strength, so do not turn away as Mujrimun (criminals, disbelievers in the Oneness of Allah).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 11\n        },\n        \"text\" : \"They said: \\\"O Hud! No evidence have you brought us, and we shall not leave our gods for your (mere) saying! And we are not believers in you.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 11\n        },\n        \"text\" : \"\\\"All that we say is that some of our gods (false deities) have seized you with evil (madness).\\\" He said: \\\"I call Allah to witness and bear you witness that I am free from that which you ascribe as partners in worship,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 11\n        },\n        \"text\" : \"With Him (Allah). So plot against me, all of you, and give me no respite.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 11\n        },\n        \"text\" : \"\\\"I put my trust in Allah, my Lord and your Lord! There is not a moving (living) creature but He has grasp of its forelock. Verily, my Lord is on the Straight Path (the truth).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 11\n        },\n        \"text\" : \"\\\"So if you turn away, still I have conveyed the Message with which I was sent to you. My Lord will make another people succeed you, and you will not harm Him in the least. Surely, my Lord is Guardian over all things.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 11\n        },\n        \"text\" : \"And to Thamud (people, We sent) their brother Salih (Saleh). He said: \\\"O my people! Worship Allah, you have no other Ilah (God) but Him. He brought you forth from the earth and settled you therein, then ask forgiveness of Him and turn to Him in repentance. Certainly, my Lord is Near (to all by His Knowledge), Responsive.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 11\n        },\n        \"text\" : \"They said: \\\"O Salih (Saleh)! You have been among us as a figure of good hope (and we wished for you to be our chief), till this [new thing which you have brought; that we leave our gods and worship your God (Allah) Alone]! Do you (now) forbid us the worship of what our fathers have worshipped? But we are really in grave doubt as to that which you invite us to (monotheism).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 11\n        },\n        \"text\" : \"He said: \\\"O my people! Tell me, if I have a clear proof from my Lord, and there has come to me a Mercy (Prophethood, etc.) from Him, who then can help me against Allah, if I were to disobey Him? Then you increase me not but in loss.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 11\n        },\n        \"text\" : \"\\\"And O my people! This she-camel of Allah is a sign to you, leave her to feed on Allah's earth, and touch her not with evil, lest a near torment will seize you.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 11\n        },\n        \"text\" : \"So when Our Commandment came, We saved Salih (Saleh) and those who believed with him by a Mercy from Us, and from the disgrace of that Day. Verily, your Lord, He is the All-Strong, the All-Mighty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 11\n        },\n        \"text\" : \"She said (in astonishment): \\\"Woe unto me! Shall I bear a child while I am an old woman, and here is my husband, an old man? Verily! This is a strange thing!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 11\n        },\n        \"text\" : \"They said: \\\"Do you wonder at the Decree of Allah? The Mercy of Allah and His Blessings be on you, O the family [of Ibrahim (Abraham)]. Surely, He (Allah) is All-Praiseworthy, All-Glorious.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 11\n        },\n        \"text\" : \"Verily, Ibrahim (Abraham) was, without doubt, forbearing, used to invoke Allah with humility, and was repentant (to Allah all the time, again and again).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 11\n        },\n        \"text\" : \"And his people came rushing towards him, and since aforetime they used to commit crimes (sodomy, etc.), he said: \\\"O my people! Here are my daughters (i.e. the daughters of my nation), they are purer for you (if you marry them lawfully). So fear Allah and degrade me not as regards my guests! Is there not among you a single right-minded man?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 11\n        },\n        \"text\" : \"They (Messengers) said: \\\"O Lout (Lot)! Verily, we are the Messengers from your Lord! They shall not reach you! So travel with your family in a part of the night, and let not any of you look back, but your wife (will remain behind), verily, the punishment which will afflict them, will afflict her. Indeed, morning is their appointed time. Is not the morning near?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 11\n        },\n        \"text\" : \"And to the Madyan (Midian) people (We sent) their brother Shu'aib. He said: \\\"O my people! Worship Allah, you have no other Ilah (God) but Him, and give not short measure or weight, I see you in prosperity; and verily I fear for you the torment of a Day encompassing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 11\n        },\n        \"text\" : \"\\\"That which is left by Allah for you (after giving the rights of the people) is better for you, if you are believers. And I am not set over you as a guardian.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 11\n        },\n        \"text\" : \"They said: \\\"O Shu'aib! Does your Salat (prayer) (i.e. the prayers which you offer has spoiled your mind, so you) command that we leave off what our fathers used to worship, or that we leave off doing what we like with our property? Verily, you are the forbearer, right-minded!\\\" (They said this sarcastically).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 11\n        },\n        \"text\" : \"He said: \\\"O my people! Tell me, if I have a clear evidence from my Lord, and He has given me a good sustenance from Himself (shall I corrupt it by mixing it with the unlawfully earned money). I wish not, in contradiction to you, to do that which I forbid you. I only desire reform so far as I am able, to the best of my power. And my guidance cannot come except from Allah, in Him I trust and unto Him I repent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 11\n        },\n        \"text\" : \"He said: \\\"O my people! Is then my family of more weight with you than Allah? And you have cast Him away behind your backs. Verily, my Lord is surrounding all that you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 11\n        },\n        \"text\" : \"As if they had never lived there! So away with Madyan (Midian)! As away with Thamud! (All these nations were destroyed).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 11\n        },\n        \"text\" : \"We wronged them not, but they wronged themselves. So their aliha (gods), other than Allah, whom they invoked, profited them naught when there came the Command of your Lord, nor did they add aught (to their lot) but destruction.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 11\n        },\n        \"text\" : \"Indeed in that (there) is a sure lesson for those who fear the torment of the Hereafter. That is a Day whereon mankind will be gathered together, and that is a Day when all (the dwellers of the heavens and the earth) will be present.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 11\n        },\n        \"text\" : \"On the Day when it comes, no person shall speak except by His (Allah's) Leave. Some among them will be wretched and (others) blessed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 11\n        },\n        \"text\" : \"They will dwell therein for all the time that the heavens and the earth endure, except as your Lord wills. Verily, your Lord is the doer of what He wills.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 11\n        },\n        \"text\" : \"And those who are blessed, they will be in Paradise, abiding therein for all the time that the heavens and the earth endure, except as your Lord will, a gift without an end.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 11\n        },\n        \"text\" : \"So be not in doubt (O Muhammad SAW) as to what these (pagans and polytheists) men worship. They worship nothing but what their fathers worshipped before (them). And verily, We shall repay them in full their portion without diminution.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 11\n        },\n        \"text\" : \"And verily, to each of them your Lord will repay their works in full. Surely, He is All-Aware of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 11\n        },\n        \"text\" : \"So stand (ask Allah to make) you (Muhammad SAW) firm and straight (on the religion of Islamic Monotheism) as you are commanded and those (your companions) who turn in repentance (unto Allah) with you, and transgress not (Allah's legal limits). Verily, He is All-Seer of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 113,\n          \"sura\" : 11\n        },\n        \"text\" : \"And incline not toward those who do wrong, lest the Fire should touch you, and you have no protectors other than Allah, nor you would then be helped.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 11\n        },\n        \"text\" : \"And perform As-Salat (Iqamat-as-Salat), at the two ends of the day and in some hours of the night [i.e. the five compulsory Salat (prayers)]. Verily, the good deeds remove the evil deeds (i.e. small sins). That is a reminder (an advice) for the mindful (those who accept advice).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 115,\n          \"sura\" : 11\n        },\n        \"text\" : \"And be patient; verily, Allah loses not the reward of the good-doers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 11\n        },\n        \"text\" : \"If only there had been among the generations before you, persons having wisdom, prohibiting (others) from Al-Fasad (disbelief, polytheism, and all kinds of crimes and sins) in the earth, except a few of those whom We saved from among them. Those who did wrong pursued the enjoyment of good things of (this worldly) life, and were Mujrimun (criminals, disbelievers in Allah, polytheists, sinners, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 119,\n          \"sura\" : 11\n        },\n        \"text\" : \"Except him on whom your Lord has bestowed His Mercy (the follower of truth - Islamic Monotheism) and for that did He create them. And the Word of your Lord has been fulfilled (i.e. His Saying): \\\"Surely, I shall fill Hell with jinns and men all together.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 120,\n          \"sura\" : 11\n        },\n        \"text\" : \"And all that We relate to you (O Muhammad SAW) of the news of the Messengers is in order that We may make strong and firm your heart thereby. And in this (chapter of the Quran) has come to you the truth, as well as an admonition and a reminder for the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 123,\n          \"sura\" : 11\n        },\n        \"text\" : \"And to Allah belongs the Ghaib (unseen) of the heavens and the earth, and to Him return all affairs (for decision). So worship Him (O Muhammad SAW) and put your trust in Him. And your Lord is not unaware of what you (people) do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 12\n        },\n        \"text\" : \"Alif-Lam-Ra. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings]. These are the Verses of the Clear Book (the Quran that makes clear the legal and illegal things, legal laws, a guidance and a blessing).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 12\n        },\n        \"text\" : \"\\\"Thus will your Lord choose you and teach you the interpretation of dreams (and other things) and perfect His Favour on you and on the offspring of Ya'qub (Jacob), as He perfected it on your fathers, Ibrahim (Abraham) and Ishaque (Isaac) aforetime! Verily, your Lord is All-Knowing, All-Wise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 12\n        },\n        \"text\" : \"When they said: \\\"Truly, Yusuf (Joseph) and his brother (Benjamin) are loved more by our father than we, but we are 'Usbah (a strong group). Really, our father is in a plain error.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 12\n        },\n        \"text\" : \"So, when they took him away, they all agreed to throw him down to the bottom of the well, and We inspired in him:\\\"Indeed, you shall (one day) inform them of this their affair, when they know (you) not.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 12\n        },\n        \"text\" : \"And they brought his shirt stained with false blood. He said: \\\"Nay, but your ownselves have made up a tale. So (for me) patience is most fitting. And it is Allah (Alone) Whose help can be sought against that which you assert.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 12\n        },\n        \"text\" : \"And there came a caravan of travellers; they sent their water-drawer, and he let down his bucket (into the well). He said: \\\"What good news! Here is a boy.\\\" So they hid him as merchandise (a slave). And Allah was the All-Knower of what they did.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 12\n        },\n        \"text\" : \"And he (the man) from Egypt who bought him, said to his wife: \\\"Make his stay comfortable, may be he will profit us or we shall adopt him as a son.\\\" Thus did We establish Yusuf (Joseph) in the land, that We might teach him the interpretation of events. And Allah has full power and control over His Affairs, but most of men know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 12\n        },\n        \"text\" : \"And she, in whose house he was, sought to seduce him (to do an evil act), she closed the doors and said: \\\"Come on, O you.\\\" He said: \\\"I seek refuge in Allah (or Allah forbid)! Truly, he (your husband) is my master! He made my stay agreeable! (So I will never betray him). Verily, the Zalimun (wrong and evil-doers) will never be successful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 12\n        },\n        \"text\" : \"So when she heard of their accusation, she sent for them and prepared a banquet for them; she gave each one of them a knife (to cut the foodstuff with), and she said [(to Yusuf (Joseph)]: \\\"Come out before them.\\\" Then, when they saw him, they exalted him (at his beauty) and (in their astonishment) cut their hands. They said: \\\"How perfect is Allah (or Allah forbid)! No man is this! This is none other than a noble angel!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 12\n        },\n        \"text\" : \"She said: \\\"This is he (the young man) about whom you did blame me (for his love), and I did seek to seduce him, but he refused. And now if he refuses to obey my order, he shall certainly be cast into prison, and will be one of those who are disgraced.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 12\n        },\n        \"text\" : \"So his Lord answered his invocation and turned away from him their plot. Verily, He is the All-Hearer, the All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 12\n        },\n        \"text\" : \"He said: \\\"No food will come to you (in wakefulness or in dream) as your provision, but I will inform (in wakefulness) its interpretation before it (the food) comes. This is of that which my Lord has taught me. Verily, I have abandoned the religion of a people that believe not in Allah and are disbelievers in the Hereafter (i.e. the Kan'aniun of Egypt who were polytheists and used to worship sun and other false deities).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 12\n        },\n        \"text\" : \"\\\"And I have followed the religion of my fathers, - Ibrahim (Abraham), Ishaque (Isaac) and Ya'qub (Jacob)], and never could we attribute any partners whatsoever to Allah. This is from the Grace of Allah to us and to mankind, but most men thank not (i.e. they neither believe in Allah, nor worship Him).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 12\n        },\n        \"text\" : \"\\\"O two companions of the prison! Are many different lords (gods) better or Allah, the One, the Irresistible?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 12\n        },\n        \"text\" : \"\\\"You do not worship besides Him but only names which you have named (forged), you and your fathers, for which Allah has sent down no authority. The command (or the judgement) is for none but Allah. He has commanded that you worship none but Him (i.e. His Monotheism), that is the (true) straight religion, but most men know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 12\n        },\n        \"text\" : \"And he said to the one whom he knew to be saved: \\\"Mention me to your lord (i.e. your king, so as to get me out of the prison).\\\" But Shaitan (Satan) made him forget to mention it to his Lord [or Satan made [(Yusuf (Joseph)] to forget the remembrance of his Lord (Allah) as to ask for His Help, instead of others]. So [Yusuf (Joseph)] stayed in prison a few (more) years.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 12\n        },\n        \"text\" : \"[(Yusuf (Joseph)] said: \\\"For seven consecutive years, you shall sow as usual and that (the harvest) which you reap you shall leave in ears, (all) - except a little of it which you may eat.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 12\n        },\n        \"text\" : \"\\\"Then will come after that, seven hard (years), which will devour what you have laid by in advance for them, (all) except a little of that which you have guarded (stored).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 12\n        },\n        \"text\" : \"And the king said: \\\"Bring him to me.\\\" But when the messenger came to him, [Yusuf (Joseph)] said: \\\"Return to your lord and ask him, 'What happened to the women who cut their hands? Surely, my Lord (Allah) is Well-Aware of their plot. \"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 12\n        },\n        \"text\" : \"(The King) said (to the women): \\\"What was your affair when you did seek to seduce Yusuf (Joseph)?\\\" The women said: \\\"Allah forbid! No evil know we against him!\\\" The wife of Al-'Aziz said: \\\"Now the truth is manifest (to all), it was I who sought to seduce him, and he is surely of the truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 12\n        },\n        \"text\" : \"[Then Yusuf (Joseph) said: \\\"I asked for this enquiry] in order that he (Al-'Aziz) may know that I betrayed him not in secret. And, verily! Allah guides not the plot of the betrayers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 12\n        },\n        \"text\" : \"And verily, the reward of the Hereafter is better for those who believe and used to fear Allah and keep their duty to Him (by abstaining from all kinds of sins and evil deeds and by performing all kinds of righteous good deeds).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 12\n        },\n        \"text\" : \"\\\"But if you bring him not to me, there shall be no measure (of corn) for you with me, nor shall you come near me.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said: \\\"We shall try to get permission (for him) from his father, and verily, we shall do it.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 12\n        },\n        \"text\" : \"So, when they returned to their father, they said: \\\"O our father! No more measure of grain shall we get (unless we take our brother). So send our brother with us, and we shall get our measure and truly we will guard him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 12\n        },\n        \"text\" : \"He said: \\\"Can I entrust him to you except as I entrusted his brother [Yusuf (Joseph)] to you aforetime? But Allah is the Best to guard, and He is the Most Merciful of those who show mercy.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 12\n        },\n        \"text\" : \"And when they opened their bags, they found their money had been returned to them. They said: \\\"O our father! What (more) can we desire? This, our money has been returned to us, so we shall get (more) food for our family, and we shall guard our brother and add one more measure of a camel's load. This quantity is easy (for the king to give).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 12\n        },\n        \"text\" : \"He [Ya'qub (Jacob)] said: \\\"I will not send him with you until you swear a solemn oath to me in Allah's Name, that you will bring him back to me unless you are yourselves surrounded (by enemies, etc.),\\\" And when they had sworn their solemn oath, he said: \\\"Allah is the Witness over what we have said.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 12\n        },\n        \"text\" : \"And he said: \\\"O my sons! Do not enter by one gate, but enter by different gates, and I cannot avail you against Allah at all. Verily! The decision rests only with Allah. In him, I put my trust and let all those that trust, put their trust in Him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 12\n        },\n        \"text\" : \"And when they entered according to their father's advice, it did not avail them in the least against (the Will of) Allah, it was but a need of Ya'qub's (Jacob) inner-self which he discharged. And verily, he was endowed with knowledge because We had taught him, but most men know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said: \\\"By Allah! Indeed you know that we came not to make mischief in the land, and we are no thieves!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 12\n        },\n        \"text\" : \"They [Yusuf's (Joseph) men] said: \\\"What then shall be the penalty of him, if you are (proved to be) liars.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 12\n        },\n        \"text\" : \"So he [Yusuf (Joseph)] began (the search) in their bags before the bag of his brother. Then he brought it out of his brother's bag. Thus did We plan for Yusuf (Joseph). He could not take his brother by the law of the king (as a slave), except that Allah willed it. (So Allah made the brothers to bind themselves with their way of \\\"punishment, i.e. enslaving of a thief.\\\") We raise to degrees whom We please, but over all those endowed with knowledge is the All-Knowing (Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 12\n        },\n        \"text\" : \"They [(Yusuf's (Joseph) brothers] said: \\\"If he steals, there was a brother of his [Yusuf (Joseph)] who did steal before (him).\\\" But these things did Yusuf (Joseph) keep in himself, revealing not the secrets to them. He said (within himself): \\\"You are in worst case, and Allah knows best the truth of what you assert!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 12\n        },\n        \"text\" : \"He said: \\\"Allah forbid, that we should take anyone but him with whom we found our property. Indeed (if we did so), we should be Zalimun (wrong-doers).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 12\n        },\n        \"text\" : \"So, when they despaired of him, they held a conference in private. The eldest among them said: \\\"Know you not that your father did take an oath from you in Allah's Name, and before this you did fail in your duty with Yusuf (Joseph)? Therefore I will not leave this land until my father permits me, or Allah decides my case (by releasing Benjamin) and He is the Best of the judges.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 12\n        },\n        \"text\" : \"He [Ya'qub (Jacob)] said: \\\"Nay, but your ownselves have beguiled you into something. So patience is most fitting (for me). May be Allah will bring them (back) all to me. Truly He! only He is All-Knowing, All-Wise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said: \\\"By Allah! You will never cease remembering Yusuf (Joseph) until you become weak with old age, or until you be of the dead.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 12\n        },\n        \"text\" : \"He said: \\\"I only complain of my grief and sorrow to Allah, and I know from Allah that which you know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 12\n        },\n        \"text\" : \"\\\"O my sons! Go you and enquire about Yusuf (Joseph) and his brother, and never give up hope of Allah's Mercy. Certainly no one despairs of Allah's Mercy, except the people who disbelieve.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 12\n        },\n        \"text\" : \"Then, when they entered unto him [Yusuf (Joseph)], they said: \\\"O ruler of the land! A hard time has hit us and our family, and we have brought but poor capital, so pay us full measure and be charitable to us. Truly, Allah does reward the charitable.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said: \\\"Are you indeed Yusuf (Joseph)?\\\" He said: \\\"I am Yusuf (Joseph), and this is my brother (Benjamin). Allah has indeed been gracious to us. Verily, he who fears Allah with obedience to Him (by abstaining from sins and evil deeds, and by performing righteous good deeds), and is patient, then surely, Allah makes not the reward of the Muhsinun (good-doers - see V. 2:112) to be lost.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said: \\\"By Allah! Indeed Allah has preferred you above us, and we certainly have been sinners.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 12\n        },\n        \"text\" : \"He said: \\\"No reproach on you this day, may Allah forgive you, and He is the Most Merciful of those who show mercy!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 12\n        },\n        \"text\" : \"\\\"Go with this shirt of mine, and cast it over the face of my father, he will become clear-sighted, and bring to me all your family.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said: \\\"By Allah! Certainly, you are in your old error.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 12\n        },\n        \"text\" : \"Then, when the bearer of the glad tidings arrived, he cast it (the shirt) over his face, and he became clear-sighted. He said: \\\"Did I not say to you, 'I know from Allah that which you know not. \"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said: \\\"O our father! Ask forgiveness (from Allah) for our sins, indeed we have been sinners.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 12\n        },\n        \"text\" : \"Then, when they entered unto Yusuf (Joseph), he betook his parents to himself and said: \\\"Enter Egypt, if Allah wills, in security.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 100,\n          \"sura\" : 12\n        },\n        \"text\" : \"And he raised his parents to the throne and they fell down before him prostrate. And he said: \\\"O my father! This is the interpretation of my dream aforetime! My Lord has made it come true! He was indeed good to me, when He took me out of the prison, and brought you (all here) out of the bedouin-life, after Shaitan (Satan) had sown enmity between me and my brothers. Certainly, my Lord is the Most Courteous and Kind unto whom He will. Truly He! Only He is the All-Knowing, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 12\n        },\n        \"text\" : \"And most of them believe not in Allah except that they attribute partners unto Him [i.e. they are Mushrikun -polytheists - see Verse 6:121].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 12\n        },\n        \"text\" : \"Do they then feel secure from the coming against them of the covering veil of the Torment of Allah, or of the coming against them of the (Final) Hour, all of a sudden while they perceive not?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 12\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"This is my way; I invite unto Allah (i.e. to the Oneness of Allah - Islamic Monotheism) with sure knowledge, I and whosoever follows me (also must invite others to Allah i.e. to the Oneness of Allah - Islamic Monotheism) with sure knowledge. And Glorified and Exalted be Allah (above all that they associate as partners with Him). And I am not of the Mushrikun (polytheists, pagans, idolaters and disbelievers in the Oneness of Allah; those who worship others along with Allah or set up rivals or partners to Allah).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 12\n        },\n        \"text\" : \"And We sent not before you (as Messengers) any but men, whom We inspired from among the people of townships. Have they not travelled through the earth and seen what was the end of those who were before them? And verily, the home of the Hereafter is the best for those who fear Allah and obey Him (by abstaining from sins and evil deeds, and by performing righteous good deeds). Do you not then understand?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 12\n        },\n        \"text\" : \"(They were reprieved) until, when the Messengers gave up hope and thought that they were denied (by their people), then came to them Our Help, and whomsoever We willed were delivered. And Our Punishment cannot be warded off from the people who are Mujrimun (criminals, disobedients to Allah, sinners, disbelievers, polytheists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 12\n        },\n        \"text\" : \"Indeed in their stories, there is a lesson for men of understanding. It (the Quran) is not a forged statement but a confirmation of the Allah's existing Books [the Taurat (Torah), the Injeel (Gospel) and other Scriptures of Allah] and a detailed explanation of everything and a guide and a Mercy for the people who believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 13\n        },\n        \"text\" : \"Alif-Lam-Mim-Ra [These letters are one of the miracles of the Quran and none but Allah (Alone) knows their meanings]. These are the Verses of the Book (the Quran), and that which has been revealed unto you (Muhammad SAW) from your Lord is the truth, but most men believe not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 13\n        },\n        \"text\" : \"Allah is He Who raised the heavens without any pillars that you can see. Then, He Istawa (rose above) the Throne (really in a manner that suits His Majesty). He has subjected the sun and the moon (to continue going round)! Each running (its course) for a term appointed. He regulates all affairs, explaining the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) in detail, that you may believe with certainty in the meeting with your Lord.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 13\n        },\n        \"text\" : \"And it is He Who spread out the earth, and placed therein firm mountains and rivers and of every kind of fruits He made Zawjain Ithnain (two in pairs - may mean two kinds or it may mean: of two sorts, e.g. black and white, sweet and sour, small and big, etc.) He brings the night as a cover over the day. Verily, in these things, there are Ayat (proofs, evidences, lessons, signs, etc.) for people who reflect.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 13\n        },\n        \"text\" : \"And if you (O Muhammad SAW) wonder (at these polytheists who deny your message of Islamic Monotheism and have taken besides Allah others for worship who can neither harm nor benefit), then wondrous is their saying: \\\"When we are dust, shall we indeed then be (raised) in a new creation?\\\" They are those who disbelieve in their Lord! They are those who will have iron chains tying their hands to their necks. They will be dwellers of the Fire to abide therein.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 13\n        },\n        \"text\" : \"Allah knows what every female bears, and by how much the wombs fall short (of their time or number) or exceed. Everything with Him is in (due) proportion.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 13\n        },\n        \"text\" : \"All-Knower of the unseen and the seen, the Most Great, the Most High.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 13\n        },\n        \"text\" : \"For each (person), there are angels in succession, before and behind him. They guard him by the Command of Allah. Verily! Allah will not change the good condition of a people as long as they do not change their state of goodness themselves (by committing sins and by being ungrateful and disobedient to Allah). But when Allah wills a people's punishment, there can be no turning back of it, and they will find besides Him no protector.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 13\n        },\n        \"text\" : \"And Ar-Ra'd (thunder) glorifies and praises Him, and so do the angels because of His Awe, He sends the thunderbolts, and therewith He strikes whom He wills, yet they (disbelievers) dispute about Allah. And He is Mighty in strength and Severe in punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 13\n        },\n        \"text\" : \"And unto Allah (Alone) falls in prostration whoever is in the heavens and the earth, willingly or unwillingly, and so do their shadows in the mornings and in the afternoons.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 13\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Who is the Lord of the heavens and the earth?\\\" Say: \\\"(It is) Allah.\\\" Say: \\\"Have you then taken (for worship) Auliya' (protectors, etc.) other than Him, such as have no power either for benefit or for harm to themselves?\\\" Say: \\\"Is the blind equal to the one who sees? Or darkness equal to light? Or do they assign to Allah partners who created the like of His creation, so that the creation (which they made and His creation) seemed alike to them.\\\" Say: \\\"Allah is the Creator of all things, He is the One, the Irresistible.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 13\n        },\n        \"text\" : \"He sends down water (rain) from the sky, and the valleys flow according to their measure, but the flood bears away the foam that mounts up to the surface, and (also) from that (ore) which they heat in the fire in order to make ornaments or utensils, rises a foam like unto it, thus does Allah (by parables) show forth truth and falsehood. Then, as for the foam it passes away as scum upon the banks, while that which is for the good of mankind remains in the earth. Thus Allah sets forth parables (for the truth and falsehood, i.e. Belief and disbelief).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 13\n        },\n        \"text\" : \"For those who answered their Lord's Call [believed in the Oneness of Allah and followed His Messenger Muhammad SAW i.e. Islamic Monotheism] is Al-Husna (i.e. Paradise). But those who answered not His Call (disbelieved in the Oneness of Allah and followed not His Messenger Muhammad SAW), if they had all that is in the earth together with its like, they would offer it in order to save themselves (from the torment, it will be in vain). For them there will be the terrible reckoning. Their dwelling place will be Hell; - and worst indeed is that place for rest.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 13\n        },\n        \"text\" : \"Shall he then who knows that what has been revealed unto you (O Muhammad SAW) from your Lord is the truth be like him who is blind? But it is only the men of understanding that pay heed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 13\n        },\n        \"text\" : \"Those who fulfill the Covenant of Allah and break not the Mithaq (bond, treaty, covenant);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 13\n        },\n        \"text\" : \"Those who join that which Allah has commanded to be joined (i.e. they are good to their relatives and do not sever the bond of kinship), fear their Lord, and dread the terrible reckoning (i.e. abstain from all kinds of sins and evil deeds which Allah has forbidden and perform all kinds of good deeds which Allah has ordained).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 13\n        },\n        \"text\" : \"'Adn (Eden) Paradise (everlasting Gardens), which they shall enter and (also) those who acted righteously from among their fathers, and their wives, and their offspring. And angels shall enter unto them from every gate (saying):\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 13\n        },\n        \"text\" : \"And those who break the Covenant of Allah, after its ratification, and sever that which Allah has commanded to be joined (i.e. they sever the bond of kinship and are not good to their relatives), and work mischief in the land, on them is the curse (i.e. they will be far away from Allah's Mercy); And for them is the unhappy (evil) home (i.e. Hell).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 13\n        },\n        \"text\" : \"Allah increases the provision for whom He wills, and straitens (it for whom He wills), and they rejoice in the life of the world, whereas the life of this world as compared with the Hereafter is but a brief passing enjoyment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 13\n        },\n        \"text\" : \"And those who disbelieve say: \\\"Why is not a sign sent down to him (Muhammad SAW) from his Lord?\\\" Say: \\\"Verily, Allah sends astray whom He wills and guides unto Himself those who turn to Him in repentance.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 13\n        },\n        \"text\" : \"Those who believe (in the Oneness of Allah - Islamic Monotheism), and whose hearts find rest in the remembrance of Allah, Verily, in the remembrance of Allah do hearts find rest.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 13\n        },\n        \"text\" : \"Those who believe (in the Oneness of Allah - Islamic Monotheism), and work righteousness, Tuba (it means all kinds of happiness or name of a tree in Paradise) is for them and a beautiful place of (final) return.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 13\n        },\n        \"text\" : \"Thus have We sent you (O Muhammad SAW) to a community before whom other communities have passed away, in order that you might recite unto them what We have inspired to you, while they disbelieve in the Most Beneficient (Allah) Say: \\\"He is my Lord! La ilaha illa Huwa (none has the right to be worshipped but He)! In Him is my trust, and to Him will be my return with repentance.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 13\n        },\n        \"text\" : \"And if there had been a Quran with which mountains could be moved (from their places), or the earth could be cloven asunder, or the dead could be made to speak (it would not have been other than this Quran). But the decision of all things is certainly with Allah. Have not then those who believe yet known that had Allah willed, He could have guided all mankind? And a disaster will not cease to strike those who disbelieve because of their (evil) deeds or it (i.e. the disaster) settle close to their homes, until the Promise of Allah comes to pass. Certainly, Allah does not fail in His Promise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 13\n        },\n        \"text\" : \"And indeed (many) Messengers were mocked at before you (O Muhammad SAW), but I granted respite to those who disbelieved, and finally I punished them. Then how (terrible) was My Punishment!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 13\n        },\n        \"text\" : \"Is then He (Allah) Who takes charge (guards, maintains, provides, etc.) of every person and knows all that he has earned (like any other deities who know nothing)? Yet they ascribe partners to Allah. Say: \\\"Name them! Is it that you will inform Him of something He knows not in the earth or is it (just) a show of false words.\\\" Nay! To those who disbelieve, their plotting is made fairseeming, and they have been hindered from the Right Path, and whom Allah sends astray, for him, there is no guide.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 13\n        },\n        \"text\" : \"For them is a torment in the life of this world, and certainly, harder is the torment of the Hereafter. And they have no protector against Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 13\n        },\n        \"text\" : \"Those to whom We have given the Book (such as 'Abdullah bin Salam and other Jews who embraced Islam), rejoice at what has been revealed unto you (i.e. the Quran), but there are among the Confederates (from the Jews and pagans) those who reject a part thereof. Say (O Muhammad SAW): \\\"I am commanded only to worship Allah (Alone) and not to join partners with Him. To Him (Alone) I call and to Him is my return.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 13\n        },\n        \"text\" : \"And thus have We sent it (the Quran) down to be a judgement of authority in Arabic. Were you (O Muhammad SAW) to follow their (vain) desires after the knowledge which has come to you, then you will not have any Wali (protector) or defender against Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 13\n        },\n        \"text\" : \"And indeed We sent Messengers before you (O Muhammad SAW), and made for them wives and offspring. And it was not for a Messenger to bring a sign except by Allah's Leave. (For) each and every matter there is a Decree (from Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 13\n        },\n        \"text\" : \"Allah blots out what He wills and confirms (what He wills). And with Him is the Mother of the Book (Al-Lauh Al-Mahfuz)\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 13\n        },\n        \"text\" : \"See they not that We gradually reduce the land (of disbelievers, by giving it to the believers, in war victories) from its outlying borders. And Allah judges, there is none to put back His Judgement and He is Swift at reckoning.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 13\n        },\n        \"text\" : \"And verily, those before them did devise plots, but all planning is Allah's. He knows what every person earns, and the disbelievers will know who gets the good end (final destination).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 13\n        },\n        \"text\" : \"And those who disbelieve, say: \\\"You (O Muhammad SAW) are not a Messenger.\\\" Say: \\\"Sufficient for a witness between me and you is Allah and those too who have knowledge of the Scripture (such as 'Abdullah bin Salam and other Jews and Christians who embraced Islam).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 14\n        },\n        \"text\" : \"Alif-Lam-Ra. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings]. (This is) a Book which We have revealed unto you (O Muhammad SAW) in order that you might lead mankind out of darkness (of disbelief and polytheism) into light (of belief in the Oneness of Allah and Islamic Monotheism) by their Lord's Leave to the Path of the All-Mighty, the Owner of all Praise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 14\n        },\n        \"text\" : \"Allah to Whom belongs all that is in the heavens and all that is in the earth! And woe unto the disbelievers from a severe torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 14\n        },\n        \"text\" : \"Those who prefer the life of this world instead of the Hereafter, and hinder (men) from the Path of Allah (i.e. Islam) and seek crookedness therein - They are far astray.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 14\n        },\n        \"text\" : \"And We sent not a Messenger except with the language of his people, in order that he might make (the Message) clear for them. Then Allah misleads whom He wills and guides whom He wills. And He is the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 14\n        },\n        \"text\" : \"And indeed We sent Musa (Moses) with Our Ayat (signs, proofs, and evidences) (saying): \\\"Bring out your people from darkness into light, and make them remember the annals of Allah. Truly, therein are evidences, proofs and signs for every patient, thankful (person).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 14\n        },\n        \"text\" : \"And (remember) when Musa (Moses) said to his people: \\\"Call to mind Allah's Favour to you, when He delivered you from Fir'aun's (Pharaoh) people who were afflicting you with horrible torment, and were slaughtering your sons and letting your women alive, and in it was a tremendous trial from your Lord.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 14\n        },\n        \"text\" : \"And (remember) when your Lord proclaimed: \\\"If you give thanks (by accepting Faith and worshipping none but Allah), I will give you more (of My Blessings), but if you are thankless (i.e. disbelievers), verily! My Punishment is indeed severe.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 14\n        },\n        \"text\" : \"And Musa (Moses) said: \\\"If you disbelieve, you and all on earth together, then verily! Allah is Rich (Free of all wants), Owner of all Praise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 14\n        },\n        \"text\" : \"Has not the news reached you, of those before you, the people of Nuh (Noah), and 'Ad, and Thamud? And those after them? None knows them but Allah. To them came their Messengers with clear proofs, but they put their hands in their mouths (biting them from anger) and said: \\\"Verily, we disbelieve in that with which you have been sent, and we are really in grave doubt as to that to which you invite us (i.e. Islamic Monotheism).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 14\n        },\n        \"text\" : \"Their Messengers said: \\\"What! Can there be a doubt about Allah, the Creator of the heavens and the earth? He calls you (to Monotheism and to be obedient to Allah) that He may forgive you of your sins and give you respite for a term appointed.\\\" They said: \\\"You are no more than human beings like us! You wish to turn us away from what our fathers used to worship. Then bring us a clear authority i.e. a clear proof of what you say).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 14\n        },\n        \"text\" : \"Their Messengers said to them: \\\"We are no more than human beings like you, but Allah bestows His Grace to whom He wills of His slaves. It is not ours to bring you an authority (proof) except by the Permission of Allah. And in Allah (Alone) let the believers put their trust.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 14\n        },\n        \"text\" : \"\\\"And why should we not put our trust in Allah while He indeed has guided us our ways. And we shall certainly bear with patience all the hurt you may cause us, and in Allah (Alone) let those who trust, put their trust.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 14\n        },\n        \"text\" : \"And those who disbelieved, said to their Messengers: \\\"Surely, we shall drive you out of our land, or you shall return to our religion.\\\" So their Lord inspired them: \\\"Truly, We shall destroy the Zalimun (polytheists, disbelievers and wrong-doers.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 14\n        },\n        \"text\" : \"\\\"And indeed, We shall make you dwell in the land after them. This is for him who fears standing before Me (on the Day of Resurrection or fears My Punishment) and also fears My Threat.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 14\n        },\n        \"text\" : \"But they (the Messengers) sought victory and help [from their Lord (Allah)], and every obstinate, arrogant dictator (who refuses to believe in the Oneness of Allah) was brought to a complete loss and destruction.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 14\n        },\n        \"text\" : \"He will sip it unwillingly, and he will find a great difficulty to swallow it down his throat, and death will come to him from every side, yet he will not die and in front of him, will be a great torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 14\n        },\n        \"text\" : \"The parable of those who disbelieve in their Lord is that their works are as ashes, on which the wind blows furiously on a stormy day, they shall not be able to get aught of what they have earned. That is the straying, far away (from the Right Path).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 14\n        },\n        \"text\" : \"Do you not see that Allah has created the heavens and the earth with truth? If He will, He can remove you and bring (in your place) a new creation!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 14\n        },\n        \"text\" : \"And for Allah that is not hard or difficult (i.e. very easy for Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 14\n        },\n        \"text\" : \"And they all shall appear before Allah (on the Day of Resurrection) then the weak will say to those who were arrogant (chiefs): \\\"Verily, we were following you; can you avail us anything from Allah's Torment?\\\" They will say: \\\"Had Allah guided us, we would have guided you. It makes no difference to us (now) whether we rage, or bear (these torments) with patience, there is no place of refuge for us.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 14\n        },\n        \"text\" : \"And Shaitan (Satan) will say when the matter has been decided: \\\"Verily, Allah promised you a promise of truth. And I too promised you, but I betrayed you. I had no authority over you except that I called you, so you responded to me. So blame me not, but blame yourselves. I cannot help you, nor can you help me. I deny your former act in associating me (Satan) as a partner with Allah (by obeying me in the life of the world). Verily, there is a painful torment for the Zalimun (polytheists and wrong-doers, etc.).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 14\n        },\n        \"text\" : \"And those who believed (in the Oneness of Allah and His Messengers and whatever they brought) and did righteous deeds, will be made to enter Gardens under which rivers flow, - to dwell therein forever (i.e. in Paradise), with the permission of their Lord. Their greeting therein will be: Salam (peace!).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 14\n        },\n        \"text\" : \"See you not how Allah sets forth a parable? - A goodly word as a goodly tree, whose root is firmly fixed, and its branches (reach) to the sky (i.e. very high).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 14\n        },\n        \"text\" : \"Giving its fruit at all times, by the Leave of its Lord and Allah sets forth parables for mankind in order that they may remember.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 14\n        },\n        \"text\" : \"Allah will keep firm those who believe, with the word that stands firm in this world (i.e. they will keep on worshipping Allah Alone and none else), and in the Hereafter. And Allah will cause to go astray those who are Zalimun (polytheists and wrong-doers, etc.), and Allah does what He wills.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 14\n        },\n        \"text\" : \"Have you not seen those who have changed the Blessings of Allah into disbelief (by denying Prophet Muhammad SAW and his Message of Islam), and caused their people to dwell in the house of destruction?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 14\n        },\n        \"text\" : \"And they set up rivals to Allah, to mislead (men) from His Path! Say: \\\"Enjoy (your brief life)! But certainly, your destination is the (Hell) Fire!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 14\n        },\n        \"text\" : \"Allah is He Who has created the heavens and the earth and sends down water (rain) from the sky, and thereby brought forth fruits as provision for you; and He has made the ships to be of service to you, that they may sail through the sea by His Command; and He has made rivers (also) to be of service to you.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 14\n        },\n        \"text\" : \"And He gave you of all that you asked for, and if you count the Blessings of Allah, never will you be able to count them. Verily! Man is indeed an extreme wrong-doer, - a disbeliever (an extreme ingrate, denies Allah's Blessings by disbelief, and by worshipping others besides Allah, and by disobeying Allah and His Prophet Muhammad SAW).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 14\n        },\n        \"text\" : \"\\\"O our Lord! I have made some of my offspring to dwell in an uncultivable valley by Your Sacred House (the Ka'bah at Makkah); in order, O our Lord, that they may perform As-Salat (Iqamat-as-Salat), so fill some hearts among men with love towards them, and (O Allah) provide them with fruits so that they may give thanks.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 14\n        },\n        \"text\" : \"\\\"O our Lord! Certainly, You know what we conceal and what we reveal. Nothing on the earth or in the heaven is hidden from Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 14\n        },\n        \"text\" : \"\\\"All the praises and thanks be to Allah, Who has given me in old age Isma'il (Ishmael) and Ishaque (Isaac). Verily! My Lord is indeed the All-Hearer of invocations.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 14\n        },\n        \"text\" : \"\\\"Our Lord! Forgive me and my parents, and (all) the believers on the Day when the reckoning will be established.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 14\n        },\n        \"text\" : \"Consider not that Allah is unaware of that which the Zalimun (polytheists, wrong-doers, etc.) do, but He gives them respite up to a Day when the eyes will stare in horror.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 14\n        },\n        \"text\" : \"And warn (O Muhammad SAW) mankind of the Day when the torment will come unto them; then the wrong-doers will say: \\\"Our Lord! Respite us for a little while, we will answer Your Call and follow the Messengers!\\\" (It will be said): \\\"Had you not sworn aforetime that you would not leave (the world for the Hereafter).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 14\n        },\n        \"text\" : \"Indeed, they planned their plot, and their plot was with Allah, though their plot was a great (one, still) it would never be able to remove the mountains (real mountains or the Islamic law) from their places (as it is of no importance) [Tafsir Ibn Kathir, Vol. 2, Page 597]. [It is said by some interpreters regarding this Verse that the Quraish pagans plotted against Prophet Muhammad SAW to kill him but they failed and were unable to carry out their plot which they plotted].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 14\n        },\n        \"text\" : \"So think not that Allah will fail to keep His Promise to His Messengers. Certainly, Allah is All-Mighty, - All-Able of Retribution.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 14\n        },\n        \"text\" : \"On the Day when the earth will be changed to another earth and so will be the heavens, and they (all creatures) will appear before Allah, the One, the Irresistible.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 14\n        },\n        \"text\" : \"And you will see the Mujrimun (criminals, disbelievers in the Oneness of Allah Islamic Monotheism, polytheists, disobedient to Allah, etc.) that Day bound together in fetters; [Muqarranun in fetters; mean:- with their hands and feet tied to their necks with chains.]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 14\n        },\n        \"text\" : \"That Allah may requite each person according to what he has earned. Truly, Allah is Swift at reckoning.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 14\n        },\n        \"text\" : \"This (Quran) is a Message for mankind (and a clear proof against them), in order that they may be warned thereby, and that they may know that He is the only One Ilah (God - Allah) - (none has the right to be worshipped but Allah), and that men of understanding may take heed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 15\n        },\n        \"text\" : \"Alif-Lam-Ra. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings]. These are the Verses of the Book, and a plain Quran.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 15\n        },\n        \"text\" : \"Perhaps (often) will those who disbelieve wish that they were Muslims [those who have submitted themselves to Allah's Will in Islam Islamic Monotheism, this will be on the Day of Resurrection when they will see the disbelievers going to Hell and the Muslims going to Paradise].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 15\n        },\n        \"text\" : \"They would not believe in it (the Quran), and already the example of (Allah's punishment of) the ancients (who disbelieved) has gone forth.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 15\n        },\n        \"text\" : \"And the earth We spread out, and placed therein firm mountains, and caused to grow therein all kinds of things in due proportion.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 15\n        },\n        \"text\" : \"And verily, your Lord will gather them together. Truly, He is All-Wise, All-Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 15\n        },\n        \"text\" : \"\\\"So, when I have fashioned him completely and breathed into him (Adam) the soul which I created for him, then fall (you) down prostrating yourselves unto him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 15\n        },\n        \"text\" : \"So, the angels prostrated themselves, all of them together.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 15\n        },\n        \"text\" : \"(Allah) said: \\\"O Iblis (Satan)! What is your reason for not being among the prostrators?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 15\n        },\n        \"text\" : \"(Allah) said: \\\"Then, get out from here, for verily, you are Rajim (an outcast or a cursed one).\\\" [Tafsir At-Tabari]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 15\n        },\n        \"text\" : \"\\\"And verily, the curse shall be upon you till the Day of Recompense (i.e. the Day of Resurrection).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 15\n        },\n        \"text\" : \"Allah said: \\\"Then, verily, you are of those reprieved,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 15\n        },\n        \"text\" : \"[Iblis (Satan)] said: \\\"O my Lord! Because you misled me, I shall indeed adorn the path of error for them (mankind) on the earth, and I shall mislead them all.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 15\n        },\n        \"text\" : \"(Allah) said: \\\"This is the Way which will lead straight to Me.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 15\n        },\n        \"text\" : \"\\\"Certainly, you shall have no authority over My slaves, except those who follow you of the Ghawin (Mushrikun and those who go astray, criminals, polytheists, and evil-doers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 15\n        },\n        \"text\" : \"\\\"And surely, Hell is the promised place for them all.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 15\n        },\n        \"text\" : \"\\\"And We shall remove from their breasts any sense of injury (that they may have), (So they will be like) brothers facing each other on thrones.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 15\n        },\n        \"text\" : \"\\\"No sense of fatigue shall touch them, nor shall they (ever) be asked to leave it.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 15\n        },\n        \"text\" : \"\\\"(All) except the family of Lout (Lot). Them all we are surely going to save (from destruction).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 15\n        },\n        \"text\" : \"\\\"Except his wife, of whom We have decreed that she shall be of those who remain behind (i.e. she will be destroyed).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 15\n        },\n        \"text\" : \"\\\"And fear Allah and disgrace me not.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 15\n        },\n        \"text\" : \"Surely! In this are signs, for those who see (or understand or learn the lessons from the Signs of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 15\n        },\n        \"text\" : \"And the dwellers in the wood [i.e. the people of Madyan (Midian) to whom Prophet Shu'aib was sent by Allah), were also Zalimun (polytheists and wrong-doers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 15\n        },\n        \"text\" : \"And all that which they used to earn availed them not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 15\n        },\n        \"text\" : \"And We created not the heavens and the earth and all that is between them except with truth, and the Hour is surely coming, so overlook (O Muhammad SAW), their faults with gracious forgiveness. [This was before the ordainment of Jihad holy fighting in Allah's Cause].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 15\n        },\n        \"text\" : \"Verily, your Lord is the All-Knowing Creator.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 15\n        },\n        \"text\" : \"So, by your Lord (O Muhammad SAW), We shall certainly call all of them to account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 15\n        },\n        \"text\" : \"For all that they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 15\n        },\n        \"text\" : \"Therefore proclaim openly (Allah's Message Islamic Monotheism) that which you are commanded, and turn away from Al-Mushrikun (polytheists, idolaters, and disbelievers, etc. - see V. 2:105).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 15\n        },\n        \"text\" : \"Who set up along with Allah another ilah (god), they will come to know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 16\n        },\n        \"text\" : \"The Event (the Hour or the punishment of disbelievers and polytheists or the Islamic laws or commandments), ordained by Allah will come to pass, so seek not to hasten it. Glorified and Exalted be He above all that they associate as partners with Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 16\n        },\n        \"text\" : \"He has created the heavens and the earth with truth. High be He Exalted above all they associate as partners with Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 16\n        },\n        \"text\" : \"And upon Allah is the responsibility to explain the Straight Path (i.e. Islamic Monotheism for mankind i.e. to show them legal and illegal, good and evil things, etc. so, whosoever accepts the guidance, it will be for his own benefit and whosoever goes astray, it will be for his own destruction), but there are ways that turn aside (such as Paganism, Judaism, Christianity, etc.). And had He willed, He would have guided you all (mankind).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 16\n        },\n        \"text\" : \"And if you would count the graces of Allah, never could you be able to count them. Truly! Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah knows what you conceal and what you reveal.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 16\n        },\n        \"text\" : \"Those whom they (Al-Mushrikun) invoke besides Allah have not created anything, but are themselves created.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 16\n        },\n        \"text\" : \"Your Ilah (God) is One Ilah (God Allah, none has the right to be worshipped but He). But for those who believe not in the Hereafter, their hearts deny (the faith in the Oneness of Allah), and they are proud.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 16\n        },\n        \"text\" : \"Certainly, Allah knows what they conceal and what they reveal. Truly, He likes not the proud.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 16\n        },\n        \"text\" : \"They will bear their own burdens in full on the Day of Resurrection, and also of the burdens of those whom they misled without knowledge. Evil indeed is that which they shall bear!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 16\n        },\n        \"text\" : \"Those before them indeed plotted, but Allah struck at the foundation of their building, and then the roof fell down upon them, from above them, and the torment overtook them from directions they did not perceive.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 16\n        },\n        \"text\" : \"Then, on the Day of Resurrection, He will disgrace them and will say: \\\"Where are My (so called) 'partners' concerning whom you used to disagree and dispute (with the believers, by defying and disobeying Allah)?\\\" Those who have been given the knowledge (about the Torment of Allah for the disbelievers) will say: \\\"Verily! Disgrace this Day and misery are upon the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 16\n        },\n        \"text\" : \"\\\"Those whose lives the angels take while they are doing wrong to themselves (by disbelief and by associating partners in worship with Allah and by committing all kinds of crimes and evil deeds).\\\" Then, they will make (false) submission (saying): \\\"We used not to do any evil.\\\" (The angels will reply): \\\"Yes! Truly, Allah is All-Knower of what you used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 16\n        },\n        \"text\" : \"'Adn (Eden) Paradise (Gardens of Eternity) which they will enter, under which rivers flow, they will have therein all that they wish. Thus Allah rewards the Muttaqun (pious - see V. 2:2).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 16\n        },\n        \"text\" : \"Those whose lives the angels take while they are in a pious state (i.e. pure from all evil, and worshipping none but Allah Alone) saying (to them): Salamun 'Alaikum (peace be on you) enter you Paradise, because of (the good) which you used to do (in the world).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 16\n        },\n        \"text\" : \"Do they (the disbelievers and polytheists) await but that the angels should come to them [to take away their souls (at death)], or there should come the command (i.e. the torment or the Day of Resurrection) of your Lord? Thus did those before them. And Allah wronged them not, but they used to wrong themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 16\n        },\n        \"text\" : \"And those who join others in worship with Allah say: \\\"If Allah had so willed, neither we nor our fathers would have worshipped aught but Him, nor would we have forbidden anything without (Command from) Him.\\\" So did those before them. Then! Are the Messengers charged with anything but to convey clearly the Message?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 16\n        },\n        \"text\" : \"And verily, We have sent among every Ummah (community, nation) a Messenger (proclaiming): \\\"Worship Allah (Alone), and avoid (or keep away from) Taghut (all false deities, etc.i. e. do not worship Taghut besides Allah).\\\" Then of them were some whom Allah guided and of them were some upon whom the straying was justified. So travel through the land and see what was the end of those who denied (the truth).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 16\n        },\n        \"text\" : \"If you (O Muhammad SAW) covet for their guidance, then verily Allah guides not those whom He makes to go astray (or none can guide him whom Allah sends astray). And they will have no helpers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 16\n        },\n        \"text\" : \"And they swear by Allah their strongest oaths, that Allah will not raise up him who dies. Yes, (He will raise them up), a promise (binding) upon Him in truth, but most of mankind know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 16\n        },\n        \"text\" : \"In order that He may make manifest to them the truth of that wherein they differ, and that those who disbelieved (in Resurrection, and in the Oneness of Allah) may know that they were liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 16\n        },\n        \"text\" : \"And as for those who emigrated for the Cause of Allah, after suffering oppression, We will certainly give them goodly residence in this world, but indeed the reward of the Hereafter will be greater, if they but knew!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 16\n        },\n        \"text\" : \"(They are) those who remained patient (in this world for Allah's sake), and put their trust in their Lord (Allah Alone).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 16\n        },\n        \"text\" : \"And We sent not (as Our Messengers) before you (O Muhammad SAW) any but men, whom We inspired, (to preach and invite mankind to believe in the Oneness of Allah). So ask of those who know the Scripture [learned men of the Taurat (Torah) and the Injeel (Gospel)], if you know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 16\n        },\n        \"text\" : \"Do then those who devise evil plots feel secure that Allah will not sink them into the earth, or that the torment will not seize them from directions they perceive not?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 16\n        },\n        \"text\" : \"Or that He may catch them in the midst of their going to and fro (in their jobs), so that there be no escape for them (from Allah's Punishment)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 16\n        },\n        \"text\" : \"Have they not observed things that Allah has created, (how) their shadows incline to the right and to the left, making prostration unto Allah, and they are lowly?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 16\n        },\n        \"text\" : \"And to Allah prostrate all that is in the heavens and all that is in the earth, of the live moving creatures and the angels, and they are not proud [i.e. they worship their Lord (Allah) with humility].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah said (O mankind!): \\\"Take not ilahain (two gods in worship, etc.). Verily, He (Allah) is (the) only One Ilah (God). Then, fear Me (Allah) much [and Me (Alone), i.e. be away from all kinds of sins and evil deeds that Allah has forbidden and do all that Allah has ordained and worship none but Allah].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 16\n        },\n        \"text\" : \"To Him belongs all that is in the heavens and (all that is in) the earth and Ad-Din Wasiba is His [(i.e. perpetual sincere obedience to Allah is obligatory). None has the right to be worshipped but Allah)]. Will you then fear any other than Allah?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 16\n        },\n        \"text\" : \"And whatever of blessings and good things you have, it is from Allah. Then, when harm touches you, unto Him you cry aloud for help.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 16\n        },\n        \"text\" : \"Then, when He has removed the harm from you, behold! Some of you associate others in worship with their Lord (Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 16\n        },\n        \"text\" : \"So (as a result of that) they deny (with ungratefulness) that (Allah's Favours) which We have bestowed on them! Then enjoy yourselves (your short stay), but you will come to know (with regrets).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 16\n        },\n        \"text\" : \"And they assign a portion of that which We have provided them unto what they know not (false deities). By Allah, you shall certainly be questioned about (all) that you used to fabricate.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 16\n        },\n        \"text\" : \"And they assign daughters unto Allah! Glorified (and Exalted) be He above all that they associate with Him!. And unto themselves what they desire;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 16\n        },\n        \"text\" : \"He hides himself from the people because of the evil of that whereof he has been informed. Shall he keep her with dishonour or bury her in the earth? Certainly, evil is their decision.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 16\n        },\n        \"text\" : \"For those who believe not in the Hereafter is an evil description, and for Allah is the highest description. And He is the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 16\n        },\n        \"text\" : \"And if Allah were to seize mankind for their wrong-doing, He would not leave on it (the earth) a single moving (living) creature, but He postpones them for an appointed term and when their term comes, neither can they delay nor can they advance it an hour (or a moment).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 16\n        },\n        \"text\" : \"They assign to Allah that which they dislike (for themselves), and their tongues assert the falsehood that the better things will be theirs. No doubt for them is the Fire, and they will be the first to be hastened on into it, and left there neglected. (Tafsir Al-Qurtubi, Vol. 10, Page 121)\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 16\n        },\n        \"text\" : \"By Allah, We indeed sent (Messengers) to the nations before you (O Muhammad SAW), but Shaitan (Satan) made their deeds fair-seeming to them. So he (Satan) is their Wali (helper) today (i.e. in this world), and theirs will be a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah sends down water (rain) from the sky, then He revives the earth therewith after its death. Verily, in this is a sign (clear proof) for people who listen (obey Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 16\n        },\n        \"text\" : \"\\\"Then, eat of all fruits, and follow the ways of your Lord made easy (for you).\\\" There comes forth from their bellies, a drink of varying colour wherein is healing for men. Verily, in this is indeed a sign for people who think.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah has created you and then He will cause you to die, and of you there are some who are sent back to senility, so that they know nothing after having known (much). Truly! Allah is All-Knowing, All-Powerful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah has preferred some of you above others in wealth and properties. Then, those who are preferred will by no means hand over their wealth and properties to those (slaves) whom their right hands possess, so that they may be equal with them in respect thereof. Do they then deny the Favour of Allah?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah has made for you wives of your own kind, and has made for you, from your wives, sons and grandsons, and has bestowed on you good provision. Do they then believe in false deities and deny the Favour of Allah (by not worshipping Allah Alone).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 16\n        },\n        \"text\" : \"And they worship others besides Allah, such as do not and cannot own any provision for them from the heavens or the earth.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 16\n        },\n        \"text\" : \"So put not forward similitudes for Allah (as there is nothing similar to Him, nor He resembles anything). Truly! Allah knows and you know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 16\n        },\n        \"text\" : \"Allah puts forward the example (of two men a believer and a disbeliever); a slave (disbeliever) under the possession of another, he has no power of any sort, and (the other), a man (believer) on whom We have bestowed a good provision from Us, and He spends thereof secretly and openly. Can they be equal? (By no means, not). All the praises and thanks be to Allah. Nay! (But) most of them know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah puts forward (another) example of two men, one of them dumb, who has no power over anything (disbeliever), and he is a burden to his master, whichever way he directs him, he brings no good. Is such a man equal to one (believer in the Islamic Monotheism) who commands justice, and is himself on a Straight Path?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 16\n        },\n        \"text\" : \"And to Allah belongs the unseen of the heavens and the earth. And the matter of the Hour is not but as a twinkling of the eye, or even nearer. Truly! Allah is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah has brought you out from the wombs of your mothers while you know nothing. And He gave you hearing, sight, and hearts that you might give thanks (to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 16\n        },\n        \"text\" : \"Do they not see the birds held (flying) in the midst of the sky? None holds them but Allah [none gave them the ability to fly but Allah]. Verily, in this are clear proofs and signs for people who believe (in the Oneness of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah has made for you in your homes an abode, and made for you out of the hides of the cattle (tents for) dwelling, which you find so light (and handy) when you travel and when you stay (in your travels), and of their wool, fur, and hair (sheep wool, camel fur, and goat hair), a furnishing and articles of convenience (e.g. carpets, blankets, etc.), a comfort for a while.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah has made for you out of that which He has created shades, and has made for you places of refuge in the mountains, and has made for you garments to protect you from the heat (and cold), and coats of mail to protect you from your (mutual) violence. Thus does He perfect His Grace unto you, that you may submit yourselves to His Will (in Islam).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 16\n        },\n        \"text\" : \"They recognise the Grace of Allah, yet they deny it (by worshipping others besides Allah) and most of them are disbelievers (deny the Prophethood of Muhammad SAW).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 16\n        },\n        \"text\" : \"And (remember) the Day when We shall raise up from each nation a witness (their Messenger), then, those who have disbelieved will not be given leave (to put forward excuses), nor will they be allowed (to return to the world) to repent and ask for Allah's Forgiveness (of their sins, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 16\n        },\n        \"text\" : \"And when those who associated partners with Allah see their (Allah's so-called) partners, they will say: \\\"Our Lord! These are our partners whom we used to invoke besides you.\\\" But they will throw back their word at them (and say): \\\"Surely! You indeed are liars!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 16\n        },\n        \"text\" : \"And they will offer (their full) submission to Allah (Alone) on that Day, and their invented false deities [all that they used to invoke besides Allah, e.g. idols, saints, priests, monks, angels, jinns, Jibrael (Gabriel), Messengers, etc.] will vanish from them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 16\n        },\n        \"text\" : \"Those who disbelieved and hinder (men) from the Path of Allah, for them We will add torment over the torment; because they used to spread corruption [by disobeying Allah themselves, as well as ordering others (mankind) to do so].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 16\n        },\n        \"text\" : \"And (remember) the Day when We shall raise up from every nation a witness against them from amongst themselves. And We shall bring you (O Muhammad SAW) as a witness against these. And We have sent down to you the Book (the Quran) as an exposition of everything, a guidance, a mercy, and glad tidings for those who have submitted themselves (to Allah as Muslims).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 16\n        },\n        \"text\" : \"Verily, Allah enjoins Al-Adl (i.e. justice and worshipping none but Allah Alone - Islamic Monotheism) and Al-Ihsan [i.e. to be patient in performing your duties to Allah, totally for Allah's sake and in accordance with the Sunnah (legal ways) of the Prophet SAW in a perfect manner], and giving (help) to kith and kin (i.e. all that Allah has ordered you to give them e.g., wealth, visiting, looking after them, or any other kind of help, etc.): and forbids Al-Fahsha' (i.e. all evil deeds, e.g. illegal sexual acts, disobedience of parents, polytheism, to tell lies, to give false witness, to kill a life without right, etc.), and Al-Munkar (i.e. all that is prohibited by Islamic law: polytheism of every kind, disbelief and every kind of evil deeds, etc.), and Al-Baghy (i.e. all kinds of oppression), He admonishes you, that you may take heed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 16\n        },\n        \"text\" : \"And fulfill the Covenant of Allah (Bai'a: pledge for Islam) when you have covenanted, and break not the oaths after you have confirmed them, and indeed you have appointed Allah your surety. Verily! Allah knows what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 16\n        },\n        \"text\" : \"And be not like her who undoes the thread which she has spun after it has become strong, by taking your oaths a means of deception among yourselves, lest a nation may be more numerous than another nation. Allah only tests you by this [i.e. who obeys Allah and fulfills Allah's Covenant and who disobeys Allah and breaks Allah's Covenant]. And on the Day of Resurrection, He will certainly make clear to you that wherein you used to differ [i.e. a believer confesses and believes in the Oneness of Allah and in the Prophethood of Prophet Muhammad SAW which the disbeliever denies it and that was their difference amongst them in the life of this world].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 16\n        },\n        \"text\" : \"And had Allah willed, He could have made you (all) one nation, but He sends astray whom He wills and guides whom He wills. But you shall certainly be called to account for what you used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 16\n        },\n        \"text\" : \"And make not your oaths, a means of deception among yourselves, lest a foot may slip after being firmly planted, and you may have to taste the evil (punishment in this world) of having hindered (men) from the Path of Allah (i.e. Belief in the Oneness of Allah and His Messenger, Muhammad SAW), and yours will be a great torment (i.e. the Fire of Hell in the Hereafter).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 16\n        },\n        \"text\" : \"And purchase not a small gain at the cost of Allah's Covenant. Verily! What is with Allah is better for you if you did but know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 16\n        },\n        \"text\" : \"Whatever is with you, will be exhausted, and whatever with Allah (of good deeds) will remain. And those who are patient, We will certainly pay them a reward in proportion to the best of what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 16\n        },\n        \"text\" : \"Whoever works righteousness, whether male or female, while he (or she) is a true believer (of Islamic Monotheism) verily, to him We will give a good life (in this world with respect, contentment and lawful provision), and We shall pay them certainly a reward in proportion to the best of what they used to do (i.e. Paradise in the Hereafter).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 16\n        },\n        \"text\" : \"So when you want to recite the Quran, seek refuge with Allah from Shaitan (Satan), the outcast (the cursed one).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 16\n        },\n        \"text\" : \"Verily! He has no power over those who believe and put their trust only in their Lord (Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 100,\n          \"sura\" : 16\n        },\n        \"text\" : \"His power is only over those who obey and follow him (Satan), and those who join partners with Him (Allah) [i.e. those who are Mushrikun - polytheists - see Verse 6:121].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 16\n        },\n        \"text\" : \"And when We change a Verse [of the Quran, i.e. cancel (abrogate) its order] in place of another, and Allah knows the best of what He sends down, they (the disbelievers) say: \\\"You (O Muhammad SAW) are but a Muftari! (forger, liar).\\\" Nay, but most of them know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 16\n        },\n        \"text\" : \"Say (O Muhammad SAW) Ruh-ul-Qudus [Jibrael (Gabriel)] has brought it (the Quran) down from your Lord with truth, that it may make firm and strengthen (the Faith of) those who believe and as a guidance and glad tidings to those who have submitted (to Allah as Muslims).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 16\n        },\n        \"text\" : \"Verily! Those who believe not in the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah, Allah will not guide them and theirs will be a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 16\n        },\n        \"text\" : \"It is only those who believe not in the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah, who fabricate falsehood, and it is they who are liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 16\n        },\n        \"text\" : \"Whoever disbelieved in Allah after his belief, except him who is forced thereto and whose heart is at rest with Faith but such as open their breasts to disbelief, on them is wrath from Allah, and theirs will be a great torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 16\n        },\n        \"text\" : \"That is because they loved and preferred the life of this world over that of the Hereafter. And Allah guides not the people who disbelieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 16\n        },\n        \"text\" : \"They are those upon whose hearts, hearing (ears) and sight (eyes) Allah has set a seal. And they are the heedless!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 16\n        },\n        \"text\" : \"Then, verily! Your Lord for those who emigrated after they had been put to trials and thereafter strove hard and fought (for the Cause of Allah) and were patient, verily, your Lord afterward is, Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah puts forward the example of a township (Makkah), that dwelt secure and well content; its provision coming to it in abundance from every place, but it (its people) denied the Favours of Allah (with ungratefulness). So Allah made it taste the extreme of hunger (famine) and fear, because of that (evil, i.e. denying Prophet Muhammad SAW) which they (its people) used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 16\n        },\n        \"text\" : \"So eat of the lawful and good food which Allah has provided for you. And be grateful for the Graces of Allah, if it is He Whom you worship.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 115,\n          \"sura\" : 16\n        },\n        \"text\" : \"He has forbidden you only Al-Maytatah (meat of a dead animal), blood, the flesh of swine, and any animal which is slaughtered as a sacrifice for others than Allah (or has been slaughtered for idols etc. or on which Allah's Name has not been mentioned while slaughtering). But if one is forced by necessity, without wilful disobedience, and not transgressing, then, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 16\n        },\n        \"text\" : \"And say not concerning that which your tongues put forth falsely: \\\"This is lawful and this is forbidden,\\\" so as to invent lies against Allah. Verily, those who invent lies against Allah will never prosper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 119,\n          \"sura\" : 16\n        },\n        \"text\" : \"Then, verily! Your Lord for those who do evil (commit sins and are disobedient to Allah) in ignorance and afterward repent and do righteous deeds, verily, your Lord thereafter, (to such) is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 120,\n          \"sura\" : 16\n        },\n        \"text\" : \"Verily, Ibrahim (Abraham) was an Ummah (a leader having all the good righteous qualities), or a nation, obedient to Allah, Hanifa (i.e. to worship none but Allah), and he was not one of those who were Al-Mushrikun (polytheists, idolaters, disbelievers in the Oneness of Allah, and those who joined partners with Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 121,\n          \"sura\" : 16\n        },\n        \"text\" : \"(He was) thankful for His (Allah's) Graces. He (Allah) chose him (as an intimate friend) and guided him to a Straight Path (Islamic Monotheism, neither Judaism nor Christianity).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 122,\n          \"sura\" : 16\n        },\n        \"text\" : \"And We gave him good in this world, and in the Hereafter he shall be of the righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 123,\n          \"sura\" : 16\n        },\n        \"text\" : \"Then, We have inspired you (O Muhammad SAW saying): \\\"Follow the religion of Ibrahim (Abraham) Hanifa (Islamic Monotheism - to worship none but Allah) and he was not of the Mushrikun (polytheists, idolaters, disbelievers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 126,\n          \"sura\" : 16\n        },\n        \"text\" : \"And if you punish (your enemy, O you believers in the Oneness of Allah), then punish them with the like of that with which you were afflicted. But if you endure patiently, verily, it is better for As-Sabirin (the patient ones, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 127,\n          \"sura\" : 16\n        },\n        \"text\" : \"And endure you patiently (O Muhammad SAW), your patience is not but from Allah. And grieve not over them (polytheists and pagans, etc.), and be not distressed because of what they plot.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 128,\n          \"sura\" : 16\n        },\n        \"text\" : \"Truly, Allah is with those who fear Him (keep their duty unto Him), and those who are Muhsinun (good-doers, - see the footnote of V. 9:120).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 17\n        },\n        \"text\" : \"Glorified (and Exalted) be He (Allah) [above all that (evil) they associate with Him] [Tafsir Qurtubi, Vol. 10, Page 204] Who took His slave (Muhammad SAW) for a journey by night from Al-Masjid-al-Haram (at Makkah) to the farthest mosque (in Jerusalem), the neighborhood whereof We have blessed, in order that We might show him (Muhammad SAW) of Our Ayat (proofs, evidences, lessons, signs, etc.). Verily, He is the All-Hearer, the All-Seer.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 17\n        },\n        \"text\" : \"(And We said): \\\"If you do good, you do good for your ownselves, and if you do evil (you do it) against yourselves.\\\" Then, when the second promise came to pass, (We permitted your enemies) to make your faces sorrowful and to enter the mosque (of Jerusalem) as they had entered it before, and to destroy with utter destruction all that fell in their hands.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 17\n        },\n        \"text\" : \"[And We said in the Taurat (Torah)]: \\\"It may be that your Lord may show mercy unto you, but if you return (to sins), We shall return (to Our Punishment). And We have made Hell a prison for the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 17\n        },\n        \"text\" : \"Verily, this Quran guides to that which is most just and right and gives glad tidings to the believers (in the Oneness of Allah and His Messenger, Muhammad SAW, etc.). who work deeds of righteousness, that they shall have a great reward (Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 17\n        },\n        \"text\" : \"And man invokes (Allah) for evil as he invokes (Allah) for good and man is ever hasty [i.e., if he is angry with somebody, he invokes (saying): \\\"O Allah! Curse him, etc.\\\" and that one should not do, but one should be patient].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 17\n        },\n        \"text\" : \"And We have fastened every man's deeds to his neck, and on the Day of Resurrection, We shall bring out for him a book which he will find wide open.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 17\n        },\n        \"text\" : \"And when We decide to destroy a town (population), We (first) send a definite order (to obey Allah and be righteous) to those among them [or We (first) increase in number those of its population] who are given the good things of this life. Then, they transgress therein, and thus the word (of torment) is justified against it (them). Then We destroy it with complete destruction.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 17\n        },\n        \"text\" : \"And how many generations have We destroyed after Nuh (Noah)! And Sufficient is your Lord as an All-Knower and All-Beholder of the sins of His slaves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 17\n        },\n        \"text\" : \"Whoever wishes for the quick-passing (transitory enjoyment of this world), We readily grant him what We will for whom We like. Then, afterwards, We have appointed for him Hell, he will burn therein disgraced and rejected, (far away from Allah's Mercy).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 17\n        },\n        \"text\" : \"And whoever desires the Hereafter and strives for it, with the necessary effort due for it (i.e. do righteous deeds of Allah's Obedience) while he is a believer (in the Oneness of Allah Islamic Monotheism), then such are the ones whose striving shall be appreciated, thanked and rewarded (by Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 17\n        },\n        \"text\" : \"Set not up with Allah any other ilah (god), (O man)! (This verse is addressed to Prophet Muhammad SAW, but its implication is general to all mankind), or you will sit down reproved, forsaken (in the Hell-fire).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 17\n        },\n        \"text\" : \"And lower unto them the wing of submission and humility through mercy, and say: \\\"My Lord! Bestow on them Your Mercy as they did bring me up when I was small.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 17\n        },\n        \"text\" : \"And if you (O Muhammad SAW) turn away from them (kindred, poor, wayfarer, etc. whom We have ordered you to give their rights, but if you have no money at the time they ask you for it) and you are awaiting a mercy from your Lord for which you hope, then, speak unto them a soft kind word (i.e. Allah will give me and I shall give you).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 17\n        },\n        \"text\" : \"Truly, your Lord enlarges the provision for whom He wills and straitens (for whom He wills). Verily, He is Ever All-Knower, All-Seer of His slaves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 17\n        },\n        \"text\" : \"And come not near to the unlawful sexual intercourse. Verily, it is a Fahishah [i.e. anything that transgresses its limits (a great sin)], and an evil way (that leads one to Hell unless Allah forgives him).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 17\n        },\n        \"text\" : \"And do not kill anyone which Allah has forbidden, except for a just cause. And whoever is killed (intentionally with hostility and oppression and not by mistake), We have given his heir the authority [(to demand Qisas, Law of Equality in punishment or to forgive, or to take Diya (blood money)]. But let him not exceed limits in the matter of taking life (i.e. he should not kill except the killer only). Verily, he is helped (by the Islamic law).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 17\n        },\n        \"text\" : \"And follow not (O man i.e., say not, or do not or witness not, etc.) that of which you have no knowledge (e.g. one's saying: \\\"I have seen,\\\" while in fact he has not seen, or \\\"I have heard,\\\" while he has not heard). Verily! The hearing, and the sight, and the heart, of each of those you will be questioned (by Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 17\n        },\n        \"text\" : \"All the bad aspects of these (the above mentioned things) are hateful to your Lord.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 17\n        },\n        \"text\" : \"This is (part) of Al-Hikmah (wisdom, good manners and high character, etc.) which your Lord has inspired to you (O Muhammad SAW). And set not up with Allah any other ilah (god) lest you should be thrown into Hell, blameworthy and rejected, (from Allah's Mercy).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 17\n        },\n        \"text\" : \"Glorified and High be He! From 'Uluwan Kabira (the great falsehood) that they say! (i.e. forged statements that there are other gods along with Allah, but He is Allah, the One, the Self-Sufficient Master, whom all creatures need. He begets not, nor was He begotten, and there is none comparable or coequal unto Him).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 17\n        },\n        \"text\" : \"The seven heavens and the earth and all that is therein, glorify Him and there is not a thing but glorifies His Praise. But you understand not their glorification. Truly, He is Ever Forbearing, Oft-Forgiving.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 17\n        },\n        \"text\" : \"And We have put coverings over their hearts lest, they should understand it (the Quran), and in their ears deafness. And when you make mention of your Lord Alone [La ilaha ill-Allah (none has the right to be worshipped but Allah) Islamic Monotheism] in the Quran, they turn on their backs, fleeing in extreme dislikeness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 17\n        },\n        \"text\" : \"And they say: \\\"When we are bones and fragments (destroyed), should we really be resurrected (to be) a new creation?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 17\n        },\n        \"text\" : \"\\\"Or some created thing that is yet greater (or harder) in your breasts (thoughts to be resurrected, even then you shall be resurrected)\\\" Then, they will say: \\\"Who shall bring us back (to life)?\\\" Say: \\\"He Who created you first!\\\" Then, they will shake their heads at you and say: \\\"When will that be?\\\" Say: \\\"Perhaps it is near!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 17\n        },\n        \"text\" : \"On the Day when He will call you, and you will answer (His Call) with (words of) His Praise and Obedience, and you will think that you have stayed (in this world) but a little while!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 17\n        },\n        \"text\" : \"And your Lord knows best all who are in the heavens and the earth. And indeed, We have preferred some of the Prophets above others, and to Dawud (David) We gave the Zabur (Psalms).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 17\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Call unto those besides Him whom you pretend [to be gods like angels, Iesa (Jesus), 'Uzair (Ezra), etc.]. They have neither the power to remove the adversity from you nor even to shift it from you to another person.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 17\n        },\n        \"text\" : \"Those whom they call upon [like 'Iesa (Jesus) - son of Maryam (Mary), 'Uzair (Ezra), angel, etc.] desire (for themselves) means of access to their Lord (Allah), as to which of them should be the nearest and they ['Iesa (Jesus), 'Uzair (Ezra), angels, etc.] hope for His Mercy and fear His Torment. Verily, the Torment of your Lord is something to be afraid of!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 17\n        },\n        \"text\" : \"And there is not a town (population) but We shall destroy it before the Day of Resurrection, or punish it with a severe torment. That is written in the Book (of our Decrees)\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 17\n        },\n        \"text\" : \"And (remember) when We told you: \\\"Verily! Your Lord has encompassed mankind (i.e. they are in His Grip).\\\" And We made not the vision which we showed you (O Muhammad as an actual eye-witness and not as a dream on the night of Al-Isra') but a trial for mankind, and likewise the accursed tree (Zaqqum, mentioned) in the Quran. We warn and make them afraid but it only increases them in naught save great disbelief, oppression and disobedience to Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 17\n        },\n        \"text\" : \"And (remember) when We said to the angels: \\\"Prostrate unto Adam.\\\" They prostrated except Iblis (Satan). He said: \\\"Shall I prostrate to one whom You created from clay?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 17\n        },\n        \"text\" : \"[Iblis (Satan)] said: \\\"See? This one whom You have honoured above me, if You give me respite (keep me alive) to the Day of Resurrection, I will surely seize and mislead his offspring (by sending them astray) all but a few!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 17\n        },\n        \"text\" : \"(Allah) said: \\\"Go, and whosoever of them follows you, surely! Hell will be the recompense of you (all) an ample recompense.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 17\n        },\n        \"text\" : \"\\\"And Istafziz [literally means: befool them gradually] those whom you can among them with your voice (i.e. songs, music, and any other call for Allah's disobedience), make assaults on them with your cavalry and your infantry, mutually share with them wealth and children (by tempting them to earn money by illegal ways usury, etc., or by committing illegal sexual intercourse, etc.), and make promises to them.\\\" But Satan promises them nothing but deceit.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 17\n        },\n        \"text\" : \"\\\"Verily! My slaves (i.e. the true believers of Islamic Monotheism), you have no authority over them. And All-Sufficient is your Lord as a Guardian.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 17\n        },\n        \"text\" : \"And when harm touches you upon the sea, those that you call upon besides Him vanish from you except Him (Allah Alone). But when He brings you safely to land, you turn away (from Him). And man is ever ungrateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 17\n        },\n        \"text\" : \"Do you then feel secure that He will not cause a side of the land to swallow you up, or that He will not send against you a violent sand-storm? Then, you shall find no Wakil (guardian one to guard you from the torment).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 17\n        },\n        \"text\" : \"(And remember) the Day when We shall call together all human beings with their (respective) Imam [their Prophets, or their records of good and bad deeds, or their Holy Books like the Quran, the Taurat (Torah), the Injeel (Gospel), etc.]. So whosoever is given his record in his right hand, such will read their records, and they will not be dealt with unjustly in the least.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 17\n        },\n        \"text\" : \"And whoever is blind in this world (i.e., does not see Allah's Signs and believes not in Him), will be blind in the Hereafter, and more astray from the Path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 17\n        },\n        \"text\" : \"And they say: \\\"We shall not believe in you (O Muhammad SAW), until you cause a spring to gush forth from the earth for us;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 17\n        },\n        \"text\" : \"\\\"Or you cause the heaven to fall upon us in pieces, as you have pretended, or you bring Allah and the angels before (us) face to face;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 17\n        },\n        \"text\" : \"\\\"Or you have a house of adornable materials (like silver and pure gold, etc.), or you ascend up into the sky, and even then we will put no faith in your ascension until you bring down for us a Book that we would read.\\\" Say (O Muhammad SAW): \\\"Glorified (and Exalted) be my Lord (Allah) above all that evil they (polytheists) associate with Him! Am I anything but a man, sent as a Messenger?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 17\n        },\n        \"text\" : \"And nothing prevented men from believing when the guidance came to them, except that they said: \\\"Has Allah sent a man as (His) Messenger?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 17\n        },\n        \"text\" : \"Say: \\\"Sufficient is Allah for a witness between me and you. Verily! He is the All-Knower, the All-Seer of His slaves.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 17\n        },\n        \"text\" : \"And he whom Allah guides, he is led aright; but he whom He sends astray for such you will find no Auliya' (helpers and protectors, etc.), besides Him, and We shall gather them together on the Day of Resurrection on their faces, blind, dumb and deaf, their abode will be Hell; whenever it abates, We shall increase for them the fierceness of the Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 17\n        },\n        \"text\" : \"That is their recompense, because they denied Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) and said: \\\"When we are bones and fragments, shall we really be raised up as a new creation?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 17\n        },\n        \"text\" : \"See they not that Allah, Who created the heavens and the earth, is Able to create the like of them. And He has decreed for them an appointed term, whereof there is not doubt. But the Zalimun (polytheists and wrong-doers, etc.) refuse (the truth the Message of Islamic Monotheism, and accept nothing) but disbelief.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 17\n        },\n        \"text\" : \"[Musa (Moses)] said: \\\"Verily, you know that these signs have been sent down by none but the Lord of the heavens and the earth as clear (evidences i.e. proofs of Allah's Oneness and His Omnipotence, etc.). And I think you are, indeed, O Fir'aun (Pharaoh) doomed to destruction (away from all good)!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 17\n        },\n        \"text\" : \"So he resolved to turn them out of the land (of Egypt). But We drowned him and all who were with him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 17\n        },\n        \"text\" : \"And We said to the Children of Israel after him: \\\"Dwell in the land, then, when the final and the last promise comes near [i.e. the Day of Resurrection or the descent of Christ ['Iesa (Jesus), son of Maryam (Mary) on the earth]. We shall bring you altogether as mixed crowd (gathered out of various nations). [Tafsir Al-Qurtubi, Vol. 10, Page 338]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 17\n        },\n        \"text\" : \"Say (O Muhammad SAW to them): \\\"Believe in it (the Quran) or do not believe (in it). Verily! Those who were given knowledge before it (the Jews and the Christians like 'Abdullah bin Salam and Salman Al-Farisi), when it is recited to them, fall down on their faces in humble prostration.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 17\n        },\n        \"text\" : \"And they fall down on their faces weeping and it adds to their humility.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 17\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Invoke Allah or invoke the Most Beneficent (Allah), by whatever name you invoke Him (it is the same), for to Him belong the Best Names. And offer your Salat (prayer) neither aloud nor in a low voice, but follow a way between.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 17\n        },\n        \"text\" : \"And say: \\\"All the praises and thanks be to Allah, Who has not begotten a son (nor an offspring), and Who has no partner in (His) Dominion, nor He is low to have a Wali (helper, protector or supporter). And magnify Him with all the magnificence, [Allahu-Akbar (Allah is the Most Great)].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 18\n        },\n        \"text\" : \"All the praises and thanks be to Allah, Who has sent down to His slave (Muhammad SAW) the Book (the Quran), and has not placed therein any crookedness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 18\n        },\n        \"text\" : \"(He has made it) Straight to give warning (to the disbelievers) of a severe punishment from Him, and to give glad tidings to the believers (in the Oneness of Allah Islamic Monotheism), who work righteous deeds, that they shall have a fair reward (i.e. Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 18\n        },\n        \"text\" : \"They shall abide therein forever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 18\n        },\n        \"text\" : \"And to warn those (Jews, Christians, and pagans) who say, \\\"Allah has begotten a son (or offspring or children).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 18\n        },\n        \"text\" : \"Verily! We have made that which is on earth as an adornment for it, in order that We may test them (mankind) as to which of them are best in deeds. [i.e. those who do good deeds in the most perfect manner, that means to do them (deeds) totally for Allah's sake and in accordance to the legal ways of the Prophet SAW].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 18\n        },\n        \"text\" : \"And verily! We shall make all that is on it (the earth) a bare dry soil (without any vegetation or trees, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 18\n        },\n        \"text\" : \"We narrate unto you (O Muhammad SAW) their story with truth: Truly! They were young men who believed in their Lord (Allah), and We increased them in guidance.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 18\n        },\n        \"text\" : \"And We made their hearts firm and strong (with the light of Faith in Allah and bestowed upon them patience to bear the separation of their kith and kin and dwellings, etc.) when they stood up and said: \\\"Our Lord is the Lord of the heavens and the earth, never shall we call upon any ilah (god) other than Him; if we did, we should indeed have uttered an enormity in disbelief.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 18\n        },\n        \"text\" : \"\\\"These our people have taken for worship aliha (gods) other than Him (Allah). Why do they not bring for them a clear authority? And who does more wrong than he who invents a lie against Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 18\n        },\n        \"text\" : \"(The young men said to one another): \\\"And when you withdraw from them, and that which they worship, except Allah, then seek refuge in the Cave, your Lord will open a way for you from His Mercy and will make easy for you your affair (i.e. will give you what you will need of provision, dwelling, etc.).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 18\n        },\n        \"text\" : \"And you might have seen the sun, when it rose, declining to the right from their Cave, and when it set, turning away from them to the left, while they lay in the midst of the Cave. That is (one) of the Ayat (proofs, evidences, signs) of Allah. He whom Allah guides, is rightly guided; but he whom He sends astray, for him you will find no Wali (guiding friend) to lead him (to the right Path).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 18\n        },\n        \"text\" : \"And thus We made their case known to the people, that they might know that the Promise of Allah is true, and that there can be no doubt about the Hour. (Remember) when they (the people of the city) disputed among themselves about their case, they said: \\\"Construct a building over them, their Lord knows best about them,\\\" (then) those who won their point said (most probably the disbelievers): \\\"We verily shall build a place of worship over them.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 18\n        },\n        \"text\" : \"And never say of anything, \\\"I shall do such and such thing tomorrow.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 18\n        },\n        \"text\" : \"Except (with the saying), \\\"If Allah will!\\\" And remember your Lord when you forget and say: \\\"It may be that my Lord guides me unto a nearer way of truth than this.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 18\n        },\n        \"text\" : \"Say: \\\"Allah knows best how long they stayed. With Him is (the knowledge of) the unseen of the heavens and the earth. How clearly He sees, and hears (everything)! They have no Wali (Helper, Disposer of affairs, Protector, etc.) other than Him, and He makes none to share in His Decision and His Rule.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 18\n        },\n        \"text\" : \"And keep yourself (O Muhammad SAW) patiently with those who call on their Lord (i.e. your companions who remember their Lord with glorification, praising in prayers, etc., and other righteous deeds, etc.) morning and afternoon, seeking His Face, and let not your eyes overlook them, desiring the pomp and glitter of the life of the world; and obey not him whose heart We have made heedless of Our Remembrance, one who follows his own lusts and whose affair (deeds) has been lost.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 18\n        },\n        \"text\" : \"And say: \\\"The truth is from your Lord.\\\" Then whosoever wills, let him believe, and whosoever wills, let him disbelieve. Verily, We have prepared for the Zalimun (polytheists and wrong-doers, etc.), a Fire whose walls will be surrounding them (disbelievers in the Oneness of Allah). And if they ask for help (relief, water, etc.) they will be granted water like boiling oil, that will scald their faces. Terrible the drink, and an evil Murtafaqa (dwelling, resting place, etc.)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 18\n        },\n        \"text\" : \"Verily! As for those who believe and do righteous deeds, certainly! We shall not suffer to be lost the reward of anyone who does his (righteous) deeds in the most perfect manner.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 18\n        },\n        \"text\" : \"\\\"And I think not the Hour will ever come, and if indeed I am brought back to my Lord, (on the Day of Resurrection), I surely shall find better than this when I return to Him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 18\n        },\n        \"text\" : \"\\\"But as for my part (I believe) that He is Allah, my Lord and none shall I associate as partner with my Lord.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 18\n        },\n        \"text\" : \"It was better for you to say, when you entered your garden: 'That which Allah wills (will come to pass)! There is no power but with Allah '. If you see me less than you in wealth, and children.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 18\n        },\n        \"text\" : \"So his fruits were encircled (with ruin). And he remained clapping his hands with sorrow over what he had spent upon it, while it was all destroyed on its trellises, he could only say: \\\"Would I had ascribed no partners to my Lord!\\\" [Tafsir Ibn Kathir]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 18\n        },\n        \"text\" : \"And he had no group of men to help him against Allah, nor could he defend or save himself.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 18\n        },\n        \"text\" : \"There (on the Day of Resurrection), Al-Walayah (the protection, power, authority and kingdom) will be for Allah (Alone), the True God. He (Allah) is the Best for reward and the Best for the final end. (La ilaha ill-Allah none has the right to be worshipped but Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 18\n        },\n        \"text\" : \"And put forward to them the example of the life of this world, it is like the water (rain) which We send down from the sky, and the vegetation of the earth mingles with it, and becomes fresh and green. But (later) it becomes dry and broken pieces, which the winds scatter. And Allah is Able to do everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 18\n        },\n        \"text\" : \"Wealth and children are the adornment of the life of this world. But the good righteous deeds (five compulsory prayers, deeds of Allah's obedience, good and nice talk, remembrance of Allah with glorification, praises and thanks, etc.), that last, are better with your Lord for rewards and better in respect of hope.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 18\n        },\n        \"text\" : \"And (remember) the Day We shall cause the mountains to pass away (like clouds of dust), and you will see the earth as a levelled plain, and we shall gather them all together so as to leave not one of them behind.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 18\n        },\n        \"text\" : \"And they will be set before your Lord in (lines as) rows, (and Allah will say): \\\"Now indeed, you have come to Us as We created you the first time. Nay, but you thought that We had appointed no meeting for you (with Us).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 18\n        },\n        \"text\" : \"And the Book (one's Record) will be placed (in the right hand for a believer in the Oneness of Allah, and in the left hand for a disbeliever in the Oneness of Allah), and you will see the Mujrimun (criminals, polytheists, sinners, etc.), fearful of that which is (recorded) therein. They will say: \\\"Woe to us! What sort of Book is this that leaves neither a small thing nor a big thing, but has recorded it with numbers!\\\" And they will find all that they did, placed before them, and your Lord treats no one with injustice.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 18\n        },\n        \"text\" : \"I (Allah) made them (Iblis and his offspring) not to witness (nor took their help in) the creation of the heavens and the earth and not (even) their own creation, nor was I (Allah) to take the misleaders as helpers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 18\n        },\n        \"text\" : \"And (remember) the Day He will say:\\\"Call those (so-called) partners of Mine whom you pretended.\\\" Then they will cry unto them, but they will not answer them, and We shall put Maubiqa (a barrier, or enmity, or destruction, or a valley in Hell) between them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 18\n        },\n        \"text\" : \"And the Mujrimun (criminals, polytheists, sinners), shall see the Fire and apprehend that they have to fall therein. And they will find no way of escape from there.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 18\n        },\n        \"text\" : \"And nothing prevents men from believing, now when the guidance (the Quran) has come to them, and from asking Forgiveness of their Lord, except that the ways of the ancients be repeated with them (i.e. their destruction decreed by Allah), or the torment be brought to them face to face?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 18\n        },\n        \"text\" : \"And who does more wrong than he who is reminded of the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of his Lord, but turns away from them forgetting what (deeds) his hands have sent forth. Truly, We have set veils over their hearts lest they should understand this (the Quran), and in their ears, deafness. And if you (O Muhammad SAW) call them to guidance, even then they will never be guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 18\n        },\n        \"text\" : \"And your Lord is Most Forgiving, Owner of Mercy. Were He to call them to account for what they have earned, then surely, He would have hastened their punishment. But they have their appointed time, beyond which they will find no escape.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 18\n        },\n        \"text\" : \"Musa (Moses) said to him (Khidr) \\\"May I follow you so that you teach me something of that knowledge (guidance and true path) which you have been taught (by Allah)?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 18\n        },\n        \"text\" : \"Musa (Moses) said: \\\"If Allah will, you will find me patient, and I will not disobey you in aught.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 18\n        },\n        \"text\" : \"[Musa (Moses)] said: \\\"Call me not to account for what I forgot, and be not hard upon me for my affair (with you).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 18\n        },\n        \"text\" : \"Then they both proceeded, till, when they came to the people of a town, they asked them for food, but they refused to entertain them. Then they found therein a wall about to collapse and he (Khidr) set it up straight. [Musa (Moses)] said: If you had wished, surely, you could have taken wages for it!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 18\n        },\n        \"text\" : \"\\\"And as for the wall, it belonged to two orphan boys in the town; and there was under it a treasure belonging to them; and their father was a righteous man, and your Lord intended that they should attain their age of full strength and take out their treasure as a mercy from your Lord. And I did it not of my own accord. That is the interpretation of those (things) over which you could not hold patience.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 18\n        },\n        \"text\" : \"And they ask you about Dhul-Qarnain. Say: \\\"I shall recite to you something of his story.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 18\n        },\n        \"text\" : \"Until, when he reached the setting place of the sun, he found it setting in a spring of black muddy (or hot) water. And he found near it a people. We (Allah) said (by inspiration): \\\"O Dhul-Qarnain! Either you punish them, or treat them with kindness.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 18\n        },\n        \"text\" : \"He said: \\\"As for him (a disbeliever in the Oneness of Allah) who does wrong, we shall punish him; and then he will be brought back unto his Lord; Who will punish him with a terrible torment (Hell).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 18\n        },\n        \"text\" : \"\\\"But as for him who believes (in Allah's Oneness) and works righteousness, he shall have the best reward, (Paradise), and we (Dhul-Qarnain) shall speak unto him mild words (as instructions).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 18\n        },\n        \"text\" : \"Until, when he came to the rising place of the sun, he found it rising on a people for whom We (Allah) had provided no shelter against the sun.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 18\n        },\n        \"text\" : \"So (it was)! And We knew all about him (Dhul-Qarnain).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 18\n        },\n        \"text\" : \"They said: \\\"O Dhul-Qarnain! Verily! Ya'juj and Ma'juj (Gog and Magog) are doing great mischief in the land. Shall we then pay you a tribute in order that you might erect a barrier between us and them?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 18\n        },\n        \"text\" : \"Dhul-Qarnain) said: \\\"This is a mercy from my Lord, but when the Promise of my Lord comes, He shall level it down to the ground. And the Promise of my Lord is ever true.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 18\n        },\n        \"text\" : \"And on that Day [i.e. the Day Ya'juj and Ma'juj (Gog and Magog) will come out], We shall leave them to surge like waves on one another, and the Trumpet will be blown, and We shall collect them all together.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 100,\n          \"sura\" : 18\n        },\n        \"text\" : \"And on that Day We shall present Hell to the disbelievers, plain to view,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 18\n        },\n        \"text\" : \"Do then those who disbelieve think that they can take My slaves [i.e., the angels, Allah's Messengers, 'Iesa (Jesus), son of Maryam (Mary), etc.] as Auliya' (lords, gods, protectors, etc.) besides Me? Verily, We have prepared Hell as an entertainment for the disbelievers (in the Oneness of Allah Islamic Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 18\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Shall We tell you the greatest losers in respect of (their) deeds?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 18\n        },\n        \"text\" : \"\\\"They are those who deny the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of their Lord and the Meeting with Him (in the Hereafter). So their works are in vain, and on the Day of Resurrection, We shall not give them any weight.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 18\n        },\n        \"text\" : \"\\\"That shall be their recompense, Hell; because they disbelieved and took My Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) and My Messengers by way of jest and mockery.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 18\n        },\n        \"text\" : \"\\\"Verily! Those who believe (in the Oneness of Allah Islamic Monotheism) and do righteous deeds, shall have the Gardens of Al-Firdaus (the Paradise) for their entertainment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 18\n        },\n        \"text\" : \"\\\"Wherein they shall dwell (forever). No desire will they have to be removed therefrom.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 18\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"I am only a man like you. It has been inspired to me that your Ilah (God) is One Ilah (God i.e. Allah). So whoever hopes for the Meeting with his Lord, let him work righteousness and associate none as a partner in the worship of his Lord.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 19\n        },\n        \"text\" : \"Kaf- Ha-Ya-'Ain-Sad. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 19\n        },\n        \"text\" : \"When he called out his Lord (Allah) a call in secret,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 19\n        },\n        \"text\" : \"\\\"Who shall inherit me, and inherit (also) the posterity of Ya'qub (Jacob) (inheritance of the religious knowledge and Prophethood, not the wealth, etc.). And make him, my Lord, one with whom You are Well-pleased!\\\".\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 19\n        },\n        \"text\" : \"(Allah said) \\\"O Zakariya (Zachariah)! Verily, We give you the glad tidings of a son, His name will be Yahya (John). We have given that name to none before (him).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 19\n        },\n        \"text\" : \"[Zakariya (Zachariah)] said: \\\"My Lord! Appoint for me a sign.\\\" He said: \\\"Your sign is that you shall not speak unto mankind for three nights, though having no bodily defect.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 19\n        },\n        \"text\" : \"Then he came out to his people from Al-Mihrab (a praying place or a private room, etc.), he told them by signs to glorify Allah's Praises in the morning and in the afternoon.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 19\n        },\n        \"text\" : \"And dutiful towards his parents, and he was neither an arrogant nor disobedient (to Allah or to his parents).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 19\n        },\n        \"text\" : \"She placed a screen (to screen herself) from them; then We sent to her Our Ruh [angel Jibrael (Gabriel)], and he appeared before her in the form of a man in all respects.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 19\n        },\n        \"text\" : \"She said: \\\"Verily! I seek refuge with the Most Beneficent (Allah) from you, if you do fear Allah.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 19\n        },\n        \"text\" : \"He said: \\\"So (it will be), your Lord said: 'That is easy for Me (Allah): And (We wish) to appoint him as a sign to mankind and a mercy from Us (Allah), and it is a matter (already) decreed, (by Allah). \"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 19\n        },\n        \"text\" : \"So she conceived him, and she withdrew with him to a far place (i.e. Bethlehem valley about 4-6 miles from Jerusalem).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 19\n        },\n        \"text\" : \"\\\"And shake the trunk of date-palm towards you, it will let fall fresh ripe-dates upon you.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 19\n        },\n        \"text\" : \"\\\"So eat and drink and be glad, and if you see any human being, say: 'Verily! I have vowed a fast unto the Most Beneficent (Allah) so I shall not speak to any human being this day. \"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 19\n        },\n        \"text\" : \"\\\"He ['Iesa (Jesus)] said: Verily! I am a slave of Allah, He has given me the Scripture and made me a Prophet;\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 19\n        },\n        \"text\" : \"\\\"And Salam (peace) be upon me the day I was born, and the day I die, and the day I shall be raised alive!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 19\n        },\n        \"text\" : \"It befits not (the Majesty of) Allah that He should beget a son [this refers to the slander of Christians against Allah, by saying that 'Iesa (Jesus) is the son of Allah]. Glorified (and Exalted be He above all that they associate with Him). When He decrees a thing, He only says to it, \\\"Be!\\\" and it is.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 19\n        },\n        \"text\" : \"['Iesa (Jesus) said]: \\\"And verily Allah is my Lord and your Lord. So worship Him (Alone). That is the Straight Path. (Allah's Religion of Islamic Monotheism which He did ordain for all of His Prophets).\\\" [Tafsir At-Tabari]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 19\n        },\n        \"text\" : \"Then the sects differed [i.e. the Christians about 'Iesa (Jesus)], so woe unto the disbelievers [those who gave false witness by saying that 'Iesa (Jesus) is the son of Allah] from the meeting of a great Day (i.e. the Day of Resurrection, when they will be thrown in the blazing Fire).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 19\n        },\n        \"text\" : \"How clearly will they (polytheists and disbelievers in the Oneness of Allah) see and hear, the Day when they will appear before Us! But the Zalimun (polytheists and wrong-doers) today are in plain error.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 19\n        },\n        \"text\" : \"Verily! We will inherit the earth and whatsoever is thereon. And to Us they all shall be returned,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 19\n        },\n        \"text\" : \"\\\"O my father! Worship not Shaitan (Satan). Verily! Shaitan (Satan) has been a rebel against the Most Beneficent (Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 19\n        },\n        \"text\" : \"\\\"O my father! Verily! I fear lest a torment from the Most Beneficent (Allah) overtake you, so that you become a companion of Shaitan (Satan) (in the Hell-fire).\\\" [Tafsir Al-Qurtubi]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 19\n        },\n        \"text\" : \"\\\"And I shall turn away from you and from those whom you invoke besides Allah. And I shall call on my Lord; and I hope that I shall not be unblest in my invocation to my Lord.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 19\n        },\n        \"text\" : \"So when he had turned away from them and from those whom they worshipped besides Allah, We gave him Ishaque (Isaac) and Ya'qub (Jacob), and each one of them We made a Prophet.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 19\n        },\n        \"text\" : \"And We gave them of Our Mercy (a good provision in plenty), and We granted them honour on the tongues (of all the nations, i.e. everybody remembers them with a good praise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 19\n        },\n        \"text\" : \"And We called him from the right side of the Mount, and made him draw near to Us for a talk with him [Musa (Moses)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 19\n        },\n        \"text\" : \"Those were they unto whom Allah bestowed His Grace from among the Prophets, of the offspring of Adam, and of those whom We carried (in the ship) with Nuh (Noah), and of the offspring of Ibrahim (Abraham) and Israel and from among those whom We guided and chose. When the Verses of the Most Beneficent (Allah) were recited unto them, they fell down prostrating and weeping.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 19\n        },\n        \"text\" : \"Except those who repent and believe (in the Oneness of Allah and His Messenger Muhammad SAW), and work righteousness. Such will enter Paradise and they will not be wronged in aught.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 19\n        },\n        \"text\" : \"(They will enter) 'Adn (Eden) Paradise (everlasting Gardens), which the Most Beneficent (Allah) has promised to His slaves in the unseen: Verily! His Promise must come to pass.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 19\n        },\n        \"text\" : \"They shall not hear therein (in Paradise) any Laghw (dirty, false, evil vain talk), but only Salam (salutations of peace). And they will have therein their sustenance, morning and afternoon. [See (V. 40:55)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 19\n        },\n        \"text\" : \"Such is the Paradise which We shall give as an inheritance to those of Our slaves who have been Al-Muttaqun (pious and righteous persons - See V. 2:2).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 19\n        },\n        \"text\" : \"Lord of the heavens and the earth, and all that is between them, so worship Him (Alone) and be constant and patient in His worship. Do you know of any who is similar to Him? (of course none is similar or coequal or comparable to Him, and He has none as partner with Him). [There is nothing like unto Him and He is the All-Hearer, the All-Seer].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 19\n        },\n        \"text\" : \"And man (the disbeliever) says: \\\"When I am dead, shall I then be raised up alive?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 19\n        },\n        \"text\" : \"So by your Lord, surely, We shall gather them together, and (also) the Shayatin (devils) (with them), then We shall bring them round Hell on their knees.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 19\n        },\n        \"text\" : \"Then indeed We shall drag out from every sect all those who were worst in obstinate rebellion against the Most Beneficent (Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 19\n        },\n        \"text\" : \"Then We shall save those who use to fear Allah and were dutiful to Him. And We shall leave the Zalimun (polytheists and wrongdoers, etc.) therein (humbled) to their knees (in Hell).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 19\n        },\n        \"text\" : \"Say (O Muhammad SAW) whoever is in error, the Most Beneficent (Allah) will extend (the rope) to him, until, when they see that which they were promised, either the torment or the Hour, they will come to know who is worst in position, and who is weaker in forces. [This is the answer for the Verse No. 19:73]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 19\n        },\n        \"text\" : \"And Allah increases in guidance those who walk aright [true believers in the Oneness of Allah who fear Allah much (abstain from all kinds of sins and evil deeds which He has forbidden), and love Allah much (perform all kinds of good deeds which He has ordained)]. And the righteous good deeds that last, are better with your Lord, for reward and better for resort.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 19\n        },\n        \"text\" : \"Have you seen him who disbelieved in Our Ayat (this Quran and Muhammad SAW) and (yet) says: \\\"I shall certainly be given wealth and children [if I will be alive (again)],\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 19\n        },\n        \"text\" : \"Has he known the unseen or has he taken a covenant from the Most Beneficent (Allah)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 19\n        },\n        \"text\" : \"Nay! We shall record what he says, and We shall increase his torment (in the Hell);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 19\n        },\n        \"text\" : \"And We shall inherit from him (at his death) all that he talks of (i.e. wealth and children which We have bestowed upon him in this world), and he shall come to Us alone.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 19\n        },\n        \"text\" : \"And they have taken (for worship) aliha (gods) besides Allah, that they might give them honour, power and glory (and also protect them from Allah's Punishment etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 19\n        },\n        \"text\" : \"Nay, but they (the so-called gods) will deny their worship of them, and become opponents to them (on the Day of Resurrection).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 19\n        },\n        \"text\" : \"The Day We shall gather the Muttaqun (pious - see V. 2:2) unto the Most Beneficent (Allah), like a delegate (presented before a king for honour).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 19\n        },\n        \"text\" : \"And We shall drive the Mujrimun (polytheists, sinners, criminals, disbelievers in the Oneness of Allah, etc.) to Hell, in a thirsty state (like a thirsty herd driven down to water),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 19\n        },\n        \"text\" : \"None shall have the power of intercession, but such a one as has received permission (or promise) from the Most Beneficent (Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 19\n        },\n        \"text\" : \"And they say: \\\"The Most Beneficent (Allah) has begotten a son (or offspring or children) [as the Jews say: 'Uzair (Ezra) is the son of Allah, and the Christians say that He has begotten a son ['Iesa (Christ)], and the pagan Arabs say that He has begotten daughters (angels, etc.)].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 19\n        },\n        \"text\" : \"Whereby the heavens are almost torn, and the earth is split asunder, and the mountains fall in ruins,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 19\n        },\n        \"text\" : \"That they ascribe a son (or offspring or children) to the Most Beneficent (Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 19\n        },\n        \"text\" : \"But it is not suitable for (the Majesty of) the Most Beneficent (Allah) that He should beget a son (or offspring or children).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 19\n        },\n        \"text\" : \"There is none in the heavens and the earth but comes unto the Most Beneficent (Allah) as a slave.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 19\n        },\n        \"text\" : \"Verily, those who believe [in the Oneness of Allah and in His Messenger (Muhammad SAW)] and work deeds of righteousness, the Most Beneficent (Allah) will bestow love for them (in the hearts of the believers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 20\n        },\n        \"text\" : \"Ta-Ha. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings.]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 20\n        },\n        \"text\" : \"But only as a Reminder to those who fear (Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 20\n        },\n        \"text\" : \"A revelation from Him (Allah) Who has created the earth and high heavens.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 20\n        },\n        \"text\" : \"The Most Beneficent (Allah) Istawa (rose over) the (Mighty) Throne (in a manner that suits His Majesty).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 20\n        },\n        \"text\" : \"To Him belongs all that is in the heavens and all that is on the earth, and all that is between them, and all that is under the soil.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 20\n        },\n        \"text\" : \"Allah! La ilahla illa Huwa (none has the right to be worshipped but He)! To Him belong the Best Names.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 20\n        },\n        \"text\" : \"And when he came to it (the fire), he was called by name: \\\"O Musa (Moses)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 20\n        },\n        \"text\" : \"\\\"Verily! I am your Lord! So take off your shoes, you are in the sacred valley, Tuwa.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 20\n        },\n        \"text\" : \"\\\"Verily! I am Allah! La ilaha illa Ana (none has the right to be worshipped but I), so worship Me, and perform As-Salat (Iqamat-as-Salat) for My Remembrance.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 20\n        },\n        \"text\" : \"(Allah) said: \\\"Cast it down, O Musa (Moses)!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 20\n        },\n        \"text\" : \"Allah said:\\\"Grasp it, and fear not, We shall return it to its former state,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 20\n        },\n        \"text\" : \"\\\"Go to Fir'aun (Pharaoh)! Verily, he has transgressed (all bounds in disbelief and disobedience, and has behaved as an arrogant, and as a tyrant).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 20\n        },\n        \"text\" : \"\\\"And let him share my task (of conveying Allah's Message and Prophethood),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 20\n        },\n        \"text\" : \"Allah said: \\\"You are granted your request, O Musa (Moses)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 20\n        },\n        \"text\" : \"\\\"Saying: 'Put him (the child) into the Tabut (a box or a case or a chest) and put it into the river (Nile), then the river shall cast it up on the bank, and there, an enemy of Mine and an enemy of his shall take him.' And I endued you with love from Me, in order that you may be brought up under My Eye,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 20\n        },\n        \"text\" : \"\\\"When your sister went and said: 'Shall I show you one who will nurse him?' So We restored you to your mother, that she might cool her eyes and she should not grieve. Then you did kill a man, but We saved you from great distress and tried you with a heavy trial. Then you stayed a number of years with the people of Madyan (Midian). Then you came here according to the fixed term which I ordained (for you), O Musa (Moses)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 20\n        },\n        \"text\" : \"\\\"Go, both of you, to Fir'aun (Pharaoh), verily, he has transgressed (all bounds in disbelief and disobedience and behaved as an arrogant and as a tyrant).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 20\n        },\n        \"text\" : \"\\\"And speak to him mildly, perhaps he may accept admonition or fear Allah.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 20\n        },\n        \"text\" : \"They said: \\\"Our Lord! Verily! We fear lest he should hasten to punish us or lest he should transgress (all bounds against us).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 20\n        },\n        \"text\" : \"He (Allah) said: \\\"Fear not, verily! I am with you both, hearing and seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 20\n        },\n        \"text\" : \"'Truly, it has been revealed to us that the torment will be for him who denies [believes not in the Oneness of Allah, and in His Messengers, etc.], and turns away.'(from the truth and obedience of Allah)\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 20\n        },\n        \"text\" : \"Thereof (the earth) We created you, and into it We shall return you, and from it We shall bring you out once again.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 20\n        },\n        \"text\" : \"And indeed We showed him [Fir'aun (Pharaoh)] all Our Signs and Evidences, but he denied and refused.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 20\n        },\n        \"text\" : \"\\\"Then verily, we can produce magic the like thereof; so appoint a meeting between us and you, which neither we, nor you shall fail to keep, in an open wide place where both shall have a just and equal chance (and beholders could witness the competition).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 20\n        },\n        \"text\" : \"Musa (Moses) said to them: \\\"Woe unto you! Invent not a lie against Allah, lest He should destroy you completely by a torment. And surely, he who invents a lie (against Allah) will fail miserably.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 20\n        },\n        \"text\" : \"We (Allah) said: \\\"Fear not! Surely, you will have the upper hand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 20\n        },\n        \"text\" : \"\\\"And throw that which is in your right hand! It will swallow up that which they have made. That which they have made is only a magician's trick, and the magician will never be successful, no matter whatever amount (of skill) he may attain.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 20\n        },\n        \"text\" : \"[Fir'aun (Pharaoh)] said: \\\"Believe you in him [Musa (Moses)] before I give you permission? Verily! He is your chief who taught you magic. So I will surely cut off your hands and feet on opposite sides, and I will surely crucify you on the trunks of date-palms, and you shall surely know which of us [I (Fir'aun - Pharaoh) or the Lord of Musa (Moses) (Allah)] can give the severe and more lasting torment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 20\n        },\n        \"text\" : \"They said: \\\"We prefer you not over the clear signs that have come to us, and to Him (Allah) Who created us. So decree whatever you desire to decree, for you can only decree (regarding) this life of the world.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 20\n        },\n        \"text\" : \"\\\"Verily! We have believed in our Lord, that He may forgive us our faults, and the magic to which you did compel us. And Allah is better as regards reward in comparison to your [Fir'aun's (Pharaoh)] reward, and more lasting (as regards punishment in comparison to your punishment).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 20\n        },\n        \"text\" : \"Verily! Whoever comes to his Lord as a Mujrim (criminal, polytheist, disbeliever in the Oneness of Allah and His Messengers, sinner, etc.), then surely, for him is Hell, therein he will neither die nor live.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 20\n        },\n        \"text\" : \"But whoever comes to Him (Allah) as a believer (in the Oneness of Allah, etc.), and has done righteous good deeds, for such are the high ranks (in the Hereafter),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 20\n        },\n        \"text\" : \"'Adn (Edn) Paradise (everlasting Gardens), under which rivers flow, wherein they will abide forever: such is the reward of those who purify themselves [(by abstaining from all kinds of sins and evil deeds) which Allah has forbidden and by doing all that which Allah has ordained)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 20\n        },\n        \"text\" : \"(Allah) said: \\\"Verily! We have tried your people in your absence, and As-Samiri has led them astray.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 20\n        },\n        \"text\" : \"Then Musa (Moses) returned to his people in a state of anger and sorrow. He said: \\\"O my people! Did not your Lord promise you a fair promise? Did then the promise seem to you long in coming? Or did you desire that wrath should descend from your Lord on you, so you broke your promise to me (i.e. disbelieving in Allah and worshipping the calf)?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 20\n        },\n        \"text\" : \"And Harun (Aaron) indeed had said to them beforehand: \\\"O my people! You are being tried in this, and verily, your Lord is (Allah) the Most Beneficent, so follow me and obey my order.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 20\n        },\n        \"text\" : \"Your Ilah (God) is only Allah, the One (La ilaha illa Huwa) (none has the right to be worshipped but He). He has full knowledge of all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 20\n        },\n        \"text\" : \"The Day when the Trumpet will be blown (the second blowing): that Day, We shall gather the Mujrimun (criminals, polytheists, sinners, disbelievers in the Oneness of Allah, etc.) Zurqa: (blue or blind eyed with black faces).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 20\n        },\n        \"text\" : \"\\\"Then He shall leave it as a level smooth plain.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 20\n        },\n        \"text\" : \"On that Day mankind will follow strictly (the voice of) Allah's caller, no crookedness (that is without going to the right or left of that voice) will they show him (Allah's caller). And all voices will be humbled for the Most Beneficent (Allah), and nothing shall you hear but the low voice of their footsteps.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 20\n        },\n        \"text\" : \"On that day no intercession shall avail, except the one for whom the Most Beneficent (Allah) has given permission and whose word is acceptable to Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 20\n        },\n        \"text\" : \"He (Allah) knows what happens to them (His creatures) in this world, and what will happen to them (in the Hereafter), and they will never compass anything of His Knowledge.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 20\n        },\n        \"text\" : \"And (all) faces shall be humbled before (Allah), the Ever Living, the One Who sustains and protects all that exists. And he who carried (a burden of) wrongdoing (i.e. he who disbelieved in Allah, ascribed partners to Him, and did deeds of His disobedience), became indeed a complete failure (on that Day).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 113,\n          \"sura\" : 20\n        },\n        \"text\" : \"And thus We have sent it down as a Quran in Arabic, and have explained therein in detail the warnings, in order that they may fear Allah, or that it may cause them to have a lesson from it (or to have the honour for believing and acting on its teachings).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 20\n        },\n        \"text\" : \"Then High above all be Allah, the True King. And be not in haste (O Muhammad SAW) with the Quran before its revelation is completed to you, and say: \\\"My Lord! Increase me in knowledge.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 20\n        },\n        \"text\" : \"And (remember) when We said to the angels: \\\"Prostrate yourselves to Adam.\\\" They prostrated (all) except Iblis (Satan), who refused.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 120,\n          \"sura\" : 20\n        },\n        \"text\" : \"Then Shaitan (Satan) whispered to him, saying: \\\"O Adam! Shall I lead you to the Tree of Eternity and to a kingdom that will never waste away?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 123,\n          \"sura\" : 20\n        },\n        \"text\" : \"(Allah) said:\\\"Get you down (from the Paradise to the earth), both of you, together, some of you are an enemy to some others. Then if there comes to you guidance from Me, then whoever follows My Guidance shall neither go astray, nor fall into distress and misery.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 124,\n          \"sura\" : 20\n        },\n        \"text\" : \"\\\"But whosoever turns away from My Reminder (i.e. neither believes in this Quran nor acts on its orders, etc.) verily, for him is a life of hardship, and We shall raise him up blind on the Day of Resurrection.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 126,\n          \"sura\" : 20\n        },\n        \"text\" : \"(Allah) will say: \\\"Like this, Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) came unto you, but you disregarded them (i.e. you left them, did not think deeply in them, and you turned away from them), and so this Day, you will be neglected (in the Hell-fire, away from Allah's Mercy).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 127,\n          \"sura\" : 20\n        },\n        \"text\" : \"And thus do We requite him who transgresses beyond bounds [i.e. commits the great sins and disobeys his Lord (Allah) and believes not in His Messengers, and His revealed Books, like this Quran, etc.], and believes not in the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of his Lord, and the torment of the Hereafter is far more severe and more lasting.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 130,\n          \"sura\" : 20\n        },\n        \"text\" : \"So bear patiently (O Muhammad SAW) what they say, and glorify the praises of your Lord before the rising of the sun, and before its setting, and during some of the hours of the night, and at the sides of the day (an indication for the five compulsory congregational prayers), that you may become pleased with the reward which Allah shall give you.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 131,\n          \"sura\" : 20\n        },\n        \"text\" : \"And strain not your eyes in longing for the things We have given for enjoyment to various groups of them (polytheists and disbelievers in the Oneness of Allah), the splendour of the life of this world that We may test them thereby. But the provision (good reward in the Hereafter) of your Lord is better and more lasting.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 135,\n          \"sura\" : 20\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Each one (believer and disbeliever, etc.) is waiting, so wait you too, and you shall know who are they that are on the Straight and Even Path (i.e. Allah's Religion of Islamic Monotheism), and who are they that have let themselves be guided (on the Right Path).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 21\n        },\n        \"text\" : \"He (Muhammad SAW) said: \\\"My Lord knows (every) word (spoken) in the heavens and on earth. And He is the All-Hearer, the All-Knower.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 21\n        },\n        \"text\" : \"They cried: \\\"Woe to us! Certainly! We have been Zalimun (polytheists, wrong-doers and disbelievers in the Oneness of Allah, etc.).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 21\n        },\n        \"text\" : \"We created not the heavens and the earth and all that is between them for a (mere) play.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 21\n        },\n        \"text\" : \"Nay, We fling (send down) the truth (this Quran) against the falsehood (disbelief), so it destroys it, and behold, it (falsehood) is vanished. And woe to you for that (lie) which you ascribe (to Us) (against Allah by uttering that Allah has a wife and a son).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 21\n        },\n        \"text\" : \"Had there been therein (in the heavens and the earth) gods besides Allah, then verily both would have been ruined. Glorified be Allah, the Lord of the Throne, (High is He) above what they attribute to Him!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 21\n        },\n        \"text\" : \"And We did not send any Messenger before you (O Muhammad SAW) but We inspired him (saying): La ilaha illa Ana [none has the right to be worshipped but I (Allah)], so worship Me (Alone and none else).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 21\n        },\n        \"text\" : \"And they say: \\\"The Most Beneficent (Allah) has begotten a son (or children).\\\" Glory to Him! They [those whom they call children of Allah i.e. the angels, 'Iesa (Jesus) son of Maryam (Mary), 'Uzair (Ezra), etc.], are but honoured slaves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 21\n        },\n        \"text\" : \"And if any of them should say: \\\"Verily, I am an ilah (a god) besides Him (Allah),\\\" such a one We should recompense with Hell. Thus We recompense the Zalimun (polytheists and wrong-doers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 21\n        },\n        \"text\" : \"Everyone is going to taste death, and We shall make a trial of you with evil and with good, and to Us you will be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 21\n        },\n        \"text\" : \"And when those who disbelieve (in the Oneness of Allah) see you (O Muhammad SAW), they take you not except for mockery (saying): \\\"Is this the one who talks (badly) about your gods?\\\" While they disbelieve at the mention of the Most Beneficent (Allah). [Tafsir. Al-Qurtubi].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 21\n        },\n        \"text\" : \"Nay, it (the Fire or the Day of Resurrection) will come upon them all of a sudden and will perplex them, and they will have no power to avert it, nor will they get respite.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 21\n        },\n        \"text\" : \"Say: \\\"Who can guard and protect you in the night or in the day from the (punishment of the) Most Beneficent (Allah)?\\\" Nay, but they turn away from the remembrance of their Lord.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 21\n        },\n        \"text\" : \"Nay, We gave the luxuries of this life to these men and their fathers until the period grew long for them. See they not that We gradually reduce the land (in their control) from its outlying borders? Is it then they who will overcome.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 21\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"I warn you only by the revelation (from Allah and not by the opinion of the religious scholars and others). But the deaf (who follow the religious scholars and others blindly) will not hear the call, (even) when they are warned [(i.e. one should follow only the Quran and the Sunnah (legal ways, orders, acts of worship, statements of Prophet Muhammad SAW, as the Companions of the Prophet SAW did)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 21\n        },\n        \"text\" : \"And We shall set up balances of justice on the Day of Resurrection, then none will be dealt with unjustly in anything. And if there be the weight of a mustard seed, We will bring it. And Sufficient are We as Reckoners.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 21\n        },\n        \"text\" : \"And indeed We bestowed aforetime on Ibrahim (Abraham) his (portion of) guidance, and We were Well-Acquainted with him (as to his Belief in the Oneness of Allah, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 21\n        },\n        \"text\" : \"\\\"And by Allah, I shall plot a plan (to destroy) your idols after you have gone away and turned your backs.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 21\n        },\n        \"text\" : \"So he broke them to pieces, (all) except the biggest of them, that they might turn to it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 21\n        },\n        \"text\" : \"They said: \\\"We heard a young man talking (against) them who is called Ibrahim (Abraham).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 21\n        },\n        \"text\" : \"[Ibrahim (Abraham)] said: \\\"Do you then worship besides Allah, things that can neither profit you, nor harm you?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 21\n        },\n        \"text\" : \"\\\"Fie upon you, and upon that which you worship besides Allah! Have you then no sense?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 21\n        },\n        \"text\" : \"We (Allah) said: \\\"O fire! Be you coolness and safety for Ibrahim (Abraham)!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 21\n        },\n        \"text\" : \"And (remember) Lout (Lot), We gave him Hukman (right judgement of the affairs and Prophethood) and (religious) knowledge, and We saved him from the town (folk) who practised Al-Khaba'ith (evil, wicked and filthy deeds, etc.). Verily, they were a people given to evil, and were Fasiqun (rebellious, disobedient, to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 21\n        },\n        \"text\" : \"We helped him against people who denied Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.). Verily, they were a people given to evil. So We drowned them all.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 21\n        },\n        \"text\" : \"And We made Sulaiman (Solomon) to understand (the case), and to each of them We gave Hukman (right judgement of the affairs and Prophethood) and knowledge. And We subjected the mountains and the birds to glorify Our Praises along with Dawud (David), And it was We Who were the doers (of all these things).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 21\n        },\n        \"text\" : \"And to Sulaiman (Solomon) (We subjected) the wind strongly raging, running by his command towards the land which We had blessed. And of everything We are the All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 21\n        },\n        \"text\" : \"And (remember) Ayub (Job), when he cried to his Lord: \\\"Verily, distress has seized me, and You are the Most Merciful of all those who show mercy.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 21\n        },\n        \"text\" : \"So We answered his call, and We removed the distress that was on him, and We restored his family to him (that he had lost), and the like thereof along with them, as a mercy from Ourselves and a Reminder for all who worship Us.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 21\n        },\n        \"text\" : \"And (remember) Isma'il (Ishmael), and Idris (Enoch) and Dhul-Kifl (Isaiah), all were from among As-Sabirin (the patient ones, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 21\n        },\n        \"text\" : \"And (remember) Dhan-Nun (Jonah), when he went off in anger, and imagined that We shall not punish him (i.e. the calamites which had befallen him)! But he cried through the darkness (saying): La ilaha illa Anta [none has the right to be worshipped but You (O Allah)], Glorified (and Exalted) are You [above all that (evil) they associate with You]. Truly, I have been of the wrong-doers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 21\n        },\n        \"text\" : \"So We answered his call, and delivered him from the distress. And thus We do deliver the believers (who believe in the Oneness of Allah, abstain from evil and work righteousness).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 21\n        },\n        \"text\" : \"So We answered his call, and We bestowed upon him Yahya (John), and cured his wife (to bear a child) for him. Verily, they used to hasten on to do good deeds, and they used to call on Us with hope and fear, and used to humble themselves before Us.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 21\n        },\n        \"text\" : \"But they have broken up and differed as regards their religion among themselves. (And) they all shall return to Us.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 21\n        },\n        \"text\" : \"So whoever does righteous good deeds while he is a believer (in the Oneness of Allah Islamic Monotheism), his efforts will not be rejected. Verily! We record it in his Book of deeds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 21\n        },\n        \"text\" : \"And a ban is laid on every town (population) which We have destroyed that they shall not return (to this world again, nor repent to Us).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 21\n        },\n        \"text\" : \"And the true promise (Day of Resurrection) shall draw near (of fulfillment). Then (when mankind is resurrected from their graves), you shall see the eyes of the disbelievers fixedly stare in horror. (They will say): \\\"Woe to us! We were indeed heedless of this; nay, but we were Zalimun (polytheists and wrong-doers, etc.).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 21\n        },\n        \"text\" : \"Certainly! You (disbelievers) and that which you are worshipping now besides Allah, are (but) fuel for Hell! (Surely), you will enter it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 21\n        },\n        \"text\" : \"Had these (idols, etc.) been aliha (gods), they would not have entered there (Hell), and all of them will abide therein.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 21\n        },\n        \"text\" : \"They shall not hear the slightest sound of it (Hell), while they abide in that which their ownselves desire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 21\n        },\n        \"text\" : \"And (remember) the Day when We shall roll up the heavens like a scroll rolled up for books, as We began the first creation, We shall repeat it, (it is) a promise binding upon Us. Truly, We shall do it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 21\n        },\n        \"text\" : \"And indeed We have written in Zabur (Psalms) [i.e. all the revealed Holy Books the Taurat (Torah), the Injeel (Gospel), the Quran] after (We have already written in) Al-Lauh Al-Mahfuz (the Book, that is in the heaven with Allah), that My righteous slaves shall inherit the land (i.e. the land of Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 21\n        },\n        \"text\" : \"Verily, in this (the Quran) there is a plain Message for people who worship Allah (i.e. the true, real believers of Islamic Monotheism who act practically on the Quran and the Sunnah legal ways of the Prophet SAW).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 21\n        },\n        \"text\" : \"And We have sent you (O Muhammad SAW) not but as a mercy for the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 21\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"It is revealed to me that your Ilah (God) is only one Ilah (God - Allah). Will you then submit to His Will (become Muslims and stop worshipping others besides Allah)?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 21\n        },\n        \"text\" : \"But if they (disbelievers, idolaters, Jews, Christians, polytheists, etc.) turn away (from Islamic Monotheism) say (to them O Muhammad SAW): \\\"I give you a notice (of war as) to be known to us all alike. And I know not whether that which you are promised (i.e. the torment or the Day of Resurrection) is near or far.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 21\n        },\n        \"text\" : \"(Say O Muhammad SAW) Verily, He (Allah) knows that which is spoken aloud (openly) and that which you conceal.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 21\n        },\n        \"text\" : \"He (Muhammad SAW) said:\\\"My Lord! Judge You in truth! Our Lord is the Most Beneficent, Whose Help is to be sought against that which you attribute (unto Allah that He has offspring, and unto Muhammad SAW that he is a sorcerer, and unto the Quran that it is poetry, etc.)!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 22\n        },\n        \"text\" : \"The Day you shall see it, every nursing mother will forget her nursling, and every pregnant one will drop her load, and you shall see mankind as in a drunken state, yet they will not be drunken, but severe will be the Torment of Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 22\n        },\n        \"text\" : \"And among mankind is he who disputes concerning Allah, without knowledge, and follows every rebellious (disobedient to Allah) Shaitan (devil) (devoid of each and every kind of good).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 22\n        },\n        \"text\" : \"That is because Allah, He is the Truth, and it is He Who gives life to the dead, and it is He Who is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 22\n        },\n        \"text\" : \"And surely, the Hour is coming, there is no doubt about it, and certainly, Allah will resurrect those who are in the graves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 22\n        },\n        \"text\" : \"And among men is he who disputes about Allah, without knowledge or guidance, or a Book giving light (from Allah),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 22\n        },\n        \"text\" : \"Bending his neck in pride (far astray from the Path of Allah), and leading (others) too (far) astray from the Path of Allah. For him there is disgrace in this worldly life, and on the Day of Resurrection We shall make him taste the torment of burning (Fire).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 22\n        },\n        \"text\" : \"That is because of what your hands have sent forth, and verily, Allah is not unjust to (His) slaves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 22\n        },\n        \"text\" : \"And among mankind is he who worships Allah as it were, upon the very edge (i.e. in doubt); if good befalls him, he is content therewith; but if a trial befalls him, he turns back on his face (i.e. reverts back to disbelief after embracing Islam). He loses both this world and the Hereafter. That is the evident loss.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 22\n        },\n        \"text\" : \"He calls besides Allah unto that which hurts him not, nor profits him. That is a straying far away.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 22\n        },\n        \"text\" : \"He calls unto him whose harm is nearer than his profit; certainly, and evil Maula (patron) and certainly an evil friend!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 22\n        },\n        \"text\" : \"Truly, Allah will admit those who believe (in Islamic Monotheism) and do righteous good deeds (according to the Quran and the Sunnah) to Gardens underneath which rivers flow (in Paradise). Verily, Allah does what He wills.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 22\n        },\n        \"text\" : \"Whoever thinks that Allah will not help him (Muhammad SAW) in this world and in the Hereafter, let him stretch out a rope to the ceiling and let him strangle himself. Then let him see whether his plan will remove that whereat he rages!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 22\n        },\n        \"text\" : \"Thus have We sent it (this Quran) down (to Muhammad SAW) as clear signs, evidences and proofs, and surely, Allah guides whom He wills.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 22\n        },\n        \"text\" : \"Verily, those who believe (in Allah and in His Messenger Muhammad SAW), and those who are Jews, and the Sabians, and the Christians, and the Magians, and those who worship others besides Allah, truly, Allah will judge between them on the Day of Resurrection. Verily! Allah is Witness over all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 22\n        },\n        \"text\" : \"See you not that to Allah prostrates whoever is in the heavens and whoever is on the earth, and the sun, and the moon, and the stars, and the mountains, and the trees, and Ad-Dawab (moving living creatures, beasts, etc.), and many of mankind? But there are many (men) on whom the punishment is justified. And whomsoever Allah disgraces, none can honour him. Verily! Allah does what He wills.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 22\n        },\n        \"text\" : \"Truly, Allah will admit those who believe (in the Oneness of Allah Islamic Monotheism) and do righteous good deeds, to Gardens underneath which rivers flow (in Paradise), wherein they will be adorned with bracelets of gold and pearls and their garments therein will be of silk.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 22\n        },\n        \"text\" : \"And they are guided (in this world) unto goodly speech (i.e. La ilaha ill-Allah, Alhamdu lillah, recitation of the Quran, etc.) and they are guided to the Path of Him (i.e. Allah's Religion of Islamic Monotheism), Who is Worthy of all praises.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 22\n        },\n        \"text\" : \"Verily! Those who disbelieve and hinder (men) from the Path of Allah, and from Al-Masjid-al-Haram (at Makkah) which We have made (open) to (all) men, the dweller in it and the visitor from the country are equal there [as regards its sanctity and pilgrimage (Hajj and 'Umrah)]. And whoever inclines to evil actions therein or to do wrong (i.e. practise polytheism and leave Islamic Monotheism), him We shall cause to taste a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 22\n        },\n        \"text\" : \"And (remember) when We showed Ibrahim (Abraham) the site of the (Sacred) House (the Ka'bah at Makkah) (saying): \\\"Associate not anything (in worship) with Me, [La ilaha ill-Allah (none has the right to be worshipped but Allah Islamic Monotheism], and sanctify My House for those who circumambulate it, and those who stand up for prayer, and those who bow (submit themselves with humility and obedience to Allah), and make prostration (in prayer, etc.);\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 22\n        },\n        \"text\" : \"That they may witness things that are of benefit to them (i.e. reward of Hajj in the Hereafter, and also some worldly gain from trade, etc.), and mention the Name of Allah on appointed days (i.e. 10th, 11th, 12th, and 13th day of Dhul-Hijjah), over the beast of cattle that He has provided for them (for sacrifice) (at the time of their slaughtering by saying: Bismillah, WAllahu-Akbar, Allahumma Minka wa Ilaik). Then eat thereof and feed therewith the poor who have a very hard time.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 22\n        },\n        \"text\" : \"That (Manasik prescribed duties of Hajj is the obligation that mankind owes to Allah), and whoever honours the sacred things of Allah, then that is better for him with his Lord. The cattle are lawful to you, except those (that will be) mentioned to you (as exceptions). So shun the abomination (worshipping) of idol, and shun lying speech (false statements)\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 22\n        },\n        \"text\" : \"Hunafa' Lillah (i.e. to worship none but Allah), not associating partners (in worship, etc.) unto Him and whoever assigns partners to Allah, it is as if he had fallen from the sky, and the birds had snatched him, or the wind had thrown him to a far off place.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 22\n        },\n        \"text\" : \"Thus it is [what has been mentioned in the above said Verses (27, 28, 29, 30, 31) is an obligation that mankind owes to Allah]. And whosoever honours the Symbols of Allah, then it is truly from the piety of the heart.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 22\n        },\n        \"text\" : \"And for every nation We have appointed religious ceremonies, that they may mention the Name of Allah over the beast of cattle that He has given them for food. And your Ilah (God) is One Ilah (God Allah), so you must submit to Him Alone (in Islam). And (O Muhammad SAW) give glad tidings to the Mukhbitin [those who obey Allah with humility and are humble from among the true believers of Islamic Monotheism],\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 22\n        },\n        \"text\" : \"Whose hearts are filled with fear when Allah is mentioned; who patiently bear whatever may befall them (of calamities); and who perform As-Salat (Iqamat-as-Salat), and who spend (in Allah's Cause) out of what We have provided them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 22\n        },\n        \"text\" : \"And the Budn (cows, oxen, or camels driven to be offered as sacrifices by the pilgrims at the sanctuary of Makkah.) We have made for you as among the Symbols of Allah, therein you have much good. So mention the Name of Allah over them when they are drawn up in lines (for sacrifice). Then, when they are down on their sides (after slaughter), eat thereof, and feed the beggar who does not ask (men), and the beggar who asks (men). Thus have We made them subject to you that you may be grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 22\n        },\n        \"text\" : \"It is neither their meat nor their blood that reaches Allah, but it is piety from you that reaches Him. Thus have We made them subject to you that you may magnify Allah for His Guidance to you. And give glad tidings (O Muhammad SAW) to the Muhsinun (doers of good).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 22\n        },\n        \"text\" : \"Truly, Allah defends those who believe. Verily! Allah likes not any treacherous ingrate to Allah [those who disobey Allah but obey Shaitan (Satan)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 22\n        },\n        \"text\" : \"Permission to fight is given to those (i.e. believers against disbelievers), who are fighting them, (and) because they (believers) have been wronged, and surely, Allah is Able to give them (believers) victory\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 22\n        },\n        \"text\" : \"Those who have been expelled from their homes unjustly only because they said: \\\"Our Lord is Allah.\\\" - For had it not been that Allah checks one set of people by means of another, monasteries, churches, synagogues, and mosques, wherein the Name of Allah is mentioned much would surely have been pulled down. Verily, Allah will help those who help His (Cause). Truly, Allah is All-Strong, All-Mighty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 22\n        },\n        \"text\" : \"Those (Muslim rulers) who, if We give them power in the land, (they) order for Iqamat-as-Salat. [i.e. to perform the five compulsory congregational Salat (prayers) (the males in mosques)], to pay the Zakat and they enjoin Al-Ma'ruf (i.e. Islamic Monotheism and all that Islam orders one to do), and forbid Al-Munkar (i.e. disbelief, polytheism and all that Islam has forbidden) [i.e. they make the Quran as the law of their country in all the spheres of life]. And with Allah rests the end of (all) matters (of creatures).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 22\n        },\n        \"text\" : \"And they ask you to hasten on the torment! And Allah fails not His Promise. And verily, a day with your Lord is as a thousand years of what you reckon.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 22\n        },\n        \"text\" : \"And many a township did I give respite while it was given to wrong-doing. Then (in the end) I seized it (with punishment). And to Me is the (final) return (of all).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 22\n        },\n        \"text\" : \"So those who believe (in the Oneness of Allah Islamic Monotheism) and do righteous good deeds, for them is forgiveness and Rizqun Karim (generous provision, i.e. Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 22\n        },\n        \"text\" : \"Never did We send a Messenger or a Prophet before you, but; when he did recite the revelation or narrated or spoke, Shaitan (Satan) threw (some falsehood) in it. But Allah abolishes that which Shaitan (Satan) throws in. Then Allah establishes His Revelations. And Allah is All-Knower, All-Wise:\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 22\n        },\n        \"text\" : \"That He (Allah) may make what is thrown in by Shaitan (Satan) a trial for those in whose hearts is a disease (of hypocrisy and disbelief) and whose hearts are hardened. And certainly, the Zalimun (polytheists and wrong-doers, etc.) are in an opposition far-off (from the truth against Allah's Messenger and the believers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 22\n        },\n        \"text\" : \"And that those who have been given knowledge may know that it (this Quran) is the truth from your Lord, and that they may believe therein, and their hearts may submit to it with humility. And verily, Allah is the Guide of those who believe, to the Straight Path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 22\n        },\n        \"text\" : \"The sovereignty on that Day will be that of Allah (the one Who has no partners). He will judge between them. So those who believed (in the Oneness of Allah Islamic Monotheism) and did righteous good deeds will be in Gardens of delight (Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 22\n        },\n        \"text\" : \"Those who emigrated in the Cause of Allah and after that were killed or died, surely, Allah will provide a good provision for them. And verily, it is Allah Who indeed is the Best of those who make provision.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 22\n        },\n        \"text\" : \"Truly, He will make them enter an entrance with which they shall be well-pleased, and verily, Allah indeed is All-Knowing, Most Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 22\n        },\n        \"text\" : \"That is so. And whoever has retaliated with the like of that which he was made to suffer, and then has again been wronged, Allah will surely help him. Verily! Allah indeed is Oft-Pardoning, Oft-Forgiving.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 22\n        },\n        \"text\" : \"That is because Allah merges the night into the day, and He merges the day into the night. And verily, Allah is All-Hearer, All-Seer.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 22\n        },\n        \"text\" : \"That is because Allah He is the Truth (the only True God of all that exists, Who has no partners or rivals with Him), and what they (the polytheists) invoke besides Him, it is Batil (falsehood) And verily, Allah He is the Most High, the Most Great.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 22\n        },\n        \"text\" : \"See you not that Allah sends down water (rain) from the sky, and then the earth becomes green? Verily, Allah is the Most Kind and Courteous, Well-Acquainted with all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 22\n        },\n        \"text\" : \"To Him belongs all that is in the heavens and all that is on the earth. And verily, Allah He is Rich (Free of all wants), Worthy of all praise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 22\n        },\n        \"text\" : \"See you not that Allah has subjected to you (mankind) all that is on the earth, and the ships that sail through the sea by His Command? He withholds the heaven from falling on the earth except by His Leave. Verily, Allah is, for mankind, full of Kindness, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 22\n        },\n        \"text\" : \"For every nation We have ordained religious ceremonies [e.g. slaughtering of the beast of cattle during the three days of stay at Mina (Makkah) during the Hajj (pilgrimage)] which they must follow; so let them (pagans) not dispute with you on the matter (i.e. to eat of the cattle which you slaughter, and not to eat of cattle which Allah kills by its natural death), but invite them to your Lord. Verily! You (O Muhammad SAW) indeed are on the (true) straight guidance. (i.e. the true religion of Islamic Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 22\n        },\n        \"text\" : \"And if they argue with you (as regards the slaughtering of the sacrifices), say; \\\"Allah knows best of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 22\n        },\n        \"text\" : \"\\\"Allah will judge between you on the Day of Resurrection about that wherein you used to differ.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 22\n        },\n        \"text\" : \"Know you not that Allah knows all that is in heaven and on earth? Verily, it is (all) in the Book (Al-Lauh Al-Mahfuz). Verily! That is easy for Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 22\n        },\n        \"text\" : \"And they worship besides Allah others for which He has sent down no authority, and of which they have no knowledge and for the Zalimun (wrong-doers, polytheists and disbelievers in the Oneness of Allah) there is no helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 22\n        },\n        \"text\" : \"And when Our Clear Verses are recited to them, you will notice a denial on the faces of the disbelievers! They are nearly ready to attack with violence those who recite Our Verses to them. Say: \\\"Shall I tell you of something worse than that? The Fire (of Hell) which Allah has promised to those who disbelieve, and worst indeed is that destination!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 22\n        },\n        \"text\" : \"O mankind! A similitude has been coined, so listen to it (carefully): Verily! Those on whom you call besides Allah, cannot create (even) a fly, even though they combine together for the purpose. And if the fly snatched away a thing from them, they would have no power to release it from the fly. So weak are (both) the seeker and the sought.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 22\n        },\n        \"text\" : \"They have not estimated Allah His Rightful Estimate; Verily, Allah is All-Strong, All-Mighty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 22\n        },\n        \"text\" : \"Allah chooses Messengers from angels and from men. Verily, Allah is All-Hearer, All-Seer.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 22\n        },\n        \"text\" : \"He knows what is before them, and what is behind them. And to Allah return all matters (for decision).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 22\n        },\n        \"text\" : \"And strive hard in Allah's Cause as you ought to strive (with sincerity and with all your efforts that His Name should be superior). He has chosen you (to convey His Message of Islamic Monotheism to mankind by inviting them to His religion, Islam), and has not laid upon you in religion any hardship, it is the religion of your father Ibrahim (Abraham) (Islamic Monotheism). It is He (Allah) Who has named you Muslims both before and in this (the Quran), that the Messenger (Muhammad SAW) may be a witness over you and you be witnesses over mankind! So perform As-Salat (Iqamat-as-Salat), give Zakat and hold fast to Allah [i.e. have confidence in Allah, and depend upon Him in all your affairs] He is your Maula (Patron, Lord, etc.), what an Excellent Maula (Patron, Lord, etc.) and what an Excellent Helper!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 23\n        },\n        \"text\" : \"Those who offer their Salat (prayers) with all solemnity and full submissiveness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 23\n        },\n        \"text\" : \"And those who turn away from Al-Laghw (dirty, false, evil vain talk, falsehood, and all that Allah has forbidden).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 23\n        },\n        \"text\" : \"Those who are faithfully true to their Amanat (all the duties which Allah has ordained, honesty, moral responsibility and trusts etc.) and to their covenants;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 23\n        },\n        \"text\" : \"Who shall inherit the Firdaus (Paradise). They shall dwell therein forever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 23\n        },\n        \"text\" : \"Then We made the Nutfah into a clot (a piece of thick coagulated blood), then We made the clot into a little lump of flesh, then We made out of that little lump of flesh bones, then We clothed the bones with flesh, and then We brought it forth as another creation. So blessed be Allah, the Best of creators.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 23\n        },\n        \"text\" : \"And indeed We sent Nuh (Noah) to his people, and he said: \\\"O my people! Worship Allah! You have no other Ilah (God) but Him (Islamic Monotheism). Will you not then be afraid (of Him i.e. of His Punishment because of worshipping others besides Him)?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 23\n        },\n        \"text\" : \"But the chiefs of those who disbelieved among his people said: \\\"He is no more than a human being like you, he seeks to make himself superior to you. Had Allah willed, He surely could have sent down angels; never did we hear such a thing among our fathers of old.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 23\n        },\n        \"text\" : \"And when you have embarked on the ship, you and whoever is with you, then say: \\\"All the praises and thanks be to Allah, Who has saved us from the people who are Zalimun (i.e. oppressors, wrong-doers, polytheists, those who join others in worship with Allah, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 23\n        },\n        \"text\" : \"And We sent to them a Messenger from among themselves (saying): \\\"Worship Allah! You have no other Ilah (God) but Him. Will you not then be afraid (of Him i.e. of His Punishment because of worshipping others besides Him)?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 23\n        },\n        \"text\" : \"\\\"Does he promise you that when you have died and have become dust and bones, you shall come out alive (resurrected)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 23\n        },\n        \"text\" : \"\\\"He is only a man who has invented a lie against Allah, but we are not going to believe in him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 23\n        },\n        \"text\" : \"(Allah) said: \\\"In a little while, they are sure to be regretful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 23\n        },\n        \"text\" : \"So As-Saihah (torment - awful cry, etc.) overtook them with justice, and We made them as rubbish of dead plants. So away with the people who are Zalimun (polytheists, wrong-doers, disbelievers in the Oneness of Allah, disobedient to His Messengers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 23\n        },\n        \"text\" : \"To Fir'aun (Pharaoh) and his chiefs, but they behaved insolently and they were people self-exalting (by disobeying their Lord, and exalting themselves over and above the Messenger of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 23\n        },\n        \"text\" : \"They said: \\\"Shall we believe in two men like ourselves, and their people are obedient to us with humility (and we use them to serve us as we like).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 23\n        },\n        \"text\" : \"O (you) Messengers! Eat of the Taiyibat [all kinds of Halal (legal) foods which Allah has made legal (meat of slaughtered eatable animals, milk products, fats, vegetables, fruits, etc.], and do righteous deeds. Verily! I am Well-Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 23\n        },\n        \"text\" : \"Invoke not loudly this day! Certainly, you shall not be helped by Us.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 23\n        },\n        \"text\" : \"Have they not pondered over the Word (of Allah, i.e. what is sent down to the Prophet SAW), or has there come to them what had not come to their fathers of old?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 23\n        },\n        \"text\" : \"Or say they: \\\"There is madness in him?\\\" Nay, but he brought them the truth [i.e. \\\"(A) Tauhid: Worshipping Allah Alone in all aspects (B) The Quran (C) The religion of Islam,\\\"] but most of them (the disbelievers) are averse to the truth.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 23\n        },\n        \"text\" : \"And certainly, you (O Muhammad SAW) call them to a Straight Path (true religion Islamic Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 23\n        },\n        \"text\" : \"And indeed We seized them with punishment, but they humbled not themselves to their Lord, nor did they invoke (Allah) with submission to Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 23\n        },\n        \"text\" : \"And it is He Who has created you on the earth, and to Him you shall be gathered back.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 23\n        },\n        \"text\" : \"They said: \\\"When we are dead and have become dust and bones, shall we be resurrected indeed?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 23\n        },\n        \"text\" : \"They will say: \\\"It is Allah's!\\\" Say: \\\"Will you not then remember?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 23\n        },\n        \"text\" : \"They will say: \\\"Allah.\\\" Say: \\\"Will you not then fear Allah (believe in His Oneness, obey Him, believe in the Resurrection and Recompense for each and every good or bad deed).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 23\n        },\n        \"text\" : \"Say \\\"In Whose Hand is the sovereignty of everything (i.e. treasures of each and everything)? And He protects (all), while against Whom there is no protector, (i.e. if Allah saves anyone none can punish or harm him, and if Allah punishes or harms anyone none can save him), if you know.\\\" [Tafsir Al-Qurtubi, Vol. 12, Page 145]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 23\n        },\n        \"text\" : \"They will say: \\\"(All that belongs) to Allah.\\\" Say: \\\"How then are you deceived and turn away from the truth?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 23\n        },\n        \"text\" : \"No son (or offspring or children) did Allah beget, nor is there any ilah (god) along with Him; (if there had been many gods), behold, each god would have taken away what he had created, and some would have tried to overcome others! Glorified be Allah above all that they attribute to Him!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 23\n        },\n        \"text\" : \"All-Knower of the unseen and the seen! Exalted be He over all that they associate as partners to Him!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 23\n        },\n        \"text\" : \"Until, when death comes to one of them (those who join partners with Allah), he says: \\\"My Lord! Send me back,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 23\n        },\n        \"text\" : \"\\\"Our Lord! Bring us out of this; if ever we return (to evil), then indeed we shall be Zalimun: (polytheists, oppressors, unjust, and wrong-doers, etc.).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 23\n        },\n        \"text\" : \"He (Allah) will say: \\\"Remain you in it with ignominy! And speak you not to Me!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 23\n        },\n        \"text\" : \"Verily! There was a party of My slaves, who used to say: \\\"Our Lord! We believe, so forgive us, and have mercy on us, for You are the Best of all who show mercy!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 23\n        },\n        \"text\" : \"He (Allah) will say: \\\"What number of years did you stay on earth?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 23\n        },\n        \"text\" : \"He (Allah) will say: \\\"You stayed not but a little, if you had only known!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 23\n        },\n        \"text\" : \"So Exalted be Allah, the True King, La ilaha illa Huwa (none has the right to be worshipped but He), the Lord of the Supreme Throne!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 117,\n          \"sura\" : 23\n        },\n        \"text\" : \"And whoever invokes (or worships), besides Allah, any other ilah (god), of whom he has no proof, then his reckoning is only with his Lord. Surely! Al-Kafirun (the disbelievers in Allah and in the Oneness of Allah, polytheists, pagans, idolaters, etc.) will not be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 24\n        },\n        \"text\" : \"The woman and the man guilty of illegal sexual intercourse, flog each of them with a hundred stripes. Let not pity withhold you in their case, in a punishment prescribed by Allah, if you believe in Allah and the Last Day. And let a party of the believers witness their punishment. (This punishment is for unmarried persons guilty of the above crime but if married persons commit it, the punishment is to stone them to death, according to Allah's Law).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 24\n        },\n        \"text\" : \"And those who accuse chaste women, and produce not four witnesses, flog them with eighty stripes, and reject their testimony forever, they indeed are the Fasiqun (liars, rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 24\n        },\n        \"text\" : \"Except those who repent thereafter and do righteous deeds, (for such) verily, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 24\n        },\n        \"text\" : \"And for those who accuse their wives, but have no witnesses except themselves, let the testimony of one of them be four testimonies (i.e. testifies four times) by Allah that he is one of those who speak the truth.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 24\n        },\n        \"text\" : \"And the fifth (testimony) (should be) the invoking of the Curse of Allah on him if he be of those who tell a lie (against her).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 24\n        },\n        \"text\" : \"But it shall avert the punishment (of stoning to death) from her, if she bears witness four times by Allah, that he (her husband) is telling a lie.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 24\n        },\n        \"text\" : \"And the fifth (testimony) should be that the Wrath of Allah be upon her if he (her husband) speaks the truth.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 24\n        },\n        \"text\" : \"And had it not been for the Grace of Allah and His Mercy on you (He would have hastened the punishment upon you)! And that Allah is the One Who accepts repentance, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 24\n        },\n        \"text\" : \"Why did they not produce four witnesses? Since they (the slanderers) have not produced witnesses! Then with Allah they are the liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 24\n        },\n        \"text\" : \"Had it not been for the Grace of Allah and His Mercy unto you in this world and in the Hereafter, a great torment would have touched you for that whereof you had spoken.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 24\n        },\n        \"text\" : \"When you were propagating it with your tongues, and uttering with your mouths that whereof you had no knowledge, you counted it a little thing, while with Allah it was very great.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 24\n        },\n        \"text\" : \"And why did you not, when you heard it, say? \\\"It is not right for us to speak of this. Glory be to You (O Allah) this is a great lie.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 24\n        },\n        \"text\" : \"Allah forbids you from it and warns you not to repeat the like of it forever, if you are believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 24\n        },\n        \"text\" : \"And Allah makes the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) plain to you, and Allah is All-Knowing, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 24\n        },\n        \"text\" : \"Verily, those who like that (the crime of) illegal sexual intercourse should be propagated among those who believe, they will have a painful torment in this world and in the Hereafter. And Allah knows and you know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 24\n        },\n        \"text\" : \"And had it not been for the Grace of Allah and His Mercy on you, (Allah would have hastened the punishment upon you). And that Allah is full of kindness, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 24\n        },\n        \"text\" : \"O you who believe! Follow not the footsteps of Shaitan (Satan). And whosoever follows the footsteps of Shaitan (Satan), then, verily he commands Al-Fahsha' [i.e. to commit indecency (illegal sexual intercourse, etc.)], and Al-Munkar [disbelief and polytheism (i.e. to do evil and wicked deeds; to speak or to do what is forbidden in Islam, etc.)]. And had it not been for the Grace of Allah and His Mercy on you, not one of you would ever have been pure from sins. But Allah purifies (guides to Islam) whom He wills, and Allah is All-Hearer, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 24\n        },\n        \"text\" : \"And let not those among you who are blessed with graces and wealth swear not to give (any sort of help) to their kinsmen, Al-Masakin (the poor), and those who left their homes for Allah's Cause. Let them pardon and forgive. Do you not love that Allah should forgive you? And Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 24\n        },\n        \"text\" : \"On that Day Allah will pay them the recompense of their deeds in full, and they will know that Allah, He is the Manifest Truth.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 24\n        },\n        \"text\" : \"And if you find no one therein, still, enter not until permission has been given. And if you are asked to go back, go back, for it is purer for you, and Allah is All-Knower of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 24\n        },\n        \"text\" : \"There is no sin on you that you enter (without taking permission) houses uninhabited (i.e. not possessed by anybody), (when) you have any interest in them. And Allah has knowledge of what you reveal and what you conceal.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 24\n        },\n        \"text\" : \"Tell the believing men to lower their gaze (from looking at forbidden things), and protect their private parts (from illegal sexual acts, etc.). That is purer for them. Verily, Allah is All-Aware of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 24\n        },\n        \"text\" : \"And tell the believing women to lower their gaze (from looking at forbidden things), and protect their private parts (from illegal sexual acts, etc.) and not to show off their adornment except only that which is apparent (like palms of hands or one eye or both eyes for necessity to see the way, or outer dress like veil, gloves, head-cover, apron, etc.), and to draw their veils all over Juyubihinna (i.e. their bodies, faces, necks and bosoms, etc.) and not to reveal their adornment except to their husbands, their fathers, their husband's fathers, their sons, their husband's sons, their brothers or their brother's sons, or their sister's sons, or their (Muslim) women (i.e. their sisters in Islam), or the (female) slaves whom their right hands possess, or old male servants who lack vigour, or small children who have no sense of the shame of sex. And let them not stamp their feet so as to reveal what they hide of their adornment. And all of you beg Allah to forgive you all, O believers, that you may be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 24\n        },\n        \"text\" : \"And marry those among you who are single (i.e. a man who has no wife and the woman who has no husband) and (also marry) the Salihun (pious, fit and capable ones) of your (male) slaves and maid-servants (female slaves). If they be poor, Allah will enrich them out of His Bounty. And Allah is All-Sufficent for His creatures' needs, All-Knowing (about the state of the people).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 24\n        },\n        \"text\" : \"And let those who find not the financial means for marriage keep themselves chaste, until Allah enriches them of His Bounty. And such of your slaves as seek a writing (of emancipation), give them such writing, if you know that they are good and trustworthy. And give them something yourselves out of the wealth of Allah which He has bestowed upon you. And force not your maids to prostitution, if they desire chastity, in order that you may make a gain in the (perishable) goods of this worldly life. But if anyone compels them (to prostitution), then after such compulsion, Allah is Oft-Forgiving, Most Merciful (to those women, i.e. He will forgive them because they have been forced to do this evil action unwillingly).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 24\n        },\n        \"text\" : \"Allah is the Light of the heavens and the earth. The parable of His Light is as (if there were) a niche and within it a lamp, the lamp is in glass, the glass as it were a brilliant star, lit from a blessed tree, an olive, neither of the east (i.e. neither it gets sun-rays only in the morning) nor of the west (i.e. nor it gets sun-rays only in the afternoon, but it is exposed to the sun all day long), whose oil would almost glow forth (of itself), though no fire touched it. Light upon Light! Allah guides to His Light whom He wills. And Allah sets forth parables for mankind, and Allah is All-Knower of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 24\n        },\n        \"text\" : \"In houses (mosques), which Allah has ordered to be raised (to be cleaned, and to be honoured), in them His Name is glorified in the mornings and in the afternoons or the evenings,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 24\n        },\n        \"text\" : \"Men whom neither trade nor sale diverts them from the Remembrance of Allah (with heart and tongue), nor from performing As-Salat (Iqamat-as-Salat), nor from giving the Zakat. They fear a Day when hearts and eyes will be overturned (from the horror of the torment of the Day of Resurrection).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 24\n        },\n        \"text\" : \"That Allah may reward them according to the best of their deeds, and add even more for them out of His Grace. And Allah provides without measure to whom He wills.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 24\n        },\n        \"text\" : \"As for those who disbelieve, their deeds are like a mirage in a desert. The thirsty one thinks it to be water, until he comes up to it, he finds it to be nothing, but he finds Allah with him, Who will pay him his due (Hell). And Allah is Swift in taking account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 24\n        },\n        \"text\" : \"Or [the state of a disbeliever] is like the darkness in a vast deep sea, overwhelmed with a great wave topped by a great wave, topped by dark clouds, darkness, one above another, if a man stretches out his hand, he can hardly see it! And he for whom Allah has not appointed light, for him there is no light.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 24\n        },\n        \"text\" : \"See you not (O Muhammad SAW) that Allah, He it is Whom glorify whosoever is in the heavens and the earth, and the birds with wings out-spread (in their flight). Of each one He (Allah) knows indeed his Salat (prayer) and his glorification, [or everyone knows his Salat (prayer) and his glorification], and Allah is All-Aware of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 24\n        },\n        \"text\" : \"And to Allah belongs the sovereignty of the heavens and the earth, and to Allah is the return (of all).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 24\n        },\n        \"text\" : \"See you not that Allah drives the clouds gently, then joins them together, then makes them into a heap of layers, and you see the rain comes forth from between them. And He sends down from the sky hail (like) mountains, (or there are in the heaven mountains of hail from where He sends down hail), and strike therewith whom He will, and averts it from whom He wills. The vivid flash of its (clouds) lightning nearly blinds the sight. [Tafsir At-Tabari].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 24\n        },\n        \"text\" : \"Allah causes the night and the day to succeed each other (i.e. if the day is gone, the night comes, and if the night is gone, the day comes, and so on). Truly, in these things is indeed a lesson for those who have insight.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 24\n        },\n        \"text\" : \"Allah has created every moving (living) creature from water. Of them there are some that creep on their bellies, some that walk on two legs, and some that walk on four. Allah creates what He wills. Verily! Allah is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 24\n        },\n        \"text\" : \"We have indeed sent down (in this Quran) manifest Ayat (proofs, evidences, verses, lessons, signs, revelations, lawful and unlawful things, and the set boundries of Islamic religion, etc. that make things clear showing the Right Path of Allah). And Allah guides whom He wills to a Straight Path (i.e. to Allah's religion of Islamic Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 24\n        },\n        \"text\" : \"They (hypocrites) say: \\\"We have believed in Allah and in the Messenger (Muhammad SAW), and we obey,\\\" then a party of them turn away thereafter, such are not believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 24\n        },\n        \"text\" : \"And when they are called to Allah (i.e. His Words, the Quran) and His Messenger (SAW), to judge between them, lo! a party of them refuse (to come) and turn away.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 24\n        },\n        \"text\" : \"Is there a disease in their hearts? Or do they doubt or fear lest Allah and His Messenger (SAW) should wrong them in judgement. Nay, it is they themselves who are the Zalimun (polytheists, hypocrites and wrong-doers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 24\n        },\n        \"text\" : \"The only saying of the faithful believers, when they are called to Allah (His Words, the Quran) and His Messenger (SAW), to judge between them, is that they say: \\\"We hear and we obey.\\\" And such are the prosperous ones (who will live forever in Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 24\n        },\n        \"text\" : \"And whosoever obeys Allah and His Messenger (SAW), fears Allah, and keeps his duty (to Him), such are the successful ones.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 24\n        },\n        \"text\" : \"They swear by Allah their strongest oaths, that if only you would order them, they would leave (their homes for fighting in Allah's Cause). Say: \\\"Swear you not; (this) obedience (of yours) is known (to be false). Verily, Allah knows well what you do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 24\n        },\n        \"text\" : \"Say: \\\"Obey Allah and obey the Messenger, but if you turn away, he (Messenger Muhammad SAW) is only responsible for the duty placed on him (i.e. to convey Allah's Message) and you for that placed on you. If you obey him, you shall be on the right guidance. The Messenger's duty is only to convey (the message) in a clear way (i.e. to preach in a plain way).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 24\n        },\n        \"text\" : \"Allah has promised those among you who believe, and do righteous good deeds, that He will certainly grant them succession to (the present rulers) in the earth, as He granted it to those before them, and that He will grant them the authority to practise their religion, that which He has chosen for them (i.e. Islam). And He will surely give them in exchange a safe security after their fear (provided) they (believers) worship Me and do not associate anything (in worship) with Me. But whoever disbelieved after this, they are the Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 24\n        },\n        \"text\" : \"And perform As-Salat (Iqamat-as-Salat), and give Zakat and obey the Messenger (Muhammad SAW) that you may receive mercy (from Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 24\n        },\n        \"text\" : \"Consider not that the disbelievers can escape in the land. Their abode shall be the Fire, and worst indeed is that destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 24\n        },\n        \"text\" : \"O you who believe! Let your legal slaves and slave-girls, and those among you who have not come to the age of puberty ask your permission (before they come to your presence) on three occasions; before Fajr (morning) prayer, and while you put off your clothes for the noonday (rest), and after the 'Isha' (late-night) prayer. (These) three times are of privacy for you, other than these times there is no sin on you or on them to move about, attending (helping) you each other. Thus Allah makes clear the Ayat (the Verses of this Quran, showing proofs for the legal aspects of permission for visits, etc.) to you. And Allah is All-Knowing, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 24\n        },\n        \"text\" : \"And when the children among you come to puberty, then let them (also) ask for permission, as those senior to them (in age). Thus Allah makes clear His Ayat (Commandments and legal obligations) for you. And Allah is All-Knowing, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 24\n        },\n        \"text\" : \"And as for women past child-bearing who do not expect wed-lock, it is no sin on them if they discard their (outer) clothing in such a way as not to show their adornment. But to refrain (i.e. not to discard their outer clothing) is better for them. And Allah is All-Hearer, All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 24\n        },\n        \"text\" : \"There is no restriction on the blind, nor any restriction on the lame, nor any restriction on the sick, nor on yourselves, if you eat from your houses, or the houses of your fathers, or the houses of your mothers, or the houses of your brothers, or the houses of your sisters, or the houses of your father's brothers, or the houses of your father's sisters, or the houses of your mother's brothers, or the houses of your mother's sisters, or (from that) whereof you hold keys, or (from the house) of a friend. No sin on you whether you eat together or apart. But when you enter the houses, greet one another with a greeting from Allah (i.e. say: As-Salamu 'Alaikum - peace be on you) blessed and good. Thus Allah makes clear the Ayat (these Verses or your religious symbols and signs, etc.) to you that you may understand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 24\n        },\n        \"text\" : \"The true believers are only those, who believe in (the Oneness of) Allah and His Messenger (Muhammad SAW), and when they are with him on some common matter, they go not away until they have asked his permission. Verily! Those who ask your permission, those are they who (really) believe in Allah and His Messenger. So if they ask your permission for some affairs of theirs, give permission to whom you will of them, and ask Allah for their forgiveness. Truly, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 24\n        },\n        \"text\" : \"Make not the calling of the Messenger (Muhammad SAW) among you as your calling of one another. Allah knows those of you who slip away under shelter (of some excuse without taking the permission to leave, from the Messenger SAW). And let those who oppose the Messenger's (Muhammad SAW) commandment (i.e. his Sunnah legal ways, orders, acts of worship, statements, etc.) (among the sects) beware, lest some Fitnah (disbelief, trials, afflictions, earthquakes, killing, overpowered by a tyrant, etc.) befall them or a painful torment be inflicted on them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 24\n        },\n        \"text\" : \"Certainly, to Allah belongs all that is in the heavens and the earth. Surely, He knows your condition and (He knows) the Day when they will be brought back to Him, then He will inform them of what they did. And Allah is All-Knower of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 25\n        },\n        \"text\" : \"Say: \\\"It (this Quran) has been sent down by Him (Allah) (the Real Lord of the heavens and earth) Who knows the secret of the heavens and the earth. Truly, He is Oft-Forgiving, Most Merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 25\n        },\n        \"text\" : \"Blessed be He Who, if He will, will assign you better than (all) that, - Gardens under which rivers flow (Paradise) and will assign you palaces (i.e. in Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 25\n        },\n        \"text\" : \"And when they shall be thrown into a narrow place thereof, chained together, they will exclaim therein for destruction.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 25\n        },\n        \"text\" : \"For them there will be therein all that they desire, and they will abide (there forever). It is a promise binding upon your Lord that must be fulfilled.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 25\n        },\n        \"text\" : \"And on the Day when He will gather them together and that which they worship besides Allah [idols, angels, pious men, saints, 'Iesa (Jesus) - son of Maryam (Mary), etc.]. He will say: \\\"Was it you who misled these My slaves or did they (themselves) stray from the (Right) Path?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 25\n        },\n        \"text\" : \"Thus they (false gods all deities other than Allah) will give you (polytheists) the lie regarding what you say (that they are gods besides Allah), then you can neither avert (the punishment), nor get help. And whoever among you does wrong (i.e. sets up rivals to Allah), We shall make him taste a great torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 25\n        },\n        \"text\" : \"And We never sent before you (O Muhammad SAW) any of the Messengers but verily, they ate food and walked in the markets. And We have made some of you as a trial for others: will you have patience? And your Lord is Ever All-Seer (of everything).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 25\n        },\n        \"text\" : \"On the Day they will see the angels, no glad tidings will there be for the Mujrimun (criminals, disbelievers, polytheists, sinners, etc.) that day. And they (angels) will say: \\\"All kinds of glad tidings are forbidden for you,\\\" [None will be allowed to enter Paradise except the one who said: La ilaha ill-Allah, \\\"(none has the right to be worshipped but Allah) and acted practically on its legal orders and obligations].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 25\n        },\n        \"text\" : \"And We shall turn to whatever deeds they (disbelievers, polytheists, sinners, etc.) did, and We shall make such deeds as scattered floating particles of dust.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 25\n        },\n        \"text\" : \"And (remember) the Day when the heaven shall be rent asunder with clouds, and the angels will be sent down, with a grand descending.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 25\n        },\n        \"text\" : \"The sovereignty on that Day will be the true (sovereignty), belonging to the Most Beneficent (Allah), and it will be a hard Day for the disbelievers (those who disbelieve in the Oneness of Allah Islamic Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 25\n        },\n        \"text\" : \"And those who disbelieve say: \\\"Why is not the Quran revealed to him all at once?\\\" Thus (it is sent down in parts), that We may strengthen your heart thereby. And We have revealed it to you gradually, in stages. (It was revealed to the Prophet SAW in 23 years.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 25\n        },\n        \"text\" : \"And when they see you (O Muhammad SAW), they treat you only as a mockery (saying):\\\"Is this the one whom Allah has sent as a Messenger?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 25\n        },\n        \"text\" : \"And indeed We have distributed it (rain or water) amongst them in order that they may remember the Grace of Allah, but most men refuse (or deny the Truth or Faith) and accept nothing but disbelief or ingratitude.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 25\n        },\n        \"text\" : \"And it is He Who has created man from water, and has appointed for him kindred by blood, and kindred by marriage. And your Lord is Ever All-Powerful to do what He will.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 25\n        },\n        \"text\" : \"And they (disbelievers, polytheists, etc.) worship besides Allah, that which can neither profit them nor harm them, and the disbeliever is ever a helper (of the Satan) against his Lord.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 25\n        },\n        \"text\" : \"And put your trust (O Muhammad SAW) in the Ever Living One Who dies not, and glorify His Praises, and Sufficient is He as the All-Knower of the sins of His slaves;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 25\n        },\n        \"text\" : \"Who created the heavens and the earth and all that is between them in six Days. Then He Istawa (rose over) the Throne (in a manner that suits His Majesty). The Most Beneficent (Allah)! Ask Him (O Prophet Muhammad SAW), (concerning His Qualities, His rising over His Throne, His creations, etc.), as He is Al-Khabir (The All-Knower of everything i.e. Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 25\n        },\n        \"text\" : \"And when it is said to them: \\\"Prostrate to the Most Beneficent (Allah)! They say: \\\"And what is the Most Beneficent? Shall we fall down in prostration to that which you (O Muhammad SAW) command us?\\\" And it increases in them only aversion.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 25\n        },\n        \"text\" : \"And the slaves of the Most Beneficent (Allah) are those who walk on the earth in humility and sedateness, and when the foolish address them (with bad words) they reply back with mild words of gentleness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 25\n        },\n        \"text\" : \"And those who invoke not any other ilah (god) along with Allah, nor kill such life as Allah has forbidden, except for just cause, nor commit illegal sexual intercourse and whoever does this shall receive the punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 25\n        },\n        \"text\" : \"Except those who repent and believe (in Islamic Monotheism), and do righteous deeds, for those, Allah will change their sins into good deeds, and Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 25\n        },\n        \"text\" : \"And whosoever repents and does righteous good deeds, then verily, he repents towards Allah with true repentance.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 25\n        },\n        \"text\" : \"And those who, when they are reminded of the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of their Lord, fall not deaf and blind thereat.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 25\n        },\n        \"text\" : \"Those will be rewarded with the highest place (in Paradise) because of their patience. Therein they shall be met with greetings and the word of peace and respect.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 26\n        },\n        \"text\" : \"Ta-Sin-Mim. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings.]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 26\n        },\n        \"text\" : \"These are the Verses of the manifest Book [this Quran, which was promised by Allah in the Taurat (Torah) and the Injeel (Gospel), makes things clear].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 26\n        },\n        \"text\" : \"And never comes there unto them a Reminder as a recent revelation from the Most Beneficent (Allah), but they turn away therefrom.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 26\n        },\n        \"text\" : \"And verily, your Lord! He is truly the All-Mighty, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 26\n        },\n        \"text\" : \"And (remember) when your Lord called Musa (Moses) (saying): \\\"Go to the people who are Zalimun (polytheists and wrong-doing),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 26\n        },\n        \"text\" : \"The people of Fir'aun (Pharaoh). Will they not fear Allah and become righteous?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 26\n        },\n        \"text\" : \"Allah said: \\\"Nay! Go you both with Our Signs. Verily! We shall be with you, listening.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"And when you both come to Fir'aun (Pharaoh), say: 'We are the Messengers of the Lord of the 'Alamin (mankind, jinns and all that exists),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"So allow the Children of Israel to go with us.' \\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 26\n        },\n        \"text\" : \"Fir'aun (Pharaoh) said: \\\"And what is the Lord of the 'Alamin (mankind, jinns and all that exists)?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 26\n        },\n        \"text\" : \"Musa (Moses) said: \\\"Lord of the heavens and the earth, and all that is between them, if you seek to be convinced with certainty.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 26\n        },\n        \"text\" : \"Musa (Moses) said: \\\"Lord of the east and the west, and all that is between them, if you did but understand!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 26\n        },\n        \"text\" : \"And he drew out his hand, and behold, it was white to all beholders!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 26\n        },\n        \"text\" : \"They said: \\\"Put him off and his brother (for a while), and send callers to the cities\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 26\n        },\n        \"text\" : \"He said: \\\"Yes, and you shall then verily be of those brought near (to myself).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 26\n        },\n        \"text\" : \"Then Musa (Moses) threw his stick, and behold, it swallowed up all the falsehoods which they showed!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 26\n        },\n        \"text\" : \"Saying: \\\"We believe in the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 26\n        },\n        \"text\" : \"[Fir'aun (Pharaoh)] said: \\\"You have believed in him before I give you leave. Surely, he indeed is your chief, who has taught you magic! So verily, you shall come to know. Verily, I will cut off your hands and your feet on opposite sides, and I will crucify you all.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 26\n        },\n        \"text\" : \"They said: \\\"No harm! Surely, to our Lord (Allah) we are to return;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"Verily! We really hope that our Lord will forgive us our sins, as we are the first of the believers [in Musa (Moses) and in the Monotheism which he has brought from Allah].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 26\n        },\n        \"text\" : \"Then Fir'aun (Pharaoh) sent callers to (all) the cities.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 26\n        },\n        \"text\" : \"(Saying): \\\"Verily! These indeed are but a small band.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"But we are host all assembled, amply fore-warned.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 26\n        },\n        \"text\" : \"And We saved Musa (Moses) and all those with him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 26\n        },\n        \"text\" : \"And verily, your Lord! He is truly the All-Mighty, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 26\n        },\n        \"text\" : \"He said: \\\"Do they hear you, when you call (on them)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"Verily! They are enemies to me, save the Lord of the 'Alamin (mankind, jinns and all that exists);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 26\n        },\n        \"text\" : \"And disgrace me not on the Day when (all the creatures) will be resurrected;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 26\n        },\n        \"text\" : \"Except him who brings to Allah a clean heart [clean from Shirk (polytheism) and Nifaq (hypocrisy)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 26\n        },\n        \"text\" : \"And it will be said to them: \\\"Where are those (the false gods whom you used to set up as rivals with Allah) that you used to worship\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"Instead of Allah? Can they help you or (even) help themselves?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 26\n        },\n        \"text\" : \"By Allah, we were truly in a manifest error,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 26\n        },\n        \"text\" : \"When We held you (false gods) as equals (in worship) with the Lord of the 'Alamin (mankind, jinns and all that exists);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 26\n        },\n        \"text\" : \"(Alas!) If we only had a chance to return (to the world), we shall truly be among the believers!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 26\n        },\n        \"text\" : \"And verily, your Lord! He is truly the All-Mighty, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 26\n        },\n        \"text\" : \"When their brother Nuh (Noah) said to them: \\\"Will you not fear Allah and obey Him?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"So fear Allah, keep your duty to Him, and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"No reward do I ask of you for it (my Message of Islamic Monotheism), my reward is only from the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"So keep your duty to Allah, fear Him and obey me.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 26\n        },\n        \"text\" : \"They said: \\\"Shall we believe in you, when the meanest (of the people) follow you?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 122,\n          \"sura\" : 26\n        },\n        \"text\" : \"And verily! Your Lord, He is indeed the All-Mighty, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 124,\n          \"sura\" : 26\n        },\n        \"text\" : \"When their brother Hud said to them: \\\"Will you not fear Allah and obey Him?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 126,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"So fear Allah, keep your duty to Him, and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 127,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"No reward do I ask of you for it (my Message of Islamic Monotheism), my reward is only from the Lord of the 'Alamin (mankind, jinns, and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 131,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"So fear Allah, keep your duty to Him, and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 132,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"And keep your duty to Him, fear Him Who has aided you with all (good things) that you know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 140,\n          \"sura\" : 26\n        },\n        \"text\" : \"And verily! Your Lord, He is indeed the All-Mighty, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 142,\n          \"sura\" : 26\n        },\n        \"text\" : \"When their brother Salih (Saleh) said to them: \\\"Will you not fear Allah and obey Him?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 144,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"So fear Allah, keep your duty to Him, and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 145,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"No reward do I ask of you for it (my Message of Islamic Monotheism), my reward is only from the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 150,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"So fear Allah, keep your duty to Him, and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 159,\n          \"sura\" : 26\n        },\n        \"text\" : \"And verily! Your Lord, He is indeed the All-Mighty, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 161,\n          \"sura\" : 26\n        },\n        \"text\" : \"When their brother Lout (Lot) said to them: \\\"Will you not fear Allah and obey Him?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 163,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"So fear Allah, keep your duty to Him, and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 164,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"No reward do I ask of you for it (my Message of Islamic Monotheism), my reward is only from the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 166,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"And leave those whom Allah has created for you to be your wives? Nay, you are a trespassing people!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 170,\n          \"sura\" : 26\n        },\n        \"text\" : \"So We saved him and his family, all,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 175,\n          \"sura\" : 26\n        },\n        \"text\" : \"And verily! Your Lord, He is indeed the All-Mighty, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 177,\n          \"sura\" : 26\n        },\n        \"text\" : \"When Shu'aib (Shuaib) said to them: \\\"Will you not fear Allah (and obey Him)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 179,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"So fear Allah, keep your duty to Him, and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 180,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"No reward do I ask of you for it (my Message of Islamic Monotheism), my reward is only from the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 187,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"So cause a piece of the heaven to fall on us, if you are of the truthful!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 191,\n          \"sura\" : 26\n        },\n        \"text\" : \"And verily! Your Lord, He is indeed the All-Mighty, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 192,\n          \"sura\" : 26\n        },\n        \"text\" : \"And truly, this (the Quran) is a revelation from the Lord of the 'Alamin (mankind, jinns and all that exists),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 202,\n          \"sura\" : 26\n        },\n        \"text\" : \"It shall come to them of a sudden, while they perceive it not;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 207,\n          \"sura\" : 26\n        },\n        \"text\" : \"All that with which they used to enjoy shall not avail them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 213,\n          \"sura\" : 26\n        },\n        \"text\" : \"So invoke not with Allah another ilah (god) lest you be among those who receive punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 217,\n          \"sura\" : 26\n        },\n        \"text\" : \"And put your trust in the All-Mighty, the Most Merciful,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 219,\n          \"sura\" : 26\n        },\n        \"text\" : \"And your movements among those who fall prostrate (along with you to Allah in the five compulsory congregational prayers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 220,\n          \"sura\" : 26\n        },\n        \"text\" : \"Verily! He, only He, is the All-Hearer, the All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 221,\n          \"sura\" : 26\n        },\n        \"text\" : \"Shall I inform you (O people!) upon whom the Shayatin (devils) descend?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 227,\n          \"sura\" : 26\n        },\n        \"text\" : \"Except those who believe (in the Oneness of Allah Islamic Monotheism), and do righteous deeds, and remember Allah much, and reply back (in poetry) to the unjust poetry (which the pagan poets utter against the Muslims). And those who do wrong will come to know by what overturning they will be overturned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 27\n        },\n        \"text\" : \"Ta-Sin. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings]. These are the Verses of the Quran, and (it is) a Book (that makes things) clear;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 27\n        },\n        \"text\" : \"A guide (to the Right Path); and glad tidings for the believers [who believe in the Oneness of Allah (i.e. Islamic Monotheism)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 27\n        },\n        \"text\" : \"And verily, you (O Muhammad SAW) are receiving the Quran from the One, All-Wise, All-Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 27\n        },\n        \"text\" : \"But when he came to it, he was called: \\\"Blessed is whosoever is in the fire, and whosoever is round about it! And glorified be Allah, the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 27\n        },\n        \"text\" : \"\\\"O Musa (Moses)! Verily! It is I, Allah, the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 27\n        },\n        \"text\" : \"\\\"And put your hand into your bosom, it will come forth white without hurt. (These are) among the nine signs (you will take) to Fir'aun (Pharaoh) and his people, they are a people who are the Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 27\n        },\n        \"text\" : \"And they belied them (those Ayat) wrongfully and arrogantly, though their ownselves were convinced thereof [i.e. those (Ayat) are from Allah, and Musa (Moses) is the Messenger of Allah in truth, but they disliked to obey Musa (Moses), and hated to believe in his Message of Monotheism]. So see what was the end of the Mufsidun (disbelievers, disobedient to Allah, evil-doers, liars.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 27\n        },\n        \"text\" : \"And indeed We gave knowledge to Dawud (David) and Sulaiman (Solomon), and they both said: \\\"All the praises and thanks be to Allah, Who has preferred us above many of His believing slaves!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 27\n        },\n        \"text\" : \"And Sulaiman (Solomon) inherited (the knowledge of) Dawud (David). He said: \\\"O mankind! We have been taught the language of birds, and on us have been bestowed all things. This, verily, is an evident grace (from Allah).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 27\n        },\n        \"text\" : \"And there were gathered before Sulaiman (Solomon) his hosts of jinns and men, and birds, and they all were set in battle order (marching forwards).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 27\n        },\n        \"text\" : \"Till, when they came to the valley of the ants, one of the ants said: \\\"O ants! Enter your dwellings, lest Sulaiman (Solomon) and his hosts crush you, while they perceive not.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 27\n        },\n        \"text\" : \"\\\"I found a woman ruling over them, and she has been given all things that could be possessed by any ruler of the earth, and she has a great throne.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 27\n        },\n        \"text\" : \"\\\"I found her and her people worshipping the sun instead of Allah, and Shaitan (Satan) has made their deeds fair-seeming to them, and has barred them from (Allah's) Way, so they have no guidance,\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 27\n        },\n        \"text\" : \"Al-La (this word has two interpretations) (A) [As Shaitan (Satan) has barred them from Allah's Way] so that they do not worship (prostrate before) Allah, or (B) So that they may worship (prostrate before) Allah, Who brings to light what is hidden in the heavens and the earth, and knows what you conceal and what you reveal. [Tafsir At-Tabari, Vol. 19, Page 149]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 27\n        },\n        \"text\" : \"Allah, La ilaha illa Huwa (none has the right to be worshipped but He), the Lord of the Supreme Throne!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 27\n        },\n        \"text\" : \"[Sulaiman (Solomon)] said: \\\"We shall see whether you speak the truth or you are (one) of the liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 27\n        },\n        \"text\" : \"\\\"Verily! It is from Sulaiman (Solomon), and verily! It (reads): In the Name of Allah, the Most Beneficent, the Most Merciful;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 27\n        },\n        \"text\" : \"\\\"Be you not exalted against me, but come to me as Muslims (true believers who submit to Allah with full submission)' \\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 27\n        },\n        \"text\" : \"So when (the messengers with the present) came to Sulaiman (Solomon), he said: \\\"Will you help me in wealth? What Allah has given me is better than that which He has given you! Nay, you rejoice in your gift!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 27\n        },\n        \"text\" : \"[Then Sulaiman (Solomon) said to the chief of her messengers who brought the present]: \\\"Go back to them. We verily shall come to them with hosts that they cannot resist, and we shall drive them out from there in disgrace, and they will be abased.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 27\n        },\n        \"text\" : \"One with whom was knowledge of the Scripture said: \\\"I will bring it to you within the twinkling of an eye!\\\" then when [Sulaiman (Solomon)] saw it placed before him, he said: \\\"This is by the Grace of my Lord to test me whether I am grateful or ungrateful! And whoever is grateful, truly, his gratitude is for (the good of) his ownself, and whoever is ungrateful, (he is ungrateful only for the loss of his ownself). Certainly! My Lord is Rich (Free of all wants), Bountiful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 27\n        },\n        \"text\" : \"So when she came, it was said (to her): \\\"Is your throne like this?\\\" She said: \\\"(It is) as though it were the very same.\\\" And [Sulaiman (Solomon) said]: \\\"Knowledge was bestowed on us before her, and we were submitted to Allah (in Islam as Muslims before her).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 27\n        },\n        \"text\" : \"And that which she used to worship besides Allah has prevented her (from Islam), for she was of a disbelieving people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 27\n        },\n        \"text\" : \"It was said to her: \\\"Enter As-Sarh\\\" [(a glass surface with water underneath it) or a palace], but when she saw it, she thought it was a pool, and she (tucked up her clothes) uncovering her legs, Sulaiman (Solomon) said: \\\"Verily, it is Sarh [(a glass surface with water underneath it) or a palace] paved smooth with slab of glass.\\\" She said: \\\"My Lord! Verily, I have wronged myself, and I submit (in Islam, together with Sulaiman (Solomon), to Allah, the Lord of the 'Alamin (mankind, jinns and all that exists).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 27\n        },\n        \"text\" : \"And indeed We sent to Thamud their brother Salih (Saleh), saying: \\\"Worship Allah (Alone and none else). Then look! They became two parties (believers and disbelievers) quarreling with each other.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 27\n        },\n        \"text\" : \"He said: \\\"O my people! Why do you seek to hasten the evil (torment) before the good (Allah's Mercy)? Why seek you not the Forgiveness of Allah, that you may receive mercy?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 27\n        },\n        \"text\" : \"They said: \\\"We augur ill omen from you and those with you.\\\" He said: \\\"Your ill omen is with Allah; nay, but you are a people that are being tested.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 27\n        },\n        \"text\" : \"They said: \\\"Swear one to another by Allah that we shall make a secret night attack on him and his household, and afterwards we will surely say to his near relatives: 'We witnessed not the destruction of his household, and verily! We are telling the truth.'\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 27\n        },\n        \"text\" : \"Then see how was the end of their plot! Verily! We destroyed them and their nation, all together.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 27\n        },\n        \"text\" : \"And We saved those who believed, and used to fear Allah, and keep their duty to Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 27\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Praise and thanks be to Allah, and peace be on His slaves whom He has chosen (for His Message)! Is Allah better, or (all) that you ascribe as partners (to Him)?\\\" (Of course, Allah is Better).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 27\n        },\n        \"text\" : \"Is not He (better than your gods) Who created the heavens and the earth, and sends down for you water (rain) from the sky, whereby We cause to grow wonderful gardens full of beauty and delight? It is not in your ability to cause the growth of their trees. Is there any ilah (god) with Allah? Nay, but they are a people who ascribe equals (to Him)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 27\n        },\n        \"text\" : \"Is not He (better than your gods) Who has made the earth as a fixed abode, and has placed rivers in its midst, and has placed firm mountains therein, and has set a barrier between the two seas (of salt and sweet water). Is there any ilah (god) with Allah? Nay, but most of them know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 27\n        },\n        \"text\" : \"Is not He (better than your gods) Who responds to the distressed one, when he calls Him, and Who removes the evil, and makes you inheritors of the earth, generations after generations. Is there any ilah (god) with Allah? Little is that you remember!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 27\n        },\n        \"text\" : \"Is not He (better than your gods) Who guides you in the darkness of the land and the sea, and Who sends the winds as heralds of glad tidings, going before His Mercy (rain)? Is there any ilah (god) with Allah? High Exalted be Allah above all that they associate as partners (to Him)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 27\n        },\n        \"text\" : \"Is not He (better than your so-called gods) Who originates creation, and shall thereafter repeat it, and Who provides for you from heaven and earth? Is there any ilah (god) with Allah? Say, \\\"Bring forth your proofs, if you are truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 27\n        },\n        \"text\" : \"Say: \\\"None in the heavens and the earth knows the Ghaib (unseen) except Allah, nor can they perceive when they shall be resurrected.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 27\n        },\n        \"text\" : \"And those who disbelieve say: \\\"When we have become dust, we and our fathers, shall we really be brought forth (again)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 27\n        },\n        \"text\" : \"Say to them (O Muhammad SAW) \\\"Travel in the land and see how has been the end of the criminals (those who denied Allah's Messengers and disobeyed Allah).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 27\n        },\n        \"text\" : \"And they (the disbelievers in the Oneness of Allah) say: \\\"When (will) this promise (be fulfilled), if you are truthful?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 27\n        },\n        \"text\" : \"Verily, your Lord will decide between them (various sects) by His Judgement. And He is the All-Mighty, the All-Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 27\n        },\n        \"text\" : \"So put your trust in Allah; surely, you (O Muhammad SAW) are on manifest truth.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 27\n        },\n        \"text\" : \"Verily, you cannot make the dead to hear (i.e. benefit them and similarly the disbelievers), nor can you make the deaf to hear the call, when they flee, turning their backs.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 27\n        },\n        \"text\" : \"Nor can you lead the blind out of their error, you can only make to hear those who believe in Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.), and who have submitted (themselves to Allah in Islam as Muslims).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 27\n        },\n        \"text\" : \"And when the Word (of torment) is fulfilled against them, We shall bring out from the earth a beast to them, which will speak to them because mankind believed not with certainty in Our Ayat (Verses of the Quran and Prophet Muhammad SAW).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 27\n        },\n        \"text\" : \"And (remember) the Day when We shall gather out of every nation a troop of those who denied Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.), and (then) they (all) shall be gathered (and driven to the place of reckoning),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 27\n        },\n        \"text\" : \"And (remember) the Day on which the Trumpet will be blown and all who are in the heavens and all who are on the earth, will be terrified except him whom Allah will (exempt). And all shall come to Him humbled.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 27\n        },\n        \"text\" : \"And you will see the mountains and think them solid, but they shall pass away as the passing away of the clouds. The Work of Allah, Who perfected all things, verily! He is Well-Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 27\n        },\n        \"text\" : \"Whoever brings a good deed (i.e. Belief in the Oneness of Allah along with every deed of righteousness), will have better than its worth, and they will be safe from the terror on that Day.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 27\n        },\n        \"text\" : \"And whoever brings an evil (deed) (i.e. Shirk polytheism, disbelief in the Oneness of Allah and every evil sinful deed), they will be cast down (prone) on their faces in the Fire. (And it will be said to them) \\\"Are you being recompensed anything except what you used to do?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 27\n        },\n        \"text\" : \"I (Muhammad SAW) have been commanded only to worship the Lord of this city (Makkah), Him Who has sanctified it and His is everything. And I am commanded to be from among the Muslims (those who submit to Allah in Islam).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 27\n        },\n        \"text\" : \"And say [(O Muhammad SAW) to these polytheists and pagans etc.]: \\\"All the praises and thanks be to Allah. He will show you His Ayat (signs, in yourselves, and in the universe or punishments, etc.), and you shall recognise them. And your Lord is not unaware of what you do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 28\n        },\n        \"text\" : \"Ta-Sin-Mim [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 28\n        },\n        \"text\" : \"We recite to you some of the news of Musa (Moses) and Fir'aun (Pharaoh) in truth, for a people who believe (those who believe in this Quran, and in the Oneness of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 28\n        },\n        \"text\" : \"And We inspired the mother of Musa (Moses), (saying): \\\"Suckle him [Musa (Moses)], but when you fear for him, then cast him into the river and fear not, nor grieve. Verily! We shall bring him back to you, and shall make him one of (Our) Messengers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 28\n        },\n        \"text\" : \"And We had already forbidden (other) foster suckling mothers for him, until she (his sister came up and) said: \\\"Shall I direct you to a household who will rear him for you, and sincerely they will look after him in a good manner?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 28\n        },\n        \"text\" : \"So did We restore him to his mother, that she might be delighted, and that she might not grieve, and that she might know that the Promise of Allah is true. But most of them know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 28\n        },\n        \"text\" : \"He said: \\\"My Lord! For that with which You have favoured me, I will never more be a helper for the Mujrimun (criminals, disobedient to Allah, polytheists, sinners, etc.)!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 28\n        },\n        \"text\" : \"So he became afraid, looking about in the city (waiting as to what will be the result of his crime of killing), when behold, the man who had sought his help the day before, called for his help (again). Musa (Moses) said to him: \\\"Verily, you are a plain misleader!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 28\n        },\n        \"text\" : \"Then there came to him one of the two women, walking shyly. She said: \\\"Verily, my father calls you that he may reward you for having watered (our flocks) for us.\\\" So when he came to him and narrated the story, he said: \\\"Fear you not. You have escaped from the people who are Zalimun (polytheists, disbelievers, and wrong-doers).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 28\n        },\n        \"text\" : \"He said: \\\"I intend to wed one of these two daughters of mine to you, on condition that you serve me for eight years, but if you complete ten years, it will be (a favour) from you. But I intend not to place you under a difficulty. If Allah will, you will find me one of the righteous.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 28\n        },\n        \"text\" : \"He [Musa (Moses)] said: \\\"That (is settled) between me and you whichever of the two terms I fulfill, there will be no injustice to me, and Allah is Surety over what we say.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 28\n        },\n        \"text\" : \"So when he reached it (the fire), he was called from the right side of the valley, in the blessed place from the tree: \\\"O Musa (Moses)! Verily! I am Allah, the Lord of the 'Alamin (mankind, jinns and all that exists)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 28\n        },\n        \"text\" : \"\\\"Put your hand in your bosom, it will come forth white without a disease, and draw your hand close to your side to be free from fear (that which you suffered from the snake, and also by that your hand will return to its original state). these are two Burhan (signs, miracles, evidences, proofs) from your Lord to Fir'aun (Pharaoh) and his chiefs. Verily, they are the people who are Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 28\n        },\n        \"text\" : \"Allah said: \\\"We will strengthen your arm through your brother, and give you both power, so they shall not be able to harm you, with Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.), you two as well as those who follow you will be the victors.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 28\n        },\n        \"text\" : \"Musa (Moses) said: \\\"My Lord knows best him who came with guidance from Him, and whose will be the happy end in the Hereafter. Verily, the Zalimun (wrong-doers, polytheists and disbelievers in the Oneness of Allah) will not be successful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 28\n        },\n        \"text\" : \"So We seized him and his hosts, and We threw them all into the sea (and drowned them). So behold (O Muhammad SAW) what was the end of the Zalimun [wrong-doers, polytheists and those who disbelieved in the Oneness of their Lord (Allah), or rejected the advice of His Messenger Musa (Moses)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 28\n        },\n        \"text\" : \"And We made a curse to follow them in this world, and on the Day of Resurrection, they will be among Al-Maqbuhun (those who are prevented to receive Allah's Mercy or any good, despised or destroyed, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 28\n        },\n        \"text\" : \"And you (O Muhammad SAW) were not at the side of the Tur (Mount) when We did call, [it is said that Allah called the followers of Muhammad SAW, and they answered His Call, or that Allah called Musa (Moses)]. But (you are sent) as a mercy from your Lord, to give warning to a people to whom no warner had come before you, in order that they may remember or receive admonition. [Tafsir At-Tabari, Vol. 20, Page 81].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 28\n        },\n        \"text\" : \"Say (to them, O Muhammad SAW): \\\"Then bring a Book from Allah, which is a better guide than these two [the Taurat (Torah) and the Quran], that I may follow it, if you are truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 28\n        },\n        \"text\" : \"But if they answer you not (i.e. do not believe in your doctrine of Islamic Monotheism, nor follow you), then know that they only follow their own lusts. And who is more astray than one who follows his own lusts, without guidance from Allah? Verily! Allah guides not the people who are Zalimun (wrong-doers, disobedient to Allah, and polytheists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 28\n        },\n        \"text\" : \"And when it is recited to them, they say: \\\"We believe in it. Verily, it is the truth from our Lord. Indeed even before it we have been from those who submit themselves to Allah in Islam as Muslims (like 'Abdullah bin Salam and Salman Al-Farisi, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 28\n        },\n        \"text\" : \"Verily! You (O Muhammad SAW) guide not whom you like, but Allah guides whom He wills. And He knows best those who are the guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 28\n        },\n        \"text\" : \"And they say: \\\"If we follow the guidance with you, we would be snatched away from our land.\\\" Have We not established for them a secure sanctuary (Makkah), to which are brought fruits of all kinds, a provision from Ourselves, but most of them know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 28\n        },\n        \"text\" : \"And how many a town (population) have We destroyed, which were thankless for its means of livelihood (disobeyed Allah, and His Messengers, by doing evil deeds and crimes)! And those are their dwellings, which have not been inhabited after them except a little. And verily! We have been the inheritors.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 28\n        },\n        \"text\" : \"And never will your Lord destroy the towns (populations) until He sends to their mother town a Messenger reciting to them Our Verses. And never would We destroy the towns unless the people thereof are Zalimun (polytheists, wrong-doers, disbelievers in the Oneness of Allah, oppressors and tyrants).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 28\n        },\n        \"text\" : \"And whatever you have been given is an enjoyment of the life of (this) world and its adornment, and that (Hereafter) which is with Allah is better and will remain forever. Have you then no sense?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 28\n        },\n        \"text\" : \"And (remember) the Day when He will call to them, and say: \\\"Where are My (so-called) partners whom you used to assert?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 28\n        },\n        \"text\" : \"And it will be said (to them): \\\"Call upon your (so-called) partners (of Allah), and they will call upon them, but they will give no answer to them, and they will see the torment. (They will then wish) if only they had been guided!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 28\n        },\n        \"text\" : \"And (remember) the Day (Allah) will call to them, and say: \\\"What answer gave you to the Messengers?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 28\n        },\n        \"text\" : \"But as for him who repented (from polytheism and sins, etc.), believed (in the Oneness of Allah, and in His Messenger Muhammad SAW), and did righteous deeds (in the life of this world), then he will be among those who are successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 28\n        },\n        \"text\" : \"And your Lord creates whatsoever He wills and chooses, no choice have they (in any matter). Glorified be Allah, and exalted above all that they associate as partners (with Him).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 28\n        },\n        \"text\" : \"And He is Allah; La ilaha illa Huwa (none has the right to be worshipped but He). His is all praise, in the first (i.e. in this world) and in the last (i.e. in the Hereafter). And for Him is the Decision, and to Him shall you (all) be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 28\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Tell me! If Allah made night continuous for you till the Day of Resurrection, who is an ilah (a god) besides Allah who could bring you light? Will you not then hear?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 28\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Tell me! If Allah made day continuous for you till the Day of Resurrection, who is an ilah (a god) besides Allah who could bring you night wherein you rest? Will you not then see?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 28\n        },\n        \"text\" : \"And (remember) the Day when He (your Lord Allah) will call them (those who worshipped others along with Allah), and will say: \\\"Where are My (so-called) partners, whom you used to assert?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 28\n        },\n        \"text\" : \"And We shall take out from every nation a witness, and We shall say: \\\"Bring your proof.\\\" Then they shall know that the truth is with Allah (Alone), and the lies (false gods) which they invented will disappear from them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 28\n        },\n        \"text\" : \"Verily, Qarun (Korah) was of Musa's (Moses) people, but he behaved arrogantly towards them. And We gave him of the treasures, that of which the keys would have been a burden to a body of strong men. When his people said to him: \\\"Do not be glad (with ungratefulness to Allah's Favours). Verily! Allah likes not those who are glad (with ungratefulness to Allah's Favours).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 28\n        },\n        \"text\" : \"But seek, with that (wealth) which Allah has bestowed on you, the home of the Hereafter, and forget not your portion of legal enjoyment in this world, and do good as Allah has been good to you, and seek not mischief in the land. Verily, Allah likes not the Mufsidun (those who commit great crimes and sins, oppressors, tyrants, mischief-makers, corrupts).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 28\n        },\n        \"text\" : \"He said: \\\"This has been given to me only because of knowledge I possess.\\\" Did he not know that Allah had destroyed before him generations, men who were stronger than him in might and greater in the amount (of riches) they had collected. But the Mujrimun (criminals, disbelievers, polytheists, sinners, etc.) will not be questioned of their sins (because Allah knows them well, so they will be punished without account).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 28\n        },\n        \"text\" : \"But those who had been given (religious) knowledge said: \\\"Woe to you! The Reward of Allah (in the Hereafter) is better for those who believe and do righteous good deeds, and this none shall attain except those who are patient (in following the truth).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 28\n        },\n        \"text\" : \"So We caused the earth to swallow him and his dwelling place. Then he had no group or party to help him against Allah, nor was he one of those who could save themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 28\n        },\n        \"text\" : \"And those who had desired (for a position like) his position the day before, began to say: \\\"Know you not that it is Allah Who enlarges the provision or restricts it to whomsoever He pleases of His slaves. Had it not been that Allah was Gracious to us, He could have caused the earth to swallow us up (also)! Know you not that the disbelievers will never be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 28\n        },\n        \"text\" : \"That home of the Hereafter (i.e. Paradise), We shall assign to those who rebel not against the truth with pride and oppression in the land nor do mischief by committing crimes. And the good end is for the Muttaqun (pious - see V. 2:2).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 28\n        },\n        \"text\" : \"Whosoever brings good (Islamic Monotheism along with righteous deeds), he shall have the better thereof, and whosoever brings evil (polytheism along with evil deeds) then, those who do evil deeds will only be requited for what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 28\n        },\n        \"text\" : \"And let them not turn you (O Muhammad SAW) away from (preaching) the Ayat (revelations and verses) of Allah after they have been sent down to you, and invite (men) to (believe in) your Lord [i.e. in the Oneness (Tauhid) of Allah (1) Oneness of the Lordship of Allah; (2) Oneness of the worship of Allah; (3) Oneness of the Names and Qualities of Allah], and be not of Al-Mushrikun (those who associate partners with Allah, e.g. polytheists, pagans, idolaters, those who disbelieve in the Oneness of Allah and deny the Prophethood of Messenger Muhammad SAW).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 28\n        },\n        \"text\" : \"And invoke not any other ilah (god) along with Allah, La ilaha illa Huwa (none has the right to be worshipped but He). Everything will perish save His Face. His is the Decision, and to Him you (all) shall be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 29\n        },\n        \"text\" : \"Alif-Lam-Mim. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings.]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 29\n        },\n        \"text\" : \"And We indeed tested those who were before them. And Allah will certainly make (it) known (the truth of) those who are true, and will certainly make (it) known (the falsehood of) those who are liars, (although Allah knows all that before putting them to test).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 29\n        },\n        \"text\" : \"Whoever hopes for the Meeting with Allah, then Allah's Term is surely coming. and He is the All-Hearer, the All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 29\n        },\n        \"text\" : \"And whosoever strives, he strives only for himself. Verily, Allah is free of all wants from the 'Alamin (mankind, jinns, and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 29\n        },\n        \"text\" : \"Those who believe [in the Oneness of Allah (Monotheism) and in Messenger Muhammad SAW, and do not apostate because of the harm they receive from the polytheists], and do righteous good deeds, surely, We shall remit from them their evil deeds and shall reward them according to the best of that which they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 29\n        },\n        \"text\" : \"And We have enjoined on man to be good and dutiful to his parents, but if they strive to make you join with Me (in worship) anything (as a partner) of which you have no knowledge, then obey them not. Unto Me is your return, and I shall tell you what you used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 29\n        },\n        \"text\" : \"And for those who believe (in the Oneness of Allah and other items of Faith) and do righteous good deeds, surely, We shall make them enter in (the enterance of) the righteous (i.e. in Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 29\n        },\n        \"text\" : \"Of mankind are some who say: \\\"We believe in Allah,\\\" but if they are made to suffer for the sake of Allah, they consider the trial of mankind as Allah's punishment, and if victory comes from your Lord, (the hypocrites) will say: \\\"Verily! We were with you (helping you).\\\" Is not Allah Best Aware of what is in the breast of the 'Alamin (mankind and jinns).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 29\n        },\n        \"text\" : \"Verily, Allah knows those who believe, and verily, He knows the hypocrites [i.e. Allah will test the people with good and hard days to discriminate the good from the wicked (although Allah knows all that before putting them to test)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 29\n        },\n        \"text\" : \"And verily, they shall bear their own loads, and other loads besides their own, and verily, they shall be questioned on the Day of Resurrection about that which they used to fabricate.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 29\n        },\n        \"text\" : \"And indeed We sent Nuh (Noah) to his people, and he stayed among them a thousand years less fifty years [inviting them to believe in the Oneness of Allah (Monotheism), and discard the false gods and other deities], and the Deluge overtook them while they were Zalimun (wrong-doers, polytheists, disbelievers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 29\n        },\n        \"text\" : \"Then We saved him and those with him in the ship, and made it (the ship) as an Ayah (a lesson, a warning, etc.) for the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 29\n        },\n        \"text\" : \"And (remember) Ibrahim (Abraham) when he said to his people: \\\"Worship Allah (Alone), and fear Him, that is better for you if you did but know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 29\n        },\n        \"text\" : \"\\\"You worship besides Allah only idols, and you only invent falsehood. Verily, those whom you worship besides Allah have no power to give you provision, so seek your provision from Allah (Alone), and worship Him (Alone), and be grateful to Him. To Him (Alone) you will be brought back.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 29\n        },\n        \"text\" : \"See they not how Allah originates creation, then repeats it. Verily, that is easy for Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 29\n        },\n        \"text\" : \"Say: \\\"Travel in the land and see how (Allah) originated creation, and then Allah will bring forth (resurrect) the creation of the Hereafter (i.e. resurrection after death). Verily, Allah is Able to do all things.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 29\n        },\n        \"text\" : \"And you cannot escape in the earth or in the heaven. And besides Allah you have neither any Wali (Protector or Guardian) nor any Helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 29\n        },\n        \"text\" : \"And those who disbelieve in the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah and the Meeting with Him, it is they who have no hope of My Mercy, and it is they who will (have) a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 29\n        },\n        \"text\" : \"So nothing was the answer of [Ibrahim's (Abraham)] people except that they said: \\\"Kill him or burn him.\\\" Then Allah saved him from the fire. Verily, in this are indeed signs for a people who believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 29\n        },\n        \"text\" : \"And [Ibrahim (Abraham)] said: \\\"You have taken (for worship) idols instead of Allah, and the love between you is only in the life of this world, but on the Day of Resurrection, you shall disown each other, and curse each other, and your abode will be the Fire, and you shall have no helper.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 29\n        },\n        \"text\" : \"So Lout (Lot) believed in him [Ibrahim's (Abraham) Message of Islamic Monotheism]. He [Ibrahim (Abraham)] said: \\\"I will emigrate for the sake of my Lord. Verily, He is the All-Mighty, the All-Wise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 29\n        },\n        \"text\" : \"And We bestowed on him [Ibrahim (Abraham)], Ishaque (Isaac) and Ya'qub (Jacob), and ordained among his offspring Prophethood and the Book [i.e. the Taurat (Torah) (to Musa - Moses), the Injeel (Gospel) (to 'Iesa - Jesus), the Quran (to Muhammad SAW), all from the offspring of Ibrahim (Abraham)], and We granted him his reward in this world, and verily, in the Hereafter he is indeed among the righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 29\n        },\n        \"text\" : \"\\\"Verily, you do sodomy with men, and rob the wayfarer (travellers, etc.)! And practise Al-Munkar (disbelief and polytheism and every kind of evil wicked deed) in your meetings.\\\" But his people gave no answer except, that they said: \\\"Bring Allah's Torment upon us if you are one of the truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 29\n        },\n        \"text\" : \"And when Our Messengers came to Ibrahim (Abraham) with the glad tidings they said: \\\"Verily, we are going to destroy the people of this [Lout's (Lot's)] town (i.e. the town of Sodom in Palestine) truly, its people have been Zalimun [wrong-doers, polytheists and disobedient to Allah, and have also belied their Messenger Lout (Lot)].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 29\n        },\n        \"text\" : \"And when Our Messengers came to Lout (Lot), he was grieved because of them, and felt straitened on their account. They said: \\\"Have no fear, and do not grieve! Truly, we shall save you and your family, except your wife, she will be of those who remain behind (i.e. she will be destroyed along with those who will be destroyed from her folk).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 29\n        },\n        \"text\" : \"Verily, we are about to bring down on the people of this town a great torment from the sky, because they have been rebellious (against Allah's Command).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 29\n        },\n        \"text\" : \"And to (the people of) Madyan (Midian), We sent their brother Shu'aib (Shuaib). He said: \\\"O my people! Worship Allah, and hope for (the reward of good deeds by worshipping Allah Alone, on) the last Day, and commit no mischief on the earth as Mufsidun (those who commit great crimes, oppressors, tyrants, mischief-makers, corrupts).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 29\n        },\n        \"text\" : \"So We punished each (of them) for his sins, of them were some on whom We sent Hasiban (a violent wind with shower of stones) [as the people of Lout (Lot)], and of them were some who were overtaken by As-Saihah [torment - awful cry, etc. (as Thamud or Shu'aib's people)], and of them were some whom We caused the earth to swallow [as Qarun (Korah)], and of them were some whom We drowned [as the people of Nuh (Noah), or Fir'aun (Pharaoh) and his people]. It was not Allah Who wronged them, but they wronged themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 29\n        },\n        \"text\" : \"The likeness of those who take Auliya' (protectors and helpers) other than Allah is as the likeness of a spider, who builds (for itself) a house, but verily, the frailest (weakest) of houses is the spider's house; if they but knew.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 29\n        },\n        \"text\" : \"Verily, Allah knows what things they invoke instead of Him. He is the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 29\n        },\n        \"text\" : \"And these similitudes We put forward for mankind, but none will understand them except those who have knowledge (of Allah and His Signs, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 29\n        },\n        \"text\" : \"(Allah says to His Prophet Muhammad SAW): \\\"Allah (Alone) created the heavens and the earth with truth (and none shared Him in their creation).\\\" Verily! Therein is surely a sign for those who believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 29\n        },\n        \"text\" : \"Recite (O Muhammad SAW) what has been revealed to you of the Book (the Quran), and perform As-Salat (Iqamat-as-Salat). Verily, As-Salat (the prayer) prevents from Al-Fahsha' (i.e. great sins of every kind, unlawful sexual intercourse, etc.) and Al-Munkar (i.e. disbelief, polytheism, and every kind of evil wicked deed, etc.) and the remembering (praising, etc.) of (you by) Allah (in front of the angels) is greater indeed [than your remembering (praising, etc.) Allah in prayers, etc.]. And Allah knows what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 29\n        },\n        \"text\" : \"And argue not with the people of the Scripture (Jews and Christians), unless it be in (a way) that is better (with good words and in good manner, inviting them to Islamic Monotheism with His Verses), except with such of them as do wrong, and say (to them): \\\"We believe in that which has been revealed to us and revealed to you; our Ilah (God) and your Ilah (God) is One (i.e. Allah), and to Him we have submitted (as Muslims).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 29\n        },\n        \"text\" : \"And they say: \\\"Why are not signs sent down to him from his Lord? Say: \\\"The signs are only with Allah, and I am only a plain warner.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 29\n        },\n        \"text\" : \"Say (to them O Muhammad SAW): \\\"Sufficient is Allah for a witness between me and you. He knows what is in the heavens and on earth.\\\" And those who believe in Batil (all false deities other than Allah), and disbelieve in Allah and (in His Oneness), it is they who are the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 29\n        },\n        \"text\" : \"On the Day when the torment (Hell-fire) shall cover them from above them and from underneath their feet, and it will be said: \\\"Taste what you used to do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 29\n        },\n        \"text\" : \"Everyone shall taste the death. Then unto Us you shall be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 29\n        },\n        \"text\" : \"And those who believe (in the Oneness of Allah Islamic Monotheism) and do righteous good deeds, to them We shall surely give lofty dwellings in Paradise, underneath which rivers flow, to live therein forever. Excellent is the reward of the workers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 29\n        },\n        \"text\" : \"Those who are patient, and put their trust (only) in their Lord (Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 29\n        },\n        \"text\" : \"And so many a moving (living) creature there is, that carries not its own provision! Allah provides for it and for you. And He is the All-Hearer, the All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 29\n        },\n        \"text\" : \"If you were to ask them: \\\"Who has created the heavens and the earth and subjected the sun and the moon?\\\" They will surely reply: \\\"Allah.\\\" How then are they deviating (as polytheists and disbelievers)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 29\n        },\n        \"text\" : \"Allah enlarges the provision for whom He wills of His slaves, and straitens it for whom (He wills). Verily, Allah is the All-Knower of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 29\n        },\n        \"text\" : \"If you were to ask them: \\\"Who sends down water (rain) from the sky, and gives life therewith to the earth after its death?\\\" They will surely reply: \\\"Allah.\\\" Say: \\\"All the praises and thanks be to Allah!\\\" Nay! Most of them have no sense.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 29\n        },\n        \"text\" : \"And when they embark on a ship, they invoke Allah, making their Faith pure for Him only, but when He brings them safely to land, behold, they give a share of their worship to others.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 29\n        },\n        \"text\" : \"Have they not seen that We have made (Makkah) a sanctuary secure, and that men are being snatched away from all around them? Then do they believe in Batil (falsehood - polytheism, idols and all deities other than Allah), and deny (become ingrate for) the Graces of Allah?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 29\n        },\n        \"text\" : \"And who does more wrong than he who invents a lie against Allah or denies the truth (Muhammad SAW and his doctrine of Islamic Monotheism and this Quran), when it comes to him? Is there not a dwelling in Hell for disbelievers (in the Oneness of Allah and in His Messenger Muhammad SAW)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 29\n        },\n        \"text\" : \"As for those who strive hard in Us (Our Cause), We will surely guide them to Our Paths (i.e. Allah's Religion - Islamic Monotheism). And verily, Allah is with the Muhsinun (good doers).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 30\n        },\n        \"text\" : \"Alif-Lam-Mim. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 30\n        },\n        \"text\" : \"Within three to nine years. The decision of the matter, before and after (these events) is only with Allah, (before the defeat of Romans by the Persians, and after, i.e. the defeat of the Persians by the Romans). And on that Day, the believers (i.e. Muslims) will rejoice (at the victory given by Allah to the Romans against the Persians),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 30\n        },\n        \"text\" : \"With the help of Allah, He helps whom He wills, and He is the All-Mighty, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 30\n        },\n        \"text\" : \"(It is) a Promise of Allah (i.e. Allah will give victory to the Romans against the Persians), and Allah fails not in His Promise, but most of men know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 30\n        },\n        \"text\" : \"Do they not think deeply (in their ownselves) about themselves (how Allah created them from nothing, and similarly He will resurrect them)? Allah has created not the heavens and the earth, and all that is between them, except with truth and for an appointed term. And indeed many of mankind deny the Meeting with their Lord. [See Tafsir At-Tabari, Part 21, Page 24].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 30\n        },\n        \"text\" : \"Do they not travel in the land, and see what was the end of those before them? They were superior to them in strength, and they tilled the earth and populated it in greater numbers than these (pagans) have done, and there came to them their Messengers with clear proofs. Surely, Allah wronged them not, but they used to wrong themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 30\n        },\n        \"text\" : \"Then evil was the end of those who did evil, because they belied the Ayat (proofs, evidences, verses, lessons, signs, revelations, Messengers, etc.) of Allah and made mock of them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 30\n        },\n        \"text\" : \"Allah (Alone) originates the creation, then He will repeat it, then to Him you will be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 30\n        },\n        \"text\" : \"No intercessor will they have from those whom they made equal with Allah (partners i.e. their so-called associate gods), and they will (themselves) reject and deny their partners.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 30\n        },\n        \"text\" : \"And on the Day when the Hour will be established, that Day shall (all men) be separated (i.e. the believers will be separated from the disbelievers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 30\n        },\n        \"text\" : \"Then as for those who believed (in the Oneness of Allah Islamic Monotheism) and did righteous good deeds, such shall be honoured and made to enjoy luxurious life (forever) in a Garden of delight (Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 30\n        },\n        \"text\" : \"And as for those who disbelieved and belied Our Ayat (proofs, evidences, verses, lessons, signs, revelations, Allah's Messengers, Resurrection, etc.), and the Meeting of the Hereafter, such shall be brought forth to the torment (in the Hell-fire).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 30\n        },\n        \"text\" : \"So glorify Allah [above all that (evil) they associate with Him (O believers)], when you come up to the evening [i.e. offer the (Maghrib) sunset and ('Isha') night prayers], and when you enter the morning [i.e. offer the (Fajr) morning prayer].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 30\n        },\n        \"text\" : \"And His is all the praises and thanks in the heavens and the earth, and (glorify Him) in the afternoon (i.e. offer 'Asr prayer) and when you come up to the time, when the day begins to decline (i.e. offer Zuhr prayer). (Ibn 'Abbas said: \\\"These are the five compulsory congregational prayers mentioned in the Quran).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 30\n        },\n        \"text\" : \"He brings out the living from the dead, and brings out the dead from the living. And He revives the earth after its death. And thus shall you be brought out (resurrected).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 30\n        },\n        \"text\" : \"And among His Signs is that the heaven and the earth stand by His Command, then afterwards when He will call you by single call, behold, you will come out from the earth (i.e. from your graves for reckoning and recompense).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 30\n        },\n        \"text\" : \"To Him belongs whatever is in the heavens and the earth. All are obedient to Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 30\n        },\n        \"text\" : \"And He it is Who originates the creation, then will repeat it (after it has been perished), and this is easier for Him. His is the highest description (i.e. none has the right to be worshipped but He, and there is nothing comparable unto Him) in the heavens and in the earth. And He is the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 30\n        },\n        \"text\" : \"Nay, but those who do wrong follow their own lusts without knowledge, Then who will guide him whom Allah has sent astray? And for such there will be no helpers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 30\n        },\n        \"text\" : \"So set you (O Muhammad SAW) your face towards the religion of pure Islamic Monotheism Hanifa (worship none but Allah Alone) Allah's Fitrah (i.e. Allah's Islamic Monotheism), with which He has created mankind. No change let there be in Khalq-illah (i.e. the Religion of Allah Islamic Monotheism), that is the straight religion, but most of men know not. [Tafsir At-Tabari, Vol 21, Page 41]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 30\n        },\n        \"text\" : \"(Always) Turning in repentance to Him (only), and be afraid and dutiful to Him; and perform As-Salat (Iqamat-as-Salat) and be not of Al-Mushrikun (the disbelievers in the Oneness of Allah, polytheists, idolaters, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 30\n        },\n        \"text\" : \"And when harm touches men, they cry sincerely only to their Lord (Allah), turning to Him in repentance, but when He gives them a taste of His Mercy, behold! a party of them associate partners in worship with their Lord.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 30\n        },\n        \"text\" : \"Do they not see that Allah enlarges the provision for whom He wills and straitens (it for whom He wills). Verily, in that are indeed signs for a people who believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 30\n        },\n        \"text\" : \"So give to the kindred his due, and to Al-Miskin (the poor) and to the wayfarer. That is best for those who seek Allah's Countenance, and it is they who will be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 30\n        },\n        \"text\" : \"And that which you give in gift (to others), in order that it may increase (your wealth by expecting to get a better one in return) from other people's property, has no increase with Allah, but that which you give in Zakat seeking Allah's Countenance then those, they shall have manifold increase.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 30\n        },\n        \"text\" : \"Allah is He Who created you, then provided food for you, then will cause you to die, then (again) He will give you life (on the Day of Resurrection). Is there any of your (so-called) partners (of Allah) that do anything of that? Glory be to Him! And Exalted be He above all that (evil) they associate (with Him).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 30\n        },\n        \"text\" : \"Evil (sins and disobedience of Allah, etc.) has appeared on land and sea because of what the hands of men have earned (by oppression and evil deeds, etc.), that Allah may make them taste a part of that which they have done, in order that they may return (by repenting to Allah, and begging His Pardon).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 30\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Travel in the land and see what was the end of those before (you)! Most of them were Mushrikun (the disbelievers in the Oneness of Allah, polytheists, idolaters, etc.).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 30\n        },\n        \"text\" : \"So set you (O Muhammad SAW) your face to (the obedience of Allah, your Lord) the straight and right religion (Islamic Monotheism), before there comes from Allah a Day which none can avert it. On that Day men shall be divided [(in two groups), a group in Paradise and a group in Hell].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 30\n        },\n        \"text\" : \"Whosoever disbelieves will suffer from his disbelief, and whosoever does righteous good deeds (by practising Islamic Monotheism), then such will prepare a good place (in Paradise) for themselves (and will be saved by Allah from His Torment).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 30\n        },\n        \"text\" : \"That He may reward those who believe (in the Oneness of Allah Islamic Monotheism), and do righteous good deeds, out of His Bounty. Verily, He likes not the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 30\n        },\n        \"text\" : \"And indeed We did send Messengers before you (O Muhammad SAW) to their own peoples. They came to them with clear proofs, then, We took vengeance on those who committed crimes (disbelief, setting partners in worship with Allah, sins, etc.), and (as for) the believers it was incumbent upon Us to help (them).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 30\n        },\n        \"text\" : \"Allah is He Who sends the winds, so they raise clouds, and spread them along the sky as He wills, and then break them into fragments, until you see rain drops come forth from their midst! Then when He has made them fall on whom of His slaves as He will, lo! they rejoice!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 30\n        },\n        \"text\" : \"Look then at the effects (results) of Allah's Mercy, how He revives the earth after its death. Verily! That (Allah) Who revived the earth after its death shall indeed raise the dead (on the Day of Resurrection), and He is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 30\n        },\n        \"text\" : \"And if We send a wind [which would spoil the green growth (tilth) brought up by the previous rain], and they see (their tilth) turn yellow, behold, they then after their being glad, would become unthankful (to their Lord Allah as) disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 30\n        },\n        \"text\" : \"So verily, you (O Muhammad SAW) cannot make the dead to hear (i.e. the disbelievers, etc.), nor can you make the deaf to hear the call, when they show their backs, turning away.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 30\n        },\n        \"text\" : \"And you (O Muhammad SAW) cannot guide the blind from their straying; you can make to hear only those who believe in Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.), and have submitted to Allah in Islam (as Muslims).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 30\n        },\n        \"text\" : \"Allah is He Who created you in (a state of) weakness, then gave you strength after weakness, then after strength gave (you) weakness and grey hair. He creates what He wills. And it is He Who is the All-Knowing, the All-Powerful (i.e. Able to do all things).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 30\n        },\n        \"text\" : \"And those who have been bestowed with knowledge and faith will say: \\\"Indeed you have stayed according to the Decree of Allah, until the Day of Resurrection, so this is the Day of Resurrection, but you knew not.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 30\n        },\n        \"text\" : \"So on that Day no excuse of theirs will avail those who did wrong (by associating partners in worship with Allah, and by denying the Day of Resurrection), nor will they be allowed (then) to return to seek Allah's Pleasure (by having Islamic Faith with righteous deeds and by giving up polytheism, sins and crimes with repentance).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 30\n        },\n        \"text\" : \"Thus does Allah seal up the hearts of those who know not [the proofs and evidence of the Oneness of Allah i.e. those who try not to understand true facts that which you (Muhammad SAW) have brought to them].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 30\n        },\n        \"text\" : \"So be patient (O Muhammad SAW). Verily, the Promise of Allah is true, and let not those who have no certainty of faith, discourage you from conveying Allah's Message (which you are obliged to convey)\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 31\n        },\n        \"text\" : \"Alif-Lam-Mim. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings.]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 31\n        },\n        \"text\" : \"And of mankind is he who purchases idle talks (i.e. music, singing, etc.) to mislead (men) from the Path of Allah without knowledge, and takes it (the Path of Allah, the Verses of the Quran) by way of mockery. For such there will be a humiliating torment (in the Hell-fire).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 31\n        },\n        \"text\" : \"To abide therein. It is a Promise of Allah in truth. And He is the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 31\n        },\n        \"text\" : \"He has created the heavens without any pillars, that you see and has set on the earth firm mountains, lest it should shake with you. And He has scattered therein moving (living) creatures of all kinds. And We send down water (rain) from the sky, and We cause (plants) of every goodly kind to grow therein.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 31\n        },\n        \"text\" : \"This is the creation of Allah. So show Me that which those (whom you worship), besides Him have created. Nay, the Zalimun (polytheists, wrong-doers and those who do not believe in the Oneness of Allah) are in plain error.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 31\n        },\n        \"text\" : \"And indeed We bestowed upon Luqman Al-Hikmah (wisdom and religious understanding, etc.) saying: \\\"Give thanks to Allah,\\\" and whoever gives thanks, he gives thanks for (the good of) his ownself. And whoever is unthankful, then verily, Allah is All-Rich (Free of all wants), Worthy of all praise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 31\n        },\n        \"text\" : \"And (remember) when Luqman said to his son when he was advising him: \\\"O my son! Join not in worship others with Allah. Verily! Joining others in worship with Allah is a great Zulm (wrong) indeed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 31\n        },\n        \"text\" : \"But if they (both) strive with you to make you join in worship with Me others that of which you have no knowledge, then obey them not, but behave with them in the world kindly, and follow the path of him who turns to Me in repentance and in obedience. Then to Me will be your return, and I shall tell you what you used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 31\n        },\n        \"text\" : \"\\\"O my son! If it be (anything) equal to the weight of a grain of mustard seed, and though it be in a rock, or in the heavens or in the earth, Allah will bring it forth. Verily, Allah is Subtle (in bringing out that grain), Well-Aware (of its place).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 31\n        },\n        \"text\" : \"\\\"O my son! Aqim-is-Salat (perform As-Salat), enjoin (people) for Al-Ma'ruf (Islamic Monotheism and all that is good), and forbid (people) from Al-Munkar (i.e. disbelief in the Oneness of Allah, polytheism of all kinds and all that is evil and bad), and bear with patience whatever befall you. Verily! These are some of the important commandments ordered by Allah with no exemption.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 31\n        },\n        \"text\" : \"\\\"And turn not your face away from men with pride, nor walk in insolence through the earth. Verily, Allah likes not each arrogant boaster.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 31\n        },\n        \"text\" : \"\\\"And be moderate (or show no insolence) in your walking, and lower your voice. Verily, the harshest of all voices is the voice (braying) of the ass.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 31\n        },\n        \"text\" : \"See you not (O men) that Allah has subjected for you whatsoever is in the heavens and whatsoever is in the earth, and has completed and perfected His Graces upon you, (both) apparent (i.e. Islamic Monotheism, and the lawful pleasures of this world, including health, good looks, etc.) and hidden [i.e. One's Faith in Allah (of Islamic Monotheism) knowledge, wisdom, guidance for doing righteous deeds, and also the pleasures and delights of the Hereafter in Paradise, etc.]? Yet of mankind is he who disputes about Allah without knowledge or guidance or a Book giving light!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 31\n        },\n        \"text\" : \"And when it is said to them: \\\"Follow that which Allah has sent down\\\", they say: \\\"Nay, we shall follow that which we found our fathers (following).\\\" (Would they do so) even if Shaitan (Satan) invites them to the torment of the Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 31\n        },\n        \"text\" : \"And whosoever submits his face (himself) to Allah [i.e. (follows Allah's Religion of Islamic Monotheism), worships Allah (Alone) with sincere Faith in the (1) Oneness of His Lordship, (2) Oneness of His worship, and (3) Oneness of His Names and Qualities], while he is a Muhsin (good-doer i.e. performs good deeds totally for Allah's sake without any show-off or to gain praise or fame etc. and does them in accordance with the Sunnah of Allah's Messenger Muhammad SAW), then he has grasped the most trustworthy hand-hold [La ilaha ill-Allah (none has the right to be worshipped but Allah)]. And to Allah return all matters for decision.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 31\n        },\n        \"text\" : \"And whoever disbelieved, let not his disbelief grieve you (O Muhammad SAW),. to Us is their return, and We shall inform them what they have done. Verily, Allah is the All-Knower of what is in the breasts (of men).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 31\n        },\n        \"text\" : \"We let them enjoy for a little while, then in the end We shall oblige them to (enter) a great torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 31\n        },\n        \"text\" : \"And if you (O Muhammad SAW) ask them: \\\"Who has created the heavens and the earth,\\\" they will certainly say: \\\"Allah.\\\" Say: \\\"All the praises and thanks be to Allah!\\\" But most of them know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 31\n        },\n        \"text\" : \"To Allah belongs whatsoever is in the heavens and the earth. Verily, Allah, He is Al-Ghani (Rich, Free of all wants), Worthy of all praise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 31\n        },\n        \"text\" : \"And if all the trees on the earth were pens and the sea (were ink wherewith to write), with seven seas behind it to add to its (supply), yet the Words of Allah would not be exhausted. Verily, Allah is All-Mighty, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 31\n        },\n        \"text\" : \"The creation of you all and the resurrection of you all are only as (the creation and resurrection of) a single person. Verily, Allah is All-Hearer, All-Seer.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 31\n        },\n        \"text\" : \"See you not (O Muhammad SAW) that Allah merges the night into the day (i.e. the decrease in the hours of the night are added in the hours of the day), and merges the day into the night (i.e. the decrease in the hours of day are added in the hours of night), and has subjected the sun and the moon, each running its course for a term appointed; and that Allah is All-Aware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 31\n        },\n        \"text\" : \"That is because Allah, He is the Truth, and that which they invoke besides Him is Al-Batil (falsehood, Satan and all other false deities), and that Allah, He is the Most High, the Most Great.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 31\n        },\n        \"text\" : \"See you not that the ships sail through the sea by Allah's Grace? that He may show you of His Signs? Verily, in this are signs for every patient, grateful (person).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 31\n        },\n        \"text\" : \"And when a wave covers them like shades (i.e. like clouds or the mountains of sea-water), they invoke Allah, making their invocations for Him only. But when He brings them safe to land, there are among them those that stop in the middle, between (Belief and disbelief). But none denies Our Signs except every perfidious ungrateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 31\n        },\n        \"text\" : \"O mankind! Be afraid of your Lord (by keeping your duty to Him and avoiding all evil), and fear a Day when no father can avail aught for his son, nor a son avail aught for his father. Verily, the Promise of Allah is true, let not then this (worldly) present life deceive you, nor let the chief deceiver (Satan) deceive you about Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 31\n        },\n        \"text\" : \"Verily, Allah! With Him (Alone) is the knowledge of the Hour, He sends down the rain, and knows that which is in the wombs. No person knows what he will earn tomorrow, and no person knows in what land he will die. Verily, Allah is All-Knower, All-Aware (of things).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 32\n        },\n        \"text\" : \"Alif-Lam-Mim. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings.]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 32\n        },\n        \"text\" : \"The revelation of the Book (this Quran) is from the Lord of the 'Alamin (mankind, jinns and all that exists) in which there is not doubt!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 32\n        },\n        \"text\" : \"Allah it is He Who has created the heavens and the earth, and all that is between them in six Days. Then He Istawa (rose over) the Throne (in a manner that suits His Majesty). You (mankind) have none, besides Him, as a Wali (protector or helper etc.) or an intercessor. Will you not then remember (or be admonished)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 32\n        },\n        \"text\" : \"That is He, the All-Knower of the unseen and the seen, the All-Mighty, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 32\n        },\n        \"text\" : \"Then He fashioned him in due proportion, and breathed into him the soul (created by Allah for that person), and He gave you hearing (ears), sight (eyes) and hearts. Little is the thanks you give!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 32\n        },\n        \"text\" : \"And they say: \\\"When we are (dead and become) lost in the earth, shall we indeed be recreated anew?\\\" Nay, but they deny the Meeting with their Lord!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 32\n        },\n        \"text\" : \"Say: \\\"The angel of death, who is set over you, will take your souls, then you shall be brought to your Lord.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 32\n        },\n        \"text\" : \"And if you only could see when the Mujrimun (criminals, disbelievers, polytheists, sinners, etc.) shall hang their heads before their Lord (saying): \\\"Our Lord! We have now seen and heard, so send us back (to the world), we will do righteous good deeds. Verily! We now believe with certainty.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 32\n        },\n        \"text\" : \"Only those believe in Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.), who, when they are reminded of them fall down prostrate, and glorify the Praises of their Lord, and they are not proud.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 32\n        },\n        \"text\" : \"Their sides forsake their beds, to invoke their Lord in fear and hope, and they spend (charity in Allah's Cause) out of what We have bestowed on them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 32\n        },\n        \"text\" : \"Is then he who is a believer like him who is Fasiq (disbeliever and disobedient to Allah)? Not equal are they.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 32\n        },\n        \"text\" : \"As for those who believe (in the Oneness of Allah Islamic Monotheism) and do righteous good deeds, for them are Gardens (Paradise) as an entertainment, for what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 32\n        },\n        \"text\" : \"And as for those who are Fasiqun (disbelievers and disobedient to Allah), their abode will be the Fire, every time they wish to get away therefrom, they will be put back thereto, and it will be said to them: \\\"Taste you the torment of the Fire which you used to deny.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 32\n        },\n        \"text\" : \"And who does more wrong than he who is reminded of the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of his Lord, then he turns aside therefrom? Verily, We shall exact retribution from the Mujrimun (criminals, disbelievers, polytheists, sinners, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 33\n        },\n        \"text\" : \"O Prophet (Muhammad SAW)! Keep your duty to Allah, and obey not the disbelievers and the hypocrites (i.e., do not follow their advices). Verily! Allah is Ever AllKnower, AllWise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 33\n        },\n        \"text\" : \"And follow that which is inspired in you from your Lord. Verily, Allah is WellAcquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 33\n        },\n        \"text\" : \"And put your trust in Allah, and Sufficient is Allah as a Wakil (Trustee, or Disposer of affairs).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 33\n        },\n        \"text\" : \"Allah has not put for any man two hearts inside his body. Neither has He made your wives whom you declare to be like your mothers' backs, your real mothers. [AzZihar is the saying of a husband to his wife, \\\"You are to me like the back of my mother\\\" i.e. You are unlawful for me to approach.], nor has He made your adopted sons your real sons. That is but your saying with your mouths. But Allah says the truth, and He guides to the (Right) Way.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 33\n        },\n        \"text\" : \"Call them (adopted sons) by (the names of) their fathers, that is more just with Allah. But if you know not their father's (names, call them) your brothers in faith and Mawalikum (your freed slaves). And there is no sin on you if you make a mistake therein, except in regard to what your hearts deliberately intend. And Allah is Ever OftForgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 33\n        },\n        \"text\" : \"The Prophet is closer to the believers than their ownselves, and his wives are their (believers') mothers (as regards respect and marriage). And blood relations among each other have closer personal ties in the Decree of Allah (regarding inheritance) than (the brotherhood of) the believers and the Muhajirun (emigrants from Makkah, etc.), except that you do kindness to those brothers (when the Prophet SAW joined them in brotherhood ties). This has been written in the (Allah's Book of Divine) Decrees (AlLauh AlMahfuz).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 33\n        },\n        \"text\" : \"That He may ask the truthfuls (Allah's Messengers and His Prophets) about their truth (i.e. the conveyance of Allah's Message that which they were charged with). And He has prepared for the disbelievers a painful torment (Hell-fire).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 33\n        },\n        \"text\" : \"O you who believe! Remember Allah's Favour to you, when there came against you hosts, and We sent against them a wind and forces that you saw not [i.e. troops of angels during the battle of AlAhzab (the Confederates)]. And Allah is Ever AllSeer of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 33\n        },\n        \"text\" : \"When they came upon you from above you and from below you, and when the eyes grew wild and the hearts reached to the throats, and you were harbouring doubts about Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 33\n        },\n        \"text\" : \"And when the hypocrites and those in whose hearts is a disease (of doubts) said: \\\"Allah and His Messenger (SAW) promised us nothing but delusions!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 33\n        },\n        \"text\" : \"And if the enemy had entered from all sides (of the city), and they had been exhorted to AlFitnah (i.e. to renegade from Islam to polytheism) they would surely have committed it and would have hesitated thereupon but little.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 33\n        },\n        \"text\" : \"And indeed they had already made a covenant with Allah not to turn their backs, and a covenant with Allah must be answered for.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 33\n        },\n        \"text\" : \"Say: \\\"Who is he who can protect you from Allah if He intends to harm you, or intends mercy on you?\\\" And they will not find, besides Allah, for themselves any Wali (protector, supporter, etc.) or any helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 33\n        },\n        \"text\" : \"Allah already knows those among you who keep back (men) from fighting in Allah's Cause, and those who say to their brethren \\\"Come here towards us,\\\" while they (themselves) come not to the battle except a little.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 33\n        },\n        \"text\" : \"Being miserly towards you (as regards help and aid in Allah's Cause). Then when fear comes, you will see them looking to you, their eyes revolving like (those of) one over whom hovers death, but when the fear departs, they will smite you with sharp tongues, miserly towards (spending anything in any) good (and only covetous of booty and wealth). Such have not believed. Therefore Allah makes their deeds fruitless, and that is ever easy for Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 33\n        },\n        \"text\" : \"Indeed in the Messenger of Allah (Muhammad SAW) you have a good example to follow for him who hopes in (the Meeting with) Allah and the Last Day and remembers Allah much.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 33\n        },\n        \"text\" : \"And when the believers saw AlAhzab (the Confederates), they said: \\\"This is what Allah and His Messenger (Muhammad SAW) had promised us, and Allah and His Messenger (Muhammad SAW) had spoken the truth, and it only added to their faith and to their submissiveness (to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 33\n        },\n        \"text\" : \"Among the believers are men who have been true to their covenant with Allah [i.e. they have gone out for Jihad (holy fighting), and showed not their backs to the disbelievers], of them some have fulfilled their obligations (i.e. have been martyred), and some of them are still waiting, but they have never changed [i.e. they never proved treacherous to their covenant which they concluded with Allah] in the least.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 33\n        },\n        \"text\" : \"That Allah may reward the men of truth for their truth (i.e. for their patience at the accomplishment of that which they covenanted with Allah), and punish the hypocrites if He will or accept their repentance by turning to them in Mercy. Verily, Allah is OftForgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 33\n        },\n        \"text\" : \"And Allah drove back those who disbelieved in their rage, they gained no advantage (booty, etc.). Allah sufficed for the believers in the fighting (by sending against the disbelievers a severe wind and troops of angels). And Allah is Ever AllStrong, AllMighty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 33\n        },\n        \"text\" : \"And those of the people of the Scripture who backed them (the disbelievers) Allah brought them down from their forts and cast terror into their hearts, (so that) a group (of them) you killed, and a group (of them) you made captives.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 33\n        },\n        \"text\" : \"And He caused you to inherit their lands, and their houses, and their riches, and a land which you had not trodden (before). And Allah is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 33\n        },\n        \"text\" : \"But if you desire Allah and His Messenger, and the home of the Hereafter, then verily, Allah has prepared for AlMuhsinat (gooddoers) amongst you an enormous reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 33\n        },\n        \"text\" : \"O wives of the Prophet! Whoever of you commits an open illegal sexual intercourse, the torment for her will be doubled, and that is ever easy for Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 33\n        },\n        \"text\" : \"And whosoever of you is obedient to Allah and His Messenger SAW, and does righteous good deeds, We shall give her, her reward twice over, and We have prepared for her Rizqan Karima (a noble provision Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 33\n        },\n        \"text\" : \"O wives of the Prophet! You are not like any other women. If you keep your duty (to Allah), then be not soft in speech, lest he in whose heart is a disease (of hypocrisy, or evil desire for adultery, etc.) should be moved with desire, but speak in an honourable manner.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 33\n        },\n        \"text\" : \"And stay in your houses, and do not display yourselves like that of the times of ignorance, and perform As-Salat (IqamatasSalat), and give Zakat and obey Allah and His Messenger. Allah wishes only to remove ArRijs (evil deeds and sins, etc.) from you, O members of the family (of the Prophet SAW), and to purify you with a thorough purification.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 33\n        },\n        \"text\" : \"And remember (O you the members of the Prophet's family, the Graces of your Lord), that which is recited in your houses of the Verses of Allah and AlHikmah (i.e. Prophet's Sunnah legal ways, etc. so give your thanks to Allah and glorify His Praises for this Quran and the Sunnah). Verily, Allah is Ever Most Courteous, WellAcquainted with all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 33\n        },\n        \"text\" : \"Verily, the Muslims (those who submit to Allah in Islam) men and women, the believers men and women (who believe in Islamic Monotheism), the men and the women who are obedient (to Allah), the men and women who are truthful (in their speech and deeds), the men and the women who are patient (in performing all the duties which Allah has ordered and in abstaining from all that Allah has forbidden), the men and the women who are humble (before their Lord Allah), the men and the women who give Sadaqat (i.e. Zakat, and alms, etc.), the men and the women who observe Saum (fast) (the obligatory fasting during the month of Ramadan, and the optional Nawafil fasting), the men and the women who guard their chastity (from illegal sexual acts) and the men and the women who remember Allah much with their hearts and tongues (while sitting, standing, lying, etc. for more than 300 times extra over the remembrance of Allah during the five compulsory congregational prayers) or praying extra additional Nawafil prayers of night in the last part of night, etc.) Allah has prepared for them forgiveness and a great reward (i.e. Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 33\n        },\n        \"text\" : \"It is not for a believer, man or woman, when Allah and His Messenger have decreed a matter that they should have any option in their decision. And whoever disobeys Allah and His Messenger, he has indeed strayed in a plain error.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 33\n        },\n        \"text\" : \"And (remember) when you said to him (Zaid bin Harithah, the freedslave of the Prophet SAW) on whom Allah has bestowed Grace (by guiding him to Islam) and you (O Muhammad SAW too) have done favour (by manumitting him) \\\"Keep your wife to yourself, and fear Allah.\\\" But you did hide in yourself (i.e. what Allah has already made known to you that He will give her to you in marriage) that which Allah will make manifest, you did fear the people (i.e., Muhammad SAW married the divorced wife of his manumitted slave) whereas Allah had a better right that you should fear Him. So when Zaid had accomplished his desire from her (i.e. divorced her), We gave her to you in marriage, so that (in future) there may be no difficulty to the believers in respect of (the marriage of) the wives of their adopted sons when the latter have no desire to keep them (i.e. they have divorced them). And Allah's Command must be fulfilled.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 33\n        },\n        \"text\" : \"There is no blame on the Prophet (SAW) in that which Allah has made legal for him. That has been Allah's Way with those who have passed away of (the Prophets of) old. And the Command of Allah is a decree determined.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 33\n        },\n        \"text\" : \"Those who convey the Message of Allah and fear Him, and fear none save Allah. And Sufficient is Allah as a Reckoner.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 33\n        },\n        \"text\" : \"Muhammad (SAW) is not the father of any man among you, but he is the Messenger of Allah and the last (end) of the Prophets. And Allah is Ever AllAware of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 33\n        },\n        \"text\" : \"O you who believe! Remember Allah with much remembrance.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 33\n        },\n        \"text\" : \"He it is Who sends Salat (His blessings) on you, and His angels too (ask Allah to bless and forgive you), that He may bring you out from darkness (of disbelief and polytheism) into light (of Belief and Islamic Monotheism). And He is Ever Most Merciful to the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 33\n        },\n        \"text\" : \"Their greeting on the Day they shall meet Him will be \\\"Salam: Peace (i.e. the angels will say to them: Salamu 'Alaikum)!\\\" And He has prepared for them a generous reward (i.e. Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 33\n        },\n        \"text\" : \"And as one who invites to Allah [Islamic Monotheism, i.e. to worship none but Allah (Alone)] by His Leave, and as a lamp spreading light (through your instructions from the Quran and the Sunnah the legal ways of the Prophet SAW).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 33\n        },\n        \"text\" : \"And announce to the believers (in the Oneness of Allah and in His Messenger Muhammad SAW) the glad tidings, that they will have from Allah a Great Bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 33\n        },\n        \"text\" : \"And obey not the disbelievers and the hypocrites, and harm them not (till you are ordered). And put your trust in Allah, and Sufficient is Allah as a Wakil (Trustee, or Disposer of affairs).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 33\n        },\n        \"text\" : \"O Prophet (Muhammad SAW)! Verily, We have made lawful to you your wives, to whom you have paid their Mahr (bridal money given by the husband to his wife at the time of marriage), and those (captives or slaves) whom your right hand possesses - whom Allah has given to you, and the daughters of your 'Amm (paternal uncles) and the daughters of your 'Ammah (paternal aunts) and the daughters of your Khal (maternal uncles) and the daughters of your Khalah (maternal aunts) who migrated (from Makkah) with you, and a believing woman if she offers herself to the Prophet, and the Prophet wishes to marry her; a privilege for you only, not for the (rest of) the believers. Indeed We know what We have enjoined upon them about their wives and those (captives or slaves) whom their right hands possess, - in order that there should be no difficulty on you. And Allah is Ever OftForgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 33\n        },\n        \"text\" : \"You (O Muhammad SAW) can postpone (the turn of) whom you will of them (your wives), and you may receive whom you will. And whomsoever you desire of those whom you have set aside (her turn temporarily), it is no sin on you (to receive her again), that is better; that they may be comforted and not grieved, and may all be pleased with what you give them. Allah knows what is in your hearts. And Allah is Ever AllKnowing, Most Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 33\n        },\n        \"text\" : \"It is not lawful for you (to marry other) women after this, nor to change them for other wives even though their beauty attracts you, except those (captives or slaves) whom your right hand possesses. And Allah is Ever a Watcher over all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 33\n        },\n        \"text\" : \"O you who believe! Enter not the Prophet's houses, except when leave is given to you for a meal, (and then) not (so early as) to wait for its preparation. But when you are invited, enter, and when you have taken your meal, disperse, without sitting for a talk. Verily, such (behaviour) annoys the Prophet, and he is shy of (asking) you (to go), but Allah is not shy of (telling you) the truth. And when you ask (his wives) for anything you want, ask them from behind a screen, that is purer for your hearts and for their hearts. And it is not (right) for you that you should annoy Allah's Messenger, nor that you should ever marry his wives after him (his death). Verily! With Allah that shall be an enormity.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 33\n        },\n        \"text\" : \"Whether you reveal anything or conceal it, verily, Allah is Ever AllKnower of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 33\n        },\n        \"text\" : \"It is no sin on them (the Prophet's wives, if they appear unveiled) before their fathers, or their sons, or their brothers, or their brother's sons, or the sons of their sisters, or their own (believing) women, or their (female) slaves, and keep your duty to Allah. Verily, Allah is Ever AllWitness over everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 33\n        },\n        \"text\" : \"Allah sends His Salat (Graces, Honours, Blessings, Mercy, etc.) on the Prophet (Muhammad SAW) and also His angels too (ask Allah to bless and forgive him). O you who believe! Send your Salat on (ask Allah to bless) him (Muhammad SAW), and (you should) greet (salute) him with the Islamic way of greeting (salutation i.e. AsSalamu 'Alaikum).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 33\n        },\n        \"text\" : \"Verily, those who annoy Allah and His Messenger (SAW) Allah has cursed them in this world, and in the Hereafter, and has prepared for them a humiliating torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 33\n        },\n        \"text\" : \"O Prophet! Tell your wives and your daughters and the women of the believers to draw their cloaks (veils) all over their bodies (i.e. screen themselves completely except the eyes or one eye to see the way). That will be better, that they should be known (as free respectable women) so as not to be annoyed. And Allah is Ever OftForgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 33\n        },\n        \"text\" : \"If the hypocrites, and those in whose hearts is a disease (evil desire for adultery, etc.), and those who spread false news among the people in AlMadinah, cease not, We shall certainly let you overpower them, then they will not be able to stay in it as your neighbours but a little while.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 33\n        },\n        \"text\" : \"Accursed, wherever found, they shall be seized and killed with a (terrible) slaughter.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 33\n        },\n        \"text\" : \"That was the Way of Allah in the case of those who passed away of old, and you will not find any change in the Way of Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 33\n        },\n        \"text\" : \"People ask you concerning the Hour, say: \\\"The knowledge of it is with Allah only. What do you know? It may be that the Hour is near!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 33\n        },\n        \"text\" : \"Verily, Allah has cursed the disbelievers, and has prepared for them a flaming Fire (Hell).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 33\n        },\n        \"text\" : \"On the Day when their faces will be turned over in the Fire, they will say: \\\"Oh, would that we had obeyed Allah and obeyed the Messenger (Muhammad SAW).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 33\n        },\n        \"text\" : \"O you who believe! Be not like those who annoyed Musa (Moses), but Allah cleared him of that which they alleged, and he was honourable before Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 33\n        },\n        \"text\" : \"O you who believe! Keep your duty to Allah and fear Him, and speak (always) the truth.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 33\n        },\n        \"text\" : \"He will direct you to do righteous good deeds and will forgive you your sins. And whosoever obeys Allah and His Messenger (SAW) he has indeed achieved a great achievement (i.e. he will be saved from the Hell-fire and made to enter Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 33\n        },\n        \"text\" : \"Truly, We did offer AlAmanah (the trust or moral responsibility or honesty and all the duties which Allah has ordained) to the heavens and the earth, and the mountains, but they declined to bear it and were afraid of it (i.e. afraid of Allah's Torment). But man bore it. Verily, he was unjust (to himself) and ignorant (of its results).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 33\n        },\n        \"text\" : \"So that Allah will punish the hypocrites, men and women, and the men and women who are AlMushrikun (the polytheists, idolaters, pagans, disbelievers in the Oneness of Allah, and in His Messenger Muhammad SAW). And Allah will pardon (accept the repentance of) the true believers of the Islamic Monotheism, men and women. And Allah is Ever OftForgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 34\n        },\n        \"text\" : \"All the praises and thanks be to Allah, to Whom belongs all that is in the heavens and all that is in the earth. His is all the praises and thanks in the Hereafter, and He is the AllWise, the AllAware.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 34\n        },\n        \"text\" : \"Those who disbelieve say: \\\"The Hour will not come to us.\\\" Say: \\\"Yes, by my Lord, it will come to you.\\\" (Allah, He is) the AllKnower of the unseen, not even the weight of an atom (or a small ant) or less than that or greater, escapes from His Knowledge in the heavens or in the earth, but it is in a Clear Book (AlLauh AlMahfuz).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 34\n        },\n        \"text\" : \"That He may recompense those who believe (in the Oneness of Allah Islamic Monotheism) and do righteous good deeds. Those, theirs is forgiveness and Rizqun Karim (generous provision, i.e. Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 34\n        },\n        \"text\" : \"And those who have been given knowledge see that what is revealed to you (O Muhammad SAW) from your Lord is the truth, and guides to the Path of the Exalted in Might, Owner of all praise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 34\n        },\n        \"text\" : \"Those who disbelieve say: \\\"Shall we direct you to a man (Muhammad SAW) who will tell you (that) when you have become fully disintegrated into dust with full dispersion, then, you will be created (again) anew?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 34\n        },\n        \"text\" : \"Has he (Muhammad SAW) invented a lie against Allah, or is there a madness in him? Nay, but those who disbelieve in the Hereafter are (themselves) in a torment, and in far error.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 34\n        },\n        \"text\" : \"See they not what is before them and what is behind them, of the heaven and the earth? If We will, We shall sink the earth with them, or cause a piece of the heaven to fall upon them. Verily, in this is a sign for every faithful believer that [believes in the Oneness of Allah], and turns to Allah (in all affairs with humility and in repentance).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 34\n        },\n        \"text\" : \"And indeed We bestowed grace on David from Us (saying): \\\"O you mountains. Glorify (Allah) with him! And you birds (also)! And We made the iron soft for him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 34\n        },\n        \"text\" : \"Saying: \\\"Make you perfect coats of mail, balancing well the rings of chain armour, and work you (men) righteousness. Truly, I am AllSeer of what you do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 34\n        },\n        \"text\" : \"And to Solomon (We subjected) the wind, its morning (stride from sunrise till midnoon) was a month's (journey), and its afternoon (stride from the midday decline of the sun to sunset) was a month's (journey i.e. in one day he could travel two months' journey). And We caused a fount of (molten) brass to flow for him, and there were jinns that worked in front of him, by the Leave of his Lord, and whosoever of them turned aside from Our Command, We shall cause him to taste of the torment of the blazing Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 34\n        },\n        \"text\" : \"But they turned away (from the obedience of Allah), so We sent against them Sail Al'Arim (flood released from the dam), and We converted their two gardens into gardens producing bitter bad fruit, and tamarisks, and some few lotetrees.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 34\n        },\n        \"text\" : \"But they said: \\\"Our Lord! Make the stages between our journey longer,\\\" and they wronged themselves, so We made them as tales (in the land), and We dispersed them all, totally. Verily, in this are indeed signs for every steadfast grateful (person).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 34\n        },\n        \"text\" : \"And indeed Iblis (Satan) did prove true his thought about them, and they followed him, all except a group of true believers (in the Oneness of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 34\n        },\n        \"text\" : \"And he (Iblis Satan) had no authority over them, except that We might test him, who believes in the Hereafter from him who is in doubt about it. And your Lord is a Hafiz over everything. (AllKnower of everything i.e. He keeps record of each and every person as regards deeds, and then He will reward them accordingly).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say: (O Muhammad SAW to those polytheists, pagans, etc.) \\\"Call upon those whom you assert (to be associate gods) besides Allah, they possess not even the weight of an atom (or a small ant), either in the heavens or on the earth, nor have they any share in either, nor there is for Him any supporter from among them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say (O Muhammad SAW to these polytheists, pagans, etc.) \\\"Who gives you provision from the heavens and the earth?\\\" Say: \\\"Allah, And verily, (either) we or you are rightly guided or in a plain error.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say (O Muhammad SAW to these polytheists, pagans, etc.) \\\"You will not be asked about our sins, nor shall we be asked of what you do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say: \\\"Our Lord will assemble us all together (on the Day of Resurrection), then He will judge between us with truth. And He is the (Most Trustworthy) AllKnowing Judge.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say (O Muhammad SAW to these polytheists and pagans): \\\"Show me those whom you have joined to Him as partners. Nay (there are not at all any partners with Him)! But He is Allah (Alone), the AllMighty, the AllWise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 34\n        },\n        \"text\" : \"And We have not sent you (O Muhammad SAW) except as a giver of glad tidings and a warner to all mankind, but most of men know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 34\n        },\n        \"text\" : \"And those who were arrogant will say to those who were deemed weak: \\\"Did we keep you back from guidance after it had come to you? Nay, but you were Mujrimun (polytheists, sinners, criminals, disobedient to Allah, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 34\n        },\n        \"text\" : \"Those who were deemed weak will say to those who were arrogant: \\\"Nay, but it was your plotting by night and day, when you ordered us to disbelieve in Allah and set up rivals to Him!\\\" And each of them (parties) will conceal their own regrets (for disobeying Allah during this worldly life), when they behold the torment. And We shall put iron collars round the necks of those who disbelieved. Are they requited aught except what they used to do?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 34\n        },\n        \"text\" : \"And it is not your wealth, nor your children that bring you nearer to Us (i.e. pleases Allah), but only he (will please Us) who believes (in the Islamic Monotheism), and does righteous deeds; as for such, there will be twofold reward for what they did, and they will reside in the high dwellings (Paradise) in peace and security.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say: \\\"Truly, my Lord enlarges the provision for whom He wills of His slaves, and (also) restricts (it) for him, and whatsoever you spend of anything (in Allah's Cause), He will replace it. And He is the Best of providers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 34\n        },\n        \"text\" : \"And (remember) the Day when He will gather them all together, and then will say to the angels: \\\"Was it you that these people used to worship?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 34\n        },\n        \"text\" : \"So Today (i.e. the Day of Resurrection), none of you can profit or harm one another. And We shall say to those who did wrong [i.e. worshipped others (like angels, jinns, prophets, saints, righteous persons, etc.) along with Allah]: \\\"Taste the torment of the Fire which you used to belie.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 34\n        },\n        \"text\" : \"And when Our Clear Verses are recited to them, they say: \\\"This (Muhammad SAW) is naught but a man who wishes to hinder you from that which your fathers used to worship.\\\" And they say: \\\"This is nothing but an invented lie.\\\" And those who disbelieve say of the truth when it has come to them (i.e. Prophet Muhammad SAW when Allah sent him as a Messenger with proofs, evidences, verses, lessons, signs, etc.): \\\"This is nothing but evident magic!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say (to them O Muhammad SAW): \\\"I exhort you on one (thing) only: that you stand up for Allah's sake in pairs and singly, and reflect (within yourselves the life history of the Prophet SAW): there is no madness in your companion (Muhammad SAW), he is only a warner to you in face of a severe torment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Whatever wage I might have asked of you is yours. My wage is from Allah only. and He is Witness over all things.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Verily! My Lord sends down Inspiration and makes apparent the truth (i.e. this Revelation that had come to me), the AllKnower of the Ghaib (unseen).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"The truth (the Quran and Allah's Inspiration) has come, and AlBatil [falsehood - Iblis (Satan)] can neither create anything nor resurrect (anything).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say: \\\"If (even) I go astray, I shall stray only to my own loss. But if I remain guided, it is because of the Inspiration of my Lord to me. Truly, He is AllHearer, Ever Near (to all things).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 34\n        },\n        \"text\" : \"And they will say (in the Hereafter): \\\"We do believe (now);\\\" but how could they receive (Faith and the acceptance of their repentance by Allah) from a place so far off (i.e. to return to the worldly life again).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 34\n        },\n        \"text\" : \"Indeed they did disbelieve (in the Oneness of Allah, Islam, the Quran and Muhammad SAW) before (in this world), and they (used to) conjecture about the unseen [i.e. the Hereafter, Hell, Paradise, Resurrection and the Promise of Allah, etc. (by saying) all that is untrue], from a far place.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 34\n        },\n        \"text\" : \"And a barrier will be set between them and that which they desire [i.e. At-Taubah (turning to Allah in repentance) and the accepting of Faith etc.], as was done in the past with the people of their kind. Verily, they have been in grave doubt.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 35\n        },\n        \"text\" : \"All the praises and thanks be to Allah, the (only) Originator [or the (only) Creator] of the heavens and the earth, Who made the angels messengers with wings, - two or three or four. He increases in creation what He wills. Verily, Allah is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 35\n        },\n        \"text\" : \"Whatever of mercy (i.e. of good), Allah may grant to mankind, none can withhold it, and whatever He may withhold, none can grant it thereafter. And He is the AllMighty, the AllWise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 35\n        },\n        \"text\" : \"O mankind! Remember the Grace of Allah upon you! Is there any creator other than Allah who provides for you from the sky (rain) and the earth? La ilaha illa Huwa (none has the right to be worshipped but He). How then are you turning away (from Him)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 35\n        },\n        \"text\" : \"And if they belie you (O Muhammad SAW), so were Messengers belied before you. And to Allah return all matters (for decision).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 35\n        },\n        \"text\" : \"O mankind! Verily, the Promise of Allah is true. So let not this present life deceive you, and let not the chief deceiver (Satan) deceive you about Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 35\n        },\n        \"text\" : \"Those who disbelieve, theirs will be a severe torment; and those who believe (in the Oneness of Allah Islamic Monotheism) and do righteous good deeds, theirs will be forgiveness and a great reward (i.e. Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 35\n        },\n        \"text\" : \"Is he, then, to whom the evil of his deeds made fairseeming, so that he considers it as good (equal to one who is rightly guided)? Verily, Allah sends astray whom He wills, and guides whom He wills. So destroy not yourself (O Muhammad SAW) in sorrow for them. Truly, Allah is the AllKnower of what they do!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 35\n        },\n        \"text\" : \"And it is Allah Who sends the winds, so that they raise up the clouds, and We drive them to a dead land, and revive therewith the earth after its death. As such (will be) the Resurrection!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 35\n        },\n        \"text\" : \"Whosoever desires honour, power and glory then to Allah belong all honour, power and glory [and one can get honour, power and glory only by obeying and worshipping Allah (Alone)]. To Him ascend (all) the goodly words, and the righteous deeds exalt it (the goodly words i.e. the goodly words are not accepted by Allah unless and until they are followed by good deeds), but those who plot evils, theirs will be severe torment. And the plotting of such will perish.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 35\n        },\n        \"text\" : \"And Allah did create you (Adam) from dust, then from Nutfah (male and female discharge semen drops i.e. Adam's offspring), then He made you pairs (male and female). And no female conceives or gives birth, but with His Knowledge. And no aged man is granted a length of life, nor is a part cut off from his life (or another man's life), but is in a Book (AlLauh AlMahfuz) Surely, that is easy for Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 35\n        },\n        \"text\" : \"He merges the night into the day (i.e. the decrease in the hours of the night are added to the hours of the day), and He merges the day into the night (i.e. the decrease in the hours of the day are added to the hours of the night). And He has subjected the sun and the moon, each runs its course for a term appointed. Such is Allah your Lord; His is the kingdom. And those, whom you invoke or call upon instead of Him, own not even a Qitmir (the thin membrane over the datestone).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 35\n        },\n        \"text\" : \"If you invoke (or call upon) them, they hear not your call, and if (in case) they were to hear, they could not grant it (your request) to you. And on the Day of Resurrection, they will disown your worshipping them. And none can inform you (O Muhammad SAW) like Him Who is the AllKnower (of each and everything).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 35\n        },\n        \"text\" : \"O mankind! it is you who stand in need of Allah, but Allah is Rich (Free of all wants and needs), Worthy of all praise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 35\n        },\n        \"text\" : \"And that is not hard for Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 35\n        },\n        \"text\" : \"And no bearer of burdens shall bear another's burden, and if one heavily laden calls another to (bear) his load, nothing of it will be lifted even though he be near of kin. You (O Muhammad SAW) can warn only those who fear their Lord unseen, and perform As-Salat (IqamatasSalat). And he who purifies himself (from all kinds of sins), then he purifies only for the benefit of his ownself. And to Allah is the (final) Return (of all).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 35\n        },\n        \"text\" : \"Nor are (alike) the living (believers) and the dead (disbelievers). Verily, Allah makes whom He will hear, but you cannot make hear those who are in graves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 35\n        },\n        \"text\" : \"You (O Muhammad SAW) are only a warner (i.e. your duty is to convey Allah's Message to mankind but the guidance is in Allah's Hand).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 35\n        },\n        \"text\" : \"See you not that Allah sends down water (rain) from the sky, and We produce therewith fruits of varying colours, and among the mountains are streaks white and red, of varying colours and (others) very black.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 35\n        },\n        \"text\" : \"And of men and AdDawab (moving living creatures, beasts, etc.), and cattle, in like manner of various colours. It is only those who have knowledge among His slaves that fear Allah. Verily, Allah is AllMighty, OftForgiving.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 35\n        },\n        \"text\" : \"Verily, those who recite the Book of Allah (this Quran), and perform AsSalat (IqamatasSalat), and spend (in charity) out of what We have provided for them, secretly and openly, hope for a (sure) tradegain that will never perish.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 35\n        },\n        \"text\" : \"And what We have inspired in you (O Muhammad SAW), of the Book (the Quran), it is the (very) truth [that you (Muhammad SAW) and your followers must act on its instructions], confirming that which was (revealed) before it. Verily! Allah is indeed AllAware, and AllSeer of His slaves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 35\n        },\n        \"text\" : \"Then We gave the Book the Quran) for inheritance to such of Our slaves whom We chose (the followers of Muhammad SAW). Then of them are some who wrong their ownselves, and of them are some who follow a middle course, and of them are some who are, by Allah's Leave, foremost in good deeds. That (inheritance of the Quran), that is indeed a great grace.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 35\n        },\n        \"text\" : \"And they will say: \\\"All the praises and thanks be to Allah, Who has removed from us (all) grief. Verily, our Lord is indeed OftForgiving, Most Ready to appreciate (good deeds and to recompense).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 35\n        },\n        \"text\" : \"But those who disbelieve, (in the Oneness of Allah - Islamic Monotheism) for them will be the Fire of Hell. Neither it will have a complete killing effect on them so that they die, nor shall its torment be lightened for them. Thus do We requite every disbeliever!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 35\n        },\n        \"text\" : \"Therein they will cry: \\\"Our Lord! Bring us out, we shall do righteous good deeds, not (the evil deeds) that we used to do.\\\" (Allah will reply): \\\"Did We not give you lives long enough, so that whosoever would receive admonition, - could receive it? And the warner came to you. So taste you (the evil of your deeds). For the Zalimun (polytheists and wrongdoers, etc.) there is no helper.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 35\n        },\n        \"text\" : \"Verily, Allah is the AllKnower of the unseen of the heavens and the earth. Verily! He is the AllKnower of that is in the breasts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 35\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Tell me or inform me (what) do you think about your (socalled) partnergods to whom you call upon besides Allah, show me, what they have created of the earth? Or have they any share in the heavens? Or have We given them a Book, so that they act on clear proof therefrom? Nay, the Zalimun (polytheists and wrongdoers, etc.) promise one another nothing but delusions.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 35\n        },\n        \"text\" : \"Verily! Allah grasps the heavens and the earth lest they move away from their places, and if they were to move away from their places, there is not one that could grasp them after Him. Truly, He is Ever Most Forbearing, OftForgiving.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 35\n        },\n        \"text\" : \"And they swore by Allah their most binding oath, that if a warner came to them, they would be more guided than any of the nations (before them), yet when a warner (Muhammad SAW) came to them, it increased in them nothing but flight (from the truth),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 35\n        },\n        \"text\" : \"(They took to flight because of their) arrogance in the land and their plotting of evil. But the evil plot encompasses only him who makes it. Then, can they expect anything (else), but the Sunnah (way of dealing) of the peoples of old? So no change will you find in Allah's Sunnah (way of dealing), and no turning off will you find in Allah's Sunnah (way of dealing).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 35\n        },\n        \"text\" : \"Have they not travelled in the land, and seen what was the end of those before them, and they were superior to them in power? Allah is not such that anything in the heavens or in the earth escapes Him. Verily, He is AllKnowing, AllOmnipotent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 35\n        },\n        \"text\" : \"And if Allah were to punish men for that which they earned, He would not leave a moving (living) creature on the surface of the earth, but He gives them respite to an appointed term, and when their term comes, then verily, Allah is Ever AllSeer of His slaves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 36\n        },\n        \"text\" : \"Ya-Sin. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings.]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 36\n        },\n        \"text\" : \"On a Straight Path (i.e. on Allah's religion of Islamic Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 36\n        },\n        \"text\" : \"(This is) a Revelation sent down by the AllMighty, the Most Merciful,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 36\n        },\n        \"text\" : \"You can only warn him who follows the Reminder (the Quran), and fears the Most Beneficent (Allah) unseen. Bear you to such one the glad tidings of forgiveness, and a generous reward (i.e. Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 36\n        },\n        \"text\" : \"Verily, We give life to the dead, and We record that which they send before (them), and their traces [their footsteps and walking on the earth with their legs to the mosques for the five compulsory congregational prayers, Jihad (holy fighting in Allah's Cause) and all other good and evil they did, and that which they leave behind], and all things We have recorded with numbers (as a record) in a Clear Book.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 36\n        },\n        \"text\" : \"They (people of the town) said: \\\"You are only human beings like ourselves, and the Most Beneficent (Allah) has revealed nothing, you are only telling lies.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 36\n        },\n        \"text\" : \"They (Messengers) said: \\\"Your evil omens be with you! (Do you call it \\\"evil omen\\\") because you are admonished? Nay, but you are a people Musrifun (transgressing all bounds by committing all kinds of great sins, and by disobeying Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 36\n        },\n        \"text\" : \"\\\"And why should I not worship Him (Allah Alone) Who has created me and to Whom you shall be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 36\n        },\n        \"text\" : \"\\\"Shall I take besides Him aliha (gods), if the Most Beneficent (Allah) intends me any harm, their intercession will be of no use for me whatsoever, nor can they save me?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 36\n        },\n        \"text\" : \"\\\"That my Lord (Allah) has forgiven me, and made me of the honoured ones!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 36\n        },\n        \"text\" : \"It was but one Saihah (shout, etc.) and lo! They (all) were silent (dead-destroyed).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 36\n        },\n        \"text\" : \"And surely, all, everyone of them will be brought before Us.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 36\n        },\n        \"text\" : \"Glory be to Him, Who has created all the pairs of that which the earth produces, as well as of their own (human) kind (male and female), and of that which they know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 36\n        },\n        \"text\" : \"And the sun runs on its fixed course for a term (appointed). That is the Decree of the All-Mighty, the All-Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 36\n        },\n        \"text\" : \"It is not for the sun to overtake the moon, nor does the night outstrip the day. They all float, each in an orbit.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 36\n        },\n        \"text\" : \"And if We will, We shall drown them, and there will be no shout (or helper) for them (to hear their cry for help) nor will they be saved.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 36\n        },\n        \"text\" : \"And when it is said to them: \\\"Beware of that which is before you (worldly torments), and that which is behind you (torments in the Hereafter), in order that you may receive Mercy (i.e. if you believe in Allah's Religion Islamic Monotheism, and avoid polytheism, and obey Allah with righteous deeds).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 36\n        },\n        \"text\" : \"And when it is said to them: \\\"Spend of that with which Allah has provided you,\\\" those who disbelieve say to those who believe: \\\"Shall we feed those whom, if Allah willed, He (Himself) would have fed? You are only in a plain error.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 36\n        },\n        \"text\" : \"They will say: \\\"Woe to us! Who has raised us up from our place of sleep.\\\" (It will be said to them): \\\"This is what the Most Beneficent (Allah) had promised, and the Messengers spoke truth!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 36\n        },\n        \"text\" : \"It will be but a single Saihah (shout, etc.), so behold! They will all be brought up before Us!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 36\n        },\n        \"text\" : \"They will have therein fruits (of all kinds) and all that they ask for.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 36\n        },\n        \"text\" : \"(It will be said to them): Salamun (peace be on you), a Word from the Lord (Allah), Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 36\n        },\n        \"text\" : \"This Day, We shall seal up their mouths, and their hands will speak to Us, and their legs will bear witness to what they used to earn. (It is said that one's left thigh will be the first to bear the witness). [Tafsir At-Tabari, Vol. 22, Page 24]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 36\n        },\n        \"text\" : \"And they have taken besides Allah aliha (gods), hoping that they might be helped (by those so called gods).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 36\n        },\n        \"text\" : \"Say: (O Muhammad SAW) \\\"He will give life to them Who created them for the first time! And He is the All-Knower of every creation!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 36\n        },\n        \"text\" : \"Is not He, Who created the heavens and the earth Able to create the like of them? Yes, indeed! He is the All-Knowing Supreme Creator.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 36\n        },\n        \"text\" : \"So Glorified is He and Exalted above all that they associate with Him, and in Whose Hands is the dominion of all things, and to Him you shall be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 37\n        },\n        \"text\" : \"By those (angels) who bring the Book and the Quran from Allah to mankind [Tafsir Ibn Kathir].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 37\n        },\n        \"text\" : \"Verily your Ilah (God) is indeed One (i.e. Allah);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 37\n        },\n        \"text\" : \"Lord of the heavens and of the earth, and all that is between them, and Lord of every point of the sun's risings. (None has the right to be worshipped but Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 37\n        },\n        \"text\" : \"And when they see an Ayah (a sign, a proof, or an evidence) from Allah, they mock at it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 37\n        },\n        \"text\" : \"\\\"When we are dead and have become dust and bones, shall we (then) verily be resurrected?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 37\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Yes, and you shall then be humiliated.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 37\n        },\n        \"text\" : \"\\\"Instead of Allah, and lead them on to the way of flaming Fire (Hell);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 37\n        },\n        \"text\" : \"Nay, but that Day they shall surrender,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 37\n        },\n        \"text\" : \"\\\"So now the Word of our Lord has been justified against us, that we shall certainly (have to) taste (the torment).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 37\n        },\n        \"text\" : \"Then verily, that Day, they will (all) share in the torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 37\n        },\n        \"text\" : \"Certainly, that is how We deal with Al-Mujrimun (polytheists, sinners, criminals, the disobedient to Allah, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 37\n        },\n        \"text\" : \"Truly, when it was said to them: La ilaha ill-Allah \\\"(none has the right to be worshipped but Allah),\\\" they puffed themselves up with pride (i.e. denied it).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 37\n        },\n        \"text\" : \"Nay! he (Muhammad SAW) has come with the truth (i.e. Allah's Religion - Islamic Monotheism and this Quran) and he confirms the Messengers (before him who brought Allah's religion - Islamic Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 37\n        },\n        \"text\" : \"And you will be requited nothing except for what you used to do (evil deeds, sins, and Allah's disobedience which you used to do in this world);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 37\n        },\n        \"text\" : \"Save the chosen slaves of Allah (faithful, obedient, true believers of Islamic Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 37\n        },\n        \"text\" : \"Fruits; and they shall be honoured,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 37\n        },\n        \"text\" : \"Then they will turn to one another, mutually questioning.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 37\n        },\n        \"text\" : \"\\\"(That) when we die and become dust and bones, shall we indeed (be raised up) to receive reward or punishment (according to our deeds)?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 37\n        },\n        \"text\" : \"He said: \\\"By Allah! You have nearly ruined me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 37\n        },\n        \"text\" : \"(Allah informs about that true believer that he said): \\\"Are we then not to die (any more)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 37\n        },\n        \"text\" : \"\\\"Except our first death, and we shall not be punished? (after we have entered Paradise).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 37\n        },\n        \"text\" : \"Except the chosen slaves of Allah (faithful, obedient, and true believers of Islamic Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 37\n        },\n        \"text\" : \"Salamun (peace) be upon Nuh (Noah) (from Us) among the 'Alamin (mankind, jinns and all that exists)!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 37\n        },\n        \"text\" : \"When he came to his Lord with a pure heart [attached to Allah Alone and none else, worshipping none but Allah Alone true Islamic Monotheism, pure from the filth of polytheism].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 37\n        },\n        \"text\" : \"\\\"Is it a falsehood aliha (gods) other than Allah that you seek?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 37\n        },\n        \"text\" : \"\\\"Then what do you think about the Lord of the 'Alamin (mankind, jinns, and all that exists)?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 37\n        },\n        \"text\" : \"\\\"While Allah has created you and what you make!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 37\n        },\n        \"text\" : \"And, when he (his son) was old enough to walk with him, he said: \\\"O my son! I have seen in a dream that I am slaughtering you (offer you in sacrifice to Allah), so look what you think!\\\" He said: \\\"O my father! Do that which you are commanded, In sha' Allah (if Allah will), you shall find me of As-Sabirin (the patient ones, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 37\n        },\n        \"text\" : \"Then, when they had both submitted themselves (to the Will of Allah), and he had laid him prostrate on his forehead (or on the side of his forehead for slaughtering);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 37\n        },\n        \"text\" : \"And We called out to him: \\\"O Abraham!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 124,\n          \"sura\" : 37\n        },\n        \"text\" : \"When he said to his people: \\\"Will you not fear Allah?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 125,\n          \"sura\" : 37\n        },\n        \"text\" : \"\\\"Will you call upon Ba'l (a well- known idol of his nation whom they used to worship) and forsake the Best of creators,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 126,\n          \"sura\" : 37\n        },\n        \"text\" : \"\\\"Allah, your Lord and the Lord of your forefathers?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 128,\n          \"sura\" : 37\n        },\n        \"text\" : \"Except the chosen slaves of Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 131,\n          \"sura\" : 37\n        },\n        \"text\" : \"Verily, thus do We reward the Muhsinun (good-doers, who perform good deeds totally for Allah's sake only - see V. 2:112).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 134,\n          \"sura\" : 37\n        },\n        \"text\" : \"When We saved him and his family, all,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 142,\n          \"sura\" : 37\n        },\n        \"text\" : \"Then a (big) fish swallowed him and he had done an act worthy of blame.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 143,\n          \"sura\" : 37\n        },\n        \"text\" : \"Had he not been of them who glorify Allah,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 152,\n          \"sura\" : 37\n        },\n        \"text\" : \"\\\"Allah has begotten off spring or children (i.e. angels are the daughters of Allah)?\\\" And, verily, they are liars!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 159,\n          \"sura\" : 37\n        },\n        \"text\" : \"Glorified is Allah! (He is Free) from what they attribute unto Him!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 160,\n          \"sura\" : 37\n        },\n        \"text\" : \"Except the slaves of Allah, whom He choses (for His Mercy i.e. true believers of Islamic Monotheism who do not attribute false things unto Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 162,\n          \"sura\" : 37\n        },\n        \"text\" : \"Cannot lead astray [turn away from Him (Allah) anyone of the believers],\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 166,\n          \"sura\" : 37\n        },\n        \"text\" : \"Verily, we (angels), we are they who glorify (Allah's Praises i.e. perform prayers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 168,\n          \"sura\" : 37\n        },\n        \"text\" : \"\\\"If we had a reminder as had the men of old (before the coming of Prophet Muhammad SAW as a Messenger of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 169,\n          \"sura\" : 37\n        },\n        \"text\" : \"\\\"We would have indeed been the chosen slaves of Allah (true believers of Islamic Monotheism)!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 170,\n          \"sura\" : 37\n        },\n        \"text\" : \"But (now that the Quran has come) they disbelieve therein (i.e. in the Quran and in Prophet Muhammad SAW, and all that which he brought, the Divine Revelation), so they will come to know!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 175,\n          \"sura\" : 37\n        },\n        \"text\" : \"And watch them and they shall see (the punishment)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 179,\n          \"sura\" : 37\n        },\n        \"text\" : \"And watch and they shall see (the torment)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 182,\n          \"sura\" : 37\n        },\n        \"text\" : \"And all the praise and thanks be to Allah, Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 38\n        },\n        \"text\" : \"Sad [These letters (Sad etc.) are one of the miracles of the Quran and none but Allah (Alone) knows their meanings]. By the Quran full of reminding.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 38\n        },\n        \"text\" : \"\\\"Has he made the aliha (gods) (all) into One Ilah (God - Allah). Verily, this is a curious thing!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 38\n        },\n        \"text\" : \"Or have they the treasures of the Mercy of your Lord, the All-Mighty, the Real Bestower?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 38\n        },\n        \"text\" : \"Or is it that the dominion of the heavens and the earth and all that is between them is theirs? If so, let them ascend up with means (to the heavens)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 38\n        },\n        \"text\" : \"(As they denied Allah's Message) they will be a defeated host like the confederates of the old times (who were defeated).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 38\n        },\n        \"text\" : \"And these only wait for a single Saihah [shout (i.e. the blowing of the Trumpet by the angel Israfil Sarafil)] there will be no pause or ending thereto [till everything will perish except Allah (the only God full of Majesty, Bounty and Honour)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 38\n        },\n        \"text\" : \"Be patient (O Muhammad SAW) of what they say, and remember Our slave Dawud (David), endued with power. Verily, he was ever oft-returning in all matters and in repentance (toward Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 38\n        },\n        \"text\" : \"And (so did) the birds assembled: all with him [Dawud (David)] did turn (to Allah i.e. glorified His Praises).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 38\n        },\n        \"text\" : \"And has the news of the litigants reached you? When they climbed over the wall into (his) Mihrab (a praying place or a private room,).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 38\n        },\n        \"text\" : \"[Dawud (David)] said (immediately without listening to the opponent): \\\"He has wronged you in demanding your ewe in addition to his ewes. And, verily, many partners oppress one another, except those who believe and do righteous good deeds, and they are few.\\\" And Dawud (David) guessed that We have tried him and he sought Forgiveness of his Lord, and he fell down prostrate and turned (to Allah) in repentance.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 38\n        },\n        \"text\" : \"O Dawud (David)! Verily! We have placed you as a successor on earth, so judge you between men in truth (and justice) and follow not your desire for it will mislead you from the Path of Allah. Verily! Those who wander astray from the Path of Allah (shall) have a severe torment, because they forgot the Day of Reckoning.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 38\n        },\n        \"text\" : \"And We created not the heaven and the earth and all that is between them without purpose! That is the consideration of those who disbelieve! Then woe to those who disbelieve (in Islamic Monotheism) from the Fire!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 38\n        },\n        \"text\" : \"Shall We treat those who believe (in the Oneness of Allah Islamic Monotheism) and do righteous good deeds, as Mufsidun (those who associate partners in worship with Allah and commit crimes) on earth? Or shall We treat the Muttaqun (pious - see V. 2:2), as the Fujjar (criminals, disbelievers, wicked, etc)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 38\n        },\n        \"text\" : \"When there were displayed before him, in the afternoon, well trained horses of the highest breed [for Jihad (holy fighting in Allah's Cause)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 38\n        },\n        \"text\" : \"And, indeed We did try Sulaiman (Solomon) and We placed on his throne Jasadan (a devil, so he lost his kingdom for a while) but he did return (to his throne and kingdom by the Grace of Allah and he did return) to Allah with obedience and in repentance.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 38\n        },\n        \"text\" : \"He said: \\\"My Lord! Forgive me, and bestow upon me a kingdom such as shall not belong to any other after me: Verily, You are the Bestower.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 38\n        },\n        \"text\" : \"[Saying of Allah to Sulaiman (Solomon)]: \\\"This is Our gift, so spend you or withhold, no account will be asked.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 38\n        },\n        \"text\" : \"(Allah said to him): \\\"Strike the ground with your foot: This is a spring of water to wash in, cool and a (refreshing) drink.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 38\n        },\n        \"text\" : \"And remember Our slaves, Ibrahim (Abraham), Ishaque (Isaac), and Ya'qub (Jacob), (all) owners of strength (in worshipping Us) and (also) of religious understanding.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 38\n        },\n        \"text\" : \"Verily, We did choose them by granting them (a good thing, i.e.) the remembrance of the home [in the Hereafter and they used to make the people remember it, and also they used to invite the people to obey Allah and to do good deeds for the Hereafter].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 38\n        },\n        \"text\" : \"And remember Isma'il (Ishmael), Al-Yasa'a (Elisha), and Dhul-Kifl (Isaiah), all are among the best.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 38\n        },\n        \"text\" : \"Therein they will recline; therein they will call for fruits in abundance and drinks;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 38\n        },\n        \"text\" : \"This is so! And for the Taghun (transgressors, disobedient to Allah and His Messenger - disbelievers in the Oneness of Allah, criminals, etc.), will be an evil final return (Fire),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 38\n        },\n        \"text\" : \"And other torments of similar kind, all together!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 38\n        },\n        \"text\" : \"This is a troop entering with you (in Hell), no welcome for them! Verily, they shall burn in the Fire!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 38\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"I am only a warner and there is no Ilah (God) except Allah (none has the right to be worshipped but Allah) the One, the Irresistible,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 38\n        },\n        \"text\" : \"\\\"The Lord of the heavens and the earth and all that is between them, the All-Mighty, the Oft-Forgiving.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 38\n        },\n        \"text\" : \"So when I have fashioned him and breathed into him (his) soul created by Me, then you fall down prostrate to him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 38\n        },\n        \"text\" : \"So the angels prostrated themselves, all of them:\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 38\n        },\n        \"text\" : \"(Allah) said: \\\"O Iblis (Satan)! What prevents you from prostrating yourself to one whom I have created with Both My Hands. Are you too proud (to fall prostrate to Adam) or are you one of the high exalted?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 38\n        },\n        \"text\" : \"(Allah) said: \\\"Then get out from here, for verily, you are outcast.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 38\n        },\n        \"text\" : \"(Allah) said: \\\"Verily! You are of those allowed respite\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 38\n        },\n        \"text\" : \"[Iblis (Satan)] said: \\\"By Your Might, then I will surely mislead them all,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 38\n        },\n        \"text\" : \"(Allah) said: \\\"The Truth is, and the Truth I say,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 38\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"No wage do I ask of you for this (the Quran), nor am I one of the Mutakallifun (those who pretend and fabricate things which do not exist).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 38\n        },\n        \"text\" : \"\\\"It (this Quran) is only a Reminder for all the 'Alamin (mankind and jinns).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 38\n        },\n        \"text\" : \"\\\"And you shall certainly know the truth of it after a while.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 39\n        },\n        \"text\" : \"The revelation of this Book (the Quran) is from Allah, the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 39\n        },\n        \"text\" : \"Verily, We have sent down the Book to you (O Muhammad SAW) in truth: So worship Allah (Alone) by doing religious deeds sincerely for Allah's sake only, (and not to show-off, and not to set up rivals with Him in worship).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 39\n        },\n        \"text\" : \"Surely, the religion (i.e. the worship and the obedience) is for Allah only. And those who take Auliya' (protectors and helpers) besides Him (say): \\\"We worship them only that they may bring us near to Allah.\\\" Verily, Allah will judge between them concerning that wherein they differ. Truly, Allah guides not him who is a liar, and a disbeliever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 39\n        },\n        \"text\" : \"Had Allah willed to take a son (or offspring or children), He could have chosen whom He pleased out of those whom He created. But glory be to Him! (He is above such things). He is Allah, the One, the Irresistible.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 39\n        },\n        \"text\" : \"He has created the heavens and the earth with truth. He makes the night to go in the day and makes the day to go in the night. And He has subjected the sun and the moon. Each running (on a fixed course) for an appointed term. Verily, He is the All-Mighty, the Oft-Forgiving.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 39\n        },\n        \"text\" : \"He created you (all) from a single person (Adam); then made from him his wife [Hawwa' (Eve)]. And He has sent down for you of cattle eight pairs (of the sheep, two, male and female; of the goats, two, male and female; of the oxen, two, male and female; and of the camels, two, male and female). He creates you in the wombs of your mothers, creation after creation in three veils of darkness, such is Allah your Lord. His is the kingdom, La ilaha illa Huwa (none has the right to be worshipped but He). How then are you turned away?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 39\n        },\n        \"text\" : \"If you disbelieve, then verily, Allah is not in need of you, He likes not disbelief for His slaves. And if you are grateful (by being believers), He is pleased therewith for you. No bearer of burdens shall bear the burden of another. Then to your Lord is your return, so He will inform you what you used to do. Verily, He is the All-Knower of that which is in (men's) breasts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 39\n        },\n        \"text\" : \"And when some hurt touches man, he cries to his Lord (Allah Alone), turning to Him in repentance, but when He bestows a favour upon him from Himself, he forgets that for which he cried for before, and he sets up rivals to Allah, in order to mislead others from His Path. Say: \\\"Take pleasure in your disbelief for a while: surely, you are (one) of the dwellers of the Fire!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 39\n        },\n        \"text\" : \"Is one who is obedient to Allah, prostrating himself or standing (in prayer) during the hours of the night, fearing the Hereafter and hoping for the Mercy of his Lord (like one who disbelieves)? Say: \\\"Are those who know equal to those who know not?\\\" It is only men of understanding who will remember (i.e. get a lesson from Allah's Signs and Verses).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 39\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"O My slaves who believe (in the Oneness of Allah Islamic Monotheism), be afraid of your Lord (Allah) and keep your duty to Him. Good is (the reward) for those who do good in this world, and Allah's earth is spacious (so if you cannot worship Allah at a place, then go to another)! Only those who are patient shall receive their rewards in full, without reckoning.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 39\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Verily, I am commanded to worship Allah (Alone) by obeying Him and doing religious deeds sincerely for Allah's sake only and not to show off, and not to set up rivals with Him in worship;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 39\n        },\n        \"text\" : \"\\\"And I am commanded (this) in order that I may be the first of those who submit themselves to Allah (in Islam) as Muslims.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 39\n        },\n        \"text\" : \"Say (O Muhammad SAW) \\\"Allah Alone I worship by doing religious deeds sincerely for His sake only and not to show-off, and not to set up rivals with Him in worship.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 39\n        },\n        \"text\" : \"They shall have coverings of Fire, above them and covering (of Fire) beneath them; with this Allah does frighten His slaves: \\\"O My slaves, therefore fear Me!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 39\n        },\n        \"text\" : \"Those who avoid At-Taghut (false deities) by not worshipping them and turn to Allah in repentance, for them are glad tidings; so announce the good news to My slaves,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 39\n        },\n        \"text\" : \"Those who listen to the Word [good advice La ilaha ill-Allah (none has the right to be worshipped but Allah) and Islamic Monotheism, etc.] and follow the best thereof (i.e. worship Allah Alone, repent to Him and avoid Taghut, etc.) those are (the ones) whom Allah has guided and those are men of understanding (like Zaid bin 'Amr bin Nufail, Salman Al-Farisi and Abu Dhar Al-Ghifari). [Tafsir Al-Qurtubi, Vol. 12, P. 244]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 39\n        },\n        \"text\" : \"But those who fear Allah and keep their duty to their Lord (Allah), for them are built lofty rooms; one above another under which rivers flow (i.e. Paradise). (This is) the Promise of Allah: and Allah does not fail in (His) Promise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 39\n        },\n        \"text\" : \"See you not, that Allah sends down water (rain) from the sky, and causes it to penetrate the earth, (and then makes it to spring up) as water-springs and afterward thereby produces crops of different colours, and afterward they wither and you see them turn yellow, then He makes them dry and broken pieces. Verily, in this, is a Reminder for men of understanding.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 39\n        },\n        \"text\" : \"Is he whose breast Allah has opened to Islam, so that he is in light from His Lord (as he who is non-Muslim)? So, woe to those whose hearts are hardened against remembrance of Allah! They are in plain error!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 39\n        },\n        \"text\" : \"Allah has sent down the best statement, a Book (this Quran), its parts resembling each other in goodness and truth, oft-repeated. The skins of those who fear their Lord shiver from it (when they recite it or hear it). Then their skin and their heart soften to the remembrance of Allah. That is the guidance of Allah. He Guides therewith whom He pleases and whomever Allah sends astray, for him there is no guide.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 39\n        },\n        \"text\" : \"So Allah made them to taste the disgrace in the present life, but greater is the torment of the Hereafter if they only knew!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 39\n        },\n        \"text\" : \"An Arabic Quran, without any crookedness (therein) in order that they may avoid all evil which Allah has ordered them to avoid, fear Him and keep their duty to Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 39\n        },\n        \"text\" : \"Allah puts forth a similitude: a (slave) man belonging to many partners (like those who worship others along with Allah) disputing with one another, and a (slave) man belonging entirely to one master, (like those who worship Allah Alone). Are those two equal in comparison? All the praises and thanks be to Allah! But most of them know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 39\n        },\n        \"text\" : \"Then, who does more wrong than one who utters a lie against Allah, and denies the truth [this Quran, the Prophet (Muhammad SAW), the Islamic Monotheism, the Resurrection and the reward or punishment according to good or evil deeds] when it comes to him! Is there not in Hell an abode for the disbelievers?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 39\n        },\n        \"text\" : \"They shall have all that they will desire with their Lord. That is the reward of Muhsinun (good-doers - see V. 2:112).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 39\n        },\n        \"text\" : \"So that Allah may remit from them the evil of what they did and give them the reward, according to the best of what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 39\n        },\n        \"text\" : \"Is not Allah Sufficient for His slave? Yet they try to frighten you with those (whom they worship) besides Him! And whom Allah sends astray, for him there will be no guide.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 39\n        },\n        \"text\" : \"And whomsoever Allah guides, for him there will be no misleader. Is not Allah All-Mighty, Possessor of Retribution?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 39\n        },\n        \"text\" : \"And verily, if you ask them: \\\"Who created the heavens and the earth?\\\" Surely, they will say: \\\"Allah (has created them).\\\" Say: \\\"Tell me then, the things that you invoke besides Allah, if Allah intended some harm for me, could they remove His harm, or if He (Allah) intended some mercy for me, could they withhold His Mercy?\\\" Say: \\\"Sufficient for me is Allah; in Him those who trust (i.e. believers) must put their trust.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 39\n        },\n        \"text\" : \"It is Allah Who takes away the souls at the time of their death, and those that die not during their sleep. He keeps those (souls) for which He has ordained death and sends the rest for a term appointed. Verily, in this are signs for a people who think deeply.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 39\n        },\n        \"text\" : \"Have they taken others as intercessors besides Allah? Say: \\\"Even if they have power over nothing whatever and have no intelligence?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 39\n        },\n        \"text\" : \"Say: \\\"To Allah belongs all intercession. His is the Sovereignty of the heavens and the earth, then to Him you shall be brought back.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 39\n        },\n        \"text\" : \"And when Allah Alone is mentioned, the hearts of those who believe not in the Hereafter are filled with disgust (from the Oneness of Allah and when those (whom they obey or worship) besides Him [like all false deities other than Allah, it may be a Messenger like 'Iesa (Jesus) - son of Maryam (Mary), 'Uzair (Ezra), an angel, a pious man, a jinn, or any other creature even idols, graves of religious people, saints, priests, monks, etc.] are mentioned, behold, they rejoice!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 39\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"O Allah! Creator of the heavens and the earth! All-Knower of the Ghaib (unseen) and the seen. You will judge between your slaves about that wherein they used to differ.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 39\n        },\n        \"text\" : \"And those who did wrong (the polytheists and disbelievers in the Oneness of Allah), if they had all that is in earth and therewith as much again, they verily, would offer it to ransom themselves therewith on the Day of Resurrection from the evil torment, and there will become apparent to them from Allah, what they had not been reckoning.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 39\n        },\n        \"text\" : \"When harm touches man, he calls to Us (for help), then when We have (rescued him from that harm and) changed it into a favour from Us, he says: \\\"Only because of knowledge (that I possess) I obtained it.\\\" Nay, it is only a trial, but most of them know not!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 39\n        },\n        \"text\" : \"Verily, those before them said it, yet (all) that they had earned availed them not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 39\n        },\n        \"text\" : \"Do they not know that Allah enlarges the provision for whom He wills, and straitens it (for whom He wills). Verily, in this are signs for the folk who believe!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 39\n        },\n        \"text\" : \"Say: \\\"O 'Ibadi (My slaves) who have transgressed against themselves (by committing evil deeds and sins)! Despair not of the Mercy of Allah, verily Allah forgives all sins. Truly, He is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 39\n        },\n        \"text\" : \"Lest a person should say: \\\"Alas, my grief that I was undutiful to Allah (i.e. I have not done what Allah has ordered me to do), and I was indeed among those who mocked [at the truth! i.e. La ilaha ill-Allah (none has the right to be worshipped but Allah), the Quran, and Muhammad SAW and at the faithful believers, etc.]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 39\n        },\n        \"text\" : \"Or (lest) he should say: \\\"If only Allah had guided me, I should indeed have been among the Muttaqun (pious and righteous persons - see V. 2:2).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 39\n        },\n        \"text\" : \"And on the Day of Resurrection you will see those who lied against Allah (i.e. attributed to Him sons, partners, etc.) their faces will be black. Is there not in Hell an abode for the arrogant ones?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 39\n        },\n        \"text\" : \"And Allah will deliver those who are the Muttaqun (pious - see V. 2:2) to their places of success (Paradise). Evil shall touch them not, nor shall they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 39\n        },\n        \"text\" : \"Allah is the Creator of all things, and He is the Wakil (Trustee, Disposer of affairs, Guardian, etc.) over all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 39\n        },\n        \"text\" : \"To Him belong the keys of the heavens and the earth. And those who disbelieve in the Ayat (proofs, evidences, verses, signs, revelations, etc.) of Allah, such are they who will be the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 39\n        },\n        \"text\" : \"Say (O Muhammad SAW to the polytheists, etc.): \\\"Do you order me to worship other than Allah O you fools?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 39\n        },\n        \"text\" : \"And indeed it has been revealed to you (O Muhammad SAW), as it was to those (Allah's Messengers) before you: \\\"If you join others in worship with Allah, (then) surely (all) your deeds will be in vain, and you will certainly be among the losers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 39\n        },\n        \"text\" : \"Nay! But worship Allah (Alone and none else), and be among the grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 39\n        },\n        \"text\" : \"They made not a just estimate of Allah such as is due to Him. And on the Day of Resurrection the whole of the earth will be grasped by His Hand and the heavens will be rolled up in His Right Hand. Glorified is He, and High is He above all that they associate as partners with Him!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 39\n        },\n        \"text\" : \"And the Trumpet will be blown, and all who are in the heavens and all who are on the earth will swoon away, except him whom Allah will. Then it will blown a second time and behold, they will be standing, looking on (waiting).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 39\n        },\n        \"text\" : \"And the earth will shine with the light of its Lord (Allah, when He will come to judge among men) and the Book will be placed (open) and the Prophets and the witnesses will be brought forward, and it will be judged between them with truth, and they will not be wronged.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 39\n        },\n        \"text\" : \"And they will say: \\\"All the praises and thanks be to Allah Who has fulfilled His Promise to us and has made us inherit (this) land. We can dwell in Paradise where we will; how excellent a reward for the (pious good) workers!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 39\n        },\n        \"text\" : \"And you will see the angels surrounding the Throne (of Allah) from all round, glorifying the praises of their Lord (Allah). And they (all the creatures) will be judged with truth, and it will be said. All the praises and thanks be to Allah, the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 40\n        },\n        \"text\" : \"Ha-Mim. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 40\n        },\n        \"text\" : \"The revelation of the Book (this Quran) is from Allah the All-Mighty, the All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 40\n        },\n        \"text\" : \"None disputes in the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah but those who disbelieve. So let not their ability of going about here and there through the land (for their purposes) deceive you [O Muhammad SAW, their ultimate end will be the Fire of Hell]!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 40\n        },\n        \"text\" : \"Those (angels) who bear the Throne (of Allah) and those around it glorify the praises of their Lord, and believe in Him, and ask forgiveness for those who believe (in the Oneness of Allah) (saying): \\\"Our Lord! You comprehend all things in mercy and knowledge, so forgive those who repent and follow Your Way, and save them from the torment of the blazing Fire!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 40\n        },\n        \"text\" : \"\\\"Our Lord! And make them enter the 'Adn (Eden) Paradise (everlasting Gardens) which you have promised them, and to the righteous among their fathers, their wives, and their offspring! Verily, You are the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 40\n        },\n        \"text\" : \"Those who disbelieve will be addressed (at the time of entering into the Fire): \\\"Allah's aversion was greater towards you (in the worldly life when you used to reject the Faith) than your aversion towards one another (now in the Fire of Hell, as you are now enemies to one another), when you were called to the Faith but you used to refuse.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 40\n        },\n        \"text\" : \"(It will be said): \\\"This is because, when Allah Alone was invoked (in worship, etc.) you disbelieved, but when partners were joined to Him, you believed! So the judgement is only with Allah, the Most High, the Most Great!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 40\n        },\n        \"text\" : \"It is He, Who shows you His Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) and sends down (rain with which grows) provision for you from the sky. And none remembers but those who turn (to Allah) in obedience and in repentance (by begging His Pardon and by worshipping and obeying Him Alone and none else).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 40\n        },\n        \"text\" : \"So, call you (O Muhammad SAW and the believers) upon (or invoke) Allah making (your) worship pure for Him (Alone) (by worshipping none but Him and by doing religious deeds sincerely for Allah's sake only and not to show-off and not to set up rivals with Him in worship). However much the disbelievers (in the Oneness of Allah) may hate (it).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 40\n        },\n        \"text\" : \"(He is Allah) Owner of High Ranks and Degrees, the Owner of the Throne. He sends the Inspiration by His Command to any of His slaves He wills, that he (the person who receives inspiration) may warn (men) of the Day of Mutual Meeting (i.e. The Day of Resurrection).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 40\n        },\n        \"text\" : \"The Day when they will (all) come out, nothing of them will be hidden from Allah. Whose is the kingdom this Day? (Allah Himself will reply to His Question): It is Allah's the One, the Irresistible!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 40\n        },\n        \"text\" : \"This Day shall every person be recompensed for what he earned. No injustice (shall be done to anybody). Truly, Allah is Swift in reckoning.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 40\n        },\n        \"text\" : \"Allah knows the fraud of the eyes, and all that the breasts conceal.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 40\n        },\n        \"text\" : \"And Allah judges with truth, while those to whom they invoke besides Him, cannot judge anything. Certainly, Allah! He is the All-Hearer, the All-Seer.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 40\n        },\n        \"text\" : \"Have they not travelled in the land and seen what was the end of those who were before them? They were superior to them in strength, and in the traces (which they left) in the land. But Allah seized them with punishment for their sins. And none had they to protect them from Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 40\n        },\n        \"text\" : \"That was because there came to them their Messengers with clear evidences, proofs and signs but they disbelieved (in them). So Allah seized them with punishment. Verily, He is All-Strong, Severe in punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 40\n        },\n        \"text\" : \"To Fir'aun (Pharaoh), Haman and Qarun (Korah), but they called (him): \\\"A sorcerer, a liar!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 40\n        },\n        \"text\" : \"Fir'aun (Pharaoh) said: \\\"Leave me to kill Musa (Moses), and let him call his Lord (to stop me from killing him)! I fear that he may change your religion, or that he may cause mischief to appear in the land!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 40\n        },\n        \"text\" : \"And a believing man of Fir'aun's (Pharaoh) family, who hid his faith said: \\\"Would you kill a man because he says: My Lord is Allah, and he has come to you with clear signs (proofs) from your Lord? And if he is a liar, upon him will be (the sin of) his lie; but if he is telling the truth, then some of that (calamity) wherewith he threatens you will befall on you.\\\" Verily, Allah guides not one who is a Musrif (a polytheist, or a murderer who shed blood without a right, or those who commit great sins, oppressor, transgressor), a liar!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 40\n        },\n        \"text\" : \"\\\"O my people! Yours is the kingdom this day, you are uppermost in the land. But who will save us from the Torment of Allah, should it befall us?\\\" Fir'aun (Pharaoh) said: \\\"I show you only that which I see (correct), and I guide you only to the path of right policy!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 40\n        },\n        \"text\" : \"\\\"Like the fate of the people of Nuh (Noah), and 'Ad, and Thamud and those who came after them. And Allah wills no injustice for (His) slaves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 40\n        },\n        \"text\" : \"\\\"And, O my people! Verily! I fear for you the Day when there will be mutual calling (between the people of Hell and of Paradise).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 40\n        },\n        \"text\" : \"A Day when you will turn your backs and flee having no protector from Allah, And whomsoever Allah sends astray, for him there is no guide.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 40\n        },\n        \"text\" : \"And indeed Yusuf (Joseph) did come to you, in times gone by, with clear signs, but you ceased not to doubt in that which he did bring to you, till when he died you said: \\\"No Messenger will Allah send after him.\\\" Thus Allah leaves astray him who is a Musrif (a polytheist, oppressor, a criminal, sinner who commit great sins) and a Murtab (one who doubts Allah's Warning and His Oneness).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 40\n        },\n        \"text\" : \"Those who dispute about the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah, without any authority that has come to them, it is greatly hateful and disgusting to Allah and to those who believe. Thus does Allah seal up the heart of every arrogant, tyrant. (So they cannot guide themselves to the Right Path).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 40\n        },\n        \"text\" : \"And the man who believed said: \\\"O my people! Follow me, I will guide you to the way of right conduct [i.e. guide you to Allah's religion of Islamic Monotheism with which Musa (Moses) has been sent].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 40\n        },\n        \"text\" : \"\\\"Whosoever does an evil deed, will not be requited except the like thereof, and whosoever does a righteous deed, whether male or female and is a true believer (in the Oneness of Allah), such will enter Paradise, where they will be provided therein (with all things in abundance) without limit.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 40\n        },\n        \"text\" : \"\\\"And O my people! How is it that I call you to salvation while you call me to the Fire!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 40\n        },\n        \"text\" : \"\\\"You invite me to disbelieve in Allah (and in His Oneness), and to join partners in worship with Him; of which I have no knowledge, and I invite you to the All-Mighty, the Oft-Forgiving!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 40\n        },\n        \"text\" : \"\\\"No doubt you call me to (worship) one who cannot grant (me) my request (or respond to my invocation) in this world or in the Hereafter. And our return will be to Allah, and Al-Musrifun (i.e. polytheists and arrogants, those who commit great sins, the transgressors of Allah's set limits)! They shall be the dwellers of the Fire!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 40\n        },\n        \"text\" : \"\\\"And you will remember what I am telling you, and my affair I leave it to Allah. Verily, Allah is the All-Seer of (His) slaves.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 40\n        },\n        \"text\" : \"So Allah saved him from the evils that they plotted (against him), while an evil torment encompassed Fir'aun's (Pharaoh) people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 40\n        },\n        \"text\" : \"Those who were arrogant will say: \\\"We are all (together) in this (Fire)! Verily Allah has judged between (His) slaves!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 40\n        },\n        \"text\" : \"And those in the Fire will say to the keepers (angels) of Hell: \\\"Call upon your Lord to lighten for us the torment for a day!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 40\n        },\n        \"text\" : \"They will say: \\\"Did there not come to you, your Messengers with (clear) evidences and signs? They will say: \\\"Yes.\\\" They will reply: \\\"Then call (as you like)! And the invocation of the disbelievers is nothing but in error!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 40\n        },\n        \"text\" : \"Verily, We will indeed make victorious Our Messengers and those who believe (in the Oneness of Allah Islamic Monotheism) in this world's life and on the Day when the witnesses will stand forth, (i.e. Day of Resurrection),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 40\n        },\n        \"text\" : \"The Day when their excuses will be of no profit to Zalimun (polytheists, wrong-doers and disbelievers in the Oneness of Allah). Theirs will be the curse, and theirs will be the evil abode (i.e. painful torment in Hell-fire).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 40\n        },\n        \"text\" : \"So be patient (O Muhammad SAW). Verily, the Promise of Allah is true, and ask forgiveness for your fault, and glorify the praises of your Lord in the Ashi (i.e. the time period after the midnoon till sunset) and in the Ibkar (i.e. the time period from early morning or sunrise till before midnoon) [it is said that, that means the five compulsory congregational Salat (prayers) or the 'Asr and Fajr prayers].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 40\n        },\n        \"text\" : \"Verily, those who dispute about the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah, without any authority having come to them, there is nothing else in their breasts except pride [to accept you (Muhammad SAW) as a Messenger of Allah and to obey you]. They will never have it (i.e. Prophethood which Allah has bestowed upon you). So seek refuge in Allah (O Muhammad SAW from the arrogants). Verily, it is He Who is the All-Hearer, the All-Seer.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 40\n        },\n        \"text\" : \"And not equal are the blind and those who see, nor are (equal) those who believe (in the Oneness of Allah Islamic Monotheism), and do righteous good deeds, and those who do evil. Little do you remember!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 40\n        },\n        \"text\" : \"Allah, it is He Who has made the night for you that you may rest therein and the day for you to see. Truly, Allah is full of Bounty to mankind, yet most of mankind give no thanks.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 40\n        },\n        \"text\" : \"That is Allah, your Lord, the Creator of all things, La ilaha illa Huwa (none has the right to be worshipped but He), where then you are turning away (from Allah, by worshipping others instead of Him)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 40\n        },\n        \"text\" : \"Thus were turned away those who used to deny the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 40\n        },\n        \"text\" : \"Allah, it is He Who has made for you the earth as a dwelling place and the sky as a canopy, and has given you shape and made your shapes good (looking) and has provided you with good things. That is Allah, your Lord, then blessed be Allah, the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 40\n        },\n        \"text\" : \"He is the Ever Living, La ilaha illa Huwa (none has the right to be worshipped but He), so invoke Him making your worship pure for Him Alone (by worshipping Him Alone, and none else, and by doing righteous deeds sincerely for Allah's sake only, and not to show off, and not to set up rivals with Him in worship). All the praises and thanks be to Allah, the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 40\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"I have been forbidden to worship those whom you worship besides Allah, since there have come to me evidences from my Lord, and I am commanded to submit (in Islam) to the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 40\n        },\n        \"text\" : \"See you not those who dispute about the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) of Allah? How are they turning away (from the truth, i.e. Islamic Monotheism to the falsehood of polytheism)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 40\n        },\n        \"text\" : \"Those who deny the Book (this Quran), and that with which We sent Our Messengers (i.e. to worship none but Allah Alone sincerely, and to reject all false deities and to confess resurrection after the death for recompense) they will come to know (when they will be cast into the Fire of Hell).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 40\n        },\n        \"text\" : \"When iron collars will be rounded over their necks, and the chains, they shall be dragged along.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 40\n        },\n        \"text\" : \"Then it will be said to them: \\\"Where are (all) those whom you used to join in worship as partners\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 40\n        },\n        \"text\" : \"\\\"Besides Allah\\\" They will say: \\\"They have vanished from us: Nay, we did not invoke (worship) anything before.\\\" Thus Allah leads astray the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 40\n        },\n        \"text\" : \"That was because you had been exulting in the earth without any right (by worshipping others instead of Allah and by committing crimes), and that you used to rejoice extremely (in your error).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 40\n        },\n        \"text\" : \"So be patient (O Muhammad SAW), verily, the Promise of Allah is true, and whether We show you (O Muhammad SAW in this world) some part of what We have promised them, or We cause you to die, then it is to Us they all shall be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 40\n        },\n        \"text\" : \"And, indeed We have sent Messengers before you (O Muhammad SAW); of some of them We have related to you their story and of some We have not related to you their story, and it was not given to any Messenger that he should bring a sign except by the Leave of Allah. So, when comes the Commandment of Allah, the matter will be decided with truth, and the followers of falsehood will then be lost.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 40\n        },\n        \"text\" : \"Allah, it is He Who has made cattle for you, that you may ride on some of them and of some you eat.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 40\n        },\n        \"text\" : \"And He shows you His Signs and Proofs (of His Oneness in all the above mentioned things). Which, then of the Signs and Proofs of Allah do you deny?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 40\n        },\n        \"text\" : \"Have they not travelled through the earth and seen what was the end of those before them? They were more numerous than them and mightier in strength, and in the traces (they have left behind them) in the land, yet all that they used to earn availed them not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 40\n        },\n        \"text\" : \"So when they saw Our punishment, they said: \\\"We believe in Allah Alone and reject (all) that we used to associate with Him as (His) partners.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 40\n        },\n        \"text\" : \"Then their Faith (in Islamic Monotheism) could not avail them when they saw Our punishment. (Like) this has been the way of Allah in dealing with His slaves. And there the disbelievers lost utterly (when Our Torment covered them).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 41\n        },\n        \"text\" : \"Ha-Mim. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings.]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 41\n        },\n        \"text\" : \"A revelation from Allah, the Most Beneficent, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 41\n        },\n        \"text\" : \"Giving glad tidings [of Paradise to the one who believes in the Oneness of Allah (i.e. Islamic Monotheism) and fears Allah much (abstains from all kinds of sins and evil deeds) and loves Allah much (performing all kinds of good deeds which He has ordained)], and warning (of punishment in the Hell Fire to the one who disbelieves in the Oneness of Allah), but most of them turn away, so they listen not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 41\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"I am only a human being like you. It is inspired in me that your Ilah (God) is One Ilah (God - Allah), therefore take Straight Path to Him (with true Faith Islamic Monotheism) and obedience to Him, and seek forgiveness of Him. And woe to Al-Mushrikun (the disbelievers in the Oneness of Allah, polytheists, idolaters, etc. - see V. 2:105).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 41\n        },\n        \"text\" : \"Truly, those who believe (in the Oneness of Allah Islamic Monotheism, and in His Messenger Muhammad SAW) and do righteous good deeds, for them will be an endless reward that will never stop (i.e. Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 41\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Do you verily disbelieve in Him Who created the earth in two Days and you set up rivals (in worship) with Him? That is the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 41\n        },\n        \"text\" : \"He placed therein (i.e. the earth) firm mountains from above it, and He blessed it, and measured therein its sustenance (for its dwellers) in four Days equal (i.e. all these four 'days' were equal in the length of time), for all those who ask (about its creation).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 41\n        },\n        \"text\" : \"Then He completed and finished from their creation (as) seven heavens in two Days and He made in each heaven its affair. And We adorned the nearest (lowest) heaven with lamps (stars) to be an adornment as well as to guard (from the devils by using them as missiles against the devils). Such is the Decree of Him the All-Mighty, the All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 41\n        },\n        \"text\" : \"When the Messengers came to them, from before them and behind them (saying): \\\"Worship none but Allah\\\" They said: \\\"If our Lord had so willed, He would surely have sent down the angels. So indeed! We disbelieve in that with which you have been sent.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 41\n        },\n        \"text\" : \"As for 'Ad, they were arrogant in the land without right, and they said: \\\"Who is mightier than us in strength?\\\" See they not that Allah, Who created them was mightier in strength than them. And they used to deny Our Ayat (proofs, evidences, verses, lessons, revelations, etc.)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 41\n        },\n        \"text\" : \"And We saved those who believed and used to fear Allah, keep their duty to Him and avoid evil.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 41\n        },\n        \"text\" : \"And (remember) the Day that the enemies of Allah will be gathered to the Fire, so they will be collected there (the first and the last).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 41\n        },\n        \"text\" : \"And they will say to their skins, \\\"Why do you testify against us?\\\" They will say: \\\"Allah has caused us to speak, as He causes all things to speak, and He created you the first time, and to Him you are made to return.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 41\n        },\n        \"text\" : \"And you have not been hiding against yourselves, lest your ears, and your eyes, and your skins testify against you, but you thought that Allah knew not much of what you were doing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 41\n        },\n        \"text\" : \"And We have assigned them (devils) intimate companions (in this world), who have made fair-seeming to them, what was before them (evil deeds which they were doing in the present worldly life and disbelief in the Reckoning and the Resurrection, etc.) and what was behind them (denial of the matters in the coming life of the Hereafter as regards punishment or reward, etc.). And the Word (i.e. the torment) is justified against them as it was justified against those who were among the previous generations of jinns and men that had passed away before them. Indeed they (all) were the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 41\n        },\n        \"text\" : \"But surely, We shall cause those who disbelieve to taste a severe torment, and certainly, We shall requite them the worst of what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 41\n        },\n        \"text\" : \"That is the recompense of the enemies of Allah: The Fire, therein will be for them the eternal home, a (deserving) recompense for that they used to deny Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 41\n        },\n        \"text\" : \"And those who disbelieve will say: \\\"Our Lord! Show us those among jinns and men who led us astray, we shall crush them under our feet, so that they become the lowest.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 41\n        },\n        \"text\" : \"Verily, those who say: \\\"Our Lord is Allah (Alone),\\\" and then they Istaqamu, on them the angels will descend (at the time of their death) (saying): \\\"Fear not, nor grieve! But receive the glad tidings of Paradise which you have been promised!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 41\n        },\n        \"text\" : \"\\\"We have been your friends in the life of this world and are (so) in the Hereafter. Therein you shall have (all) that your inner-selves desire, and therein you shall have (all) for which you ask for.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 41\n        },\n        \"text\" : \"\\\"An entertainment from (Allah), the Oft-Forgiving, Most Merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 41\n        },\n        \"text\" : \"And who is better in speech than he who [says: \\\"My Lord is Allah (believes in His Oneness),\\\" and then stands straight (acts upon His Order), and] invites (men) to Allah's (Islamic Monotheism), and does righteous deeds, and says: \\\"I am one of the Muslims.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 41\n        },\n        \"text\" : \"The good deed and the evil deed cannot be equal. Repel (the evil) with one which is better (i.e. Allah ordered the faithful believers to be patient at the time of anger, and to excuse those who treat them badly), then verily! he, between whom and you there was enmity, (will become) as though he was a close friend.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 41\n        },\n        \"text\" : \"And if an evil whisper from Shaitan (Satan) tries to turn you away (O Muhammad SAW) (from doing good, etc.), then seek refuge in Allah. Verily, He is the All-Hearer, the All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 41\n        },\n        \"text\" : \"And from among His Signs are the night and the day, and the sun and the moon. Prostrate not to the sun nor to the moon, but prostrate to Allah Who created them, if you (really) worship Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 41\n        },\n        \"text\" : \"And among His Signs (in this), that you see the earth barren, but when We send down water (rain) to it, it is stirred to life and growth (of vegetations). Verily, He Who gives it life, surely, (He) is Able to give life to the dead (on the Day of Resurrection). Indeed! He is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 41\n        },\n        \"text\" : \"Verily, those who turn away from Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc. by attacking, distorting and denying them), are not hidden from Us. Is he who is cast into the Fire better or he who comes secure on the Day of Resurrection? Do what you will. Verily! He is All-Seer of what you do (this is a severe threat to the disbelievers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 41\n        },\n        \"text\" : \"Verily, those who disbelieved in the Reminder (i.e. the Quran) when it came to them (shall receive the punishment). And verily, it is an honourable respected Book (because it is Allah's Speech, and He has protected it from corruption, etc.). (See V. 15:9]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 41\n        },\n        \"text\" : \"Falsehood cannot come to it from before it or behind it (it is) sent down by the All-Wise, Worthy of all praise (Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 41\n        },\n        \"text\" : \"And if We had sent this as a Quran in a foreign language other than Arabic, they would have said: \\\"Why are not its Verses explained in detail (in our language)? What! (A Book) not in Arabic and (the Messenger) an Arab?\\\" Say: \\\"It is for those who believe, a guide and a healing. And as for those who disbelieve, there is heaviness (deafness) in their ears, and it (the Quran) is blindness for them. They are those who are called from a place far away (so they neither listen nor understand).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 41\n        },\n        \"text\" : \"Whosoever does righteous good deed it is for (the benefit of) his ownself, and whosoever does evil, it is against his ownself, and your Lord is not at all unjust to (His) slaves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 41\n        },\n        \"text\" : \"(The learned men) refer to Him (Alone) the knowledge of the Hour. No fruit comes out of its sheath, nor does a female conceive (within her womb), nor brings forth (young), except by His Knowledge. And on the Day when He will call unto them (polytheists) (saying): \\\"Where are My (so-called) partners (whom you did invent)?\\\" They will say: \\\"We inform You that none of us bears witness to it (that they are Your partners)!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 41\n        },\n        \"text\" : \"And those whom they used to invoke before will fail them, and they will perceive that they have no place of refuge (from Allah's punishment).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 41\n        },\n        \"text\" : \"Man (the disbeliever) does not get tired of asking good (things from Allah), but if an evil touches him, then he gives up all hope and is lost in despair.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 41\n        },\n        \"text\" : \"And truly, if We give him a taste of mercy from us, after some adversity (severe poverty or disease, etc.) has touched him, he is sure to say: \\\"This is for me (due to my merit), I think not that the Hour will be established. But if I am brought back to my Lord, Surely, there will be for me the best (wealth, etc.) with Him. Then, We verily, will show to the disbelievers what they have done and We shall make them taste a severe torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 41\n        },\n        \"text\" : \"Say: \\\"Tell me, if it (the Quran) is from Allah, and you disbelieve in it, who is more astray than one who is in opposition far away (from Allah's Right Path and His obedience).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 41\n        },\n        \"text\" : \"We will show them Our Signs in the universe, and in their ownselves, until it becomes manifest to them that this (the Quran) is the truth. Is it not sufficient in regard to your Lord that He is a Witness over all things?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 41\n        },\n        \"text\" : \"Verily! They are in doubt concerning the Meeting with their Lord? (i.e. Resurrection after their deaths, and their return to their Lord). Verily! He it is Who is surrounding all things!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 42\n        },\n        \"text\" : \"'Ain-Sin-Qaf. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 42\n        },\n        \"text\" : \"Likewise Allah, the All-Mighty, the All-Wise inspires you (O Muhammad SAW) as (He inspired) those before you.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 42\n        },\n        \"text\" : \"To Him belongs all that is in the heavens and all that is in the earth, and He is the Most High, the Most Great.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 42\n        },\n        \"text\" : \"Nearly the heavens might rent asunder from above them (by His Majesty), and the angels glorify the praises of their Lord, and ask for forgiveness for those on the earth, verily, Allah is the Oft-Forgiving, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 42\n        },\n        \"text\" : \"And as for those who take as Auliya' (guardians, supporters, helpers, protectors, etc.) others besides Him [i.e. they take false deities other than Allah (as) protectors, and they worship them] Allah is Hafiz (Protector) over them (i.e. takes care of their deeds and will recompense them), and you (O Muhammad SAW) are not a Wakil (guardian or a disposer of their affairs) over them (to protect their deeds, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 42\n        },\n        \"text\" : \"And thus We have inspired unto you (O Muhammad SAW) a Quran (in Arabic) that you may warn the Mother of the Towns (Makkah) and all around it. And warn of the Day of Assembling, of which there is no doubt, when a party will be in Paradise (those who believed in Allah and followed what Allah's Messenger SAW brought them) and a party in the blazing Fire (Hell) (those who disbelieved in Allah and followed not what Allah's Messenger SAW brought them).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 42\n        },\n        \"text\" : \"And if Allah had willed, He could have made them one nation, but He admits whom He wills to His Mercy. And the Zalimun (polytheists and wrong-doers, etc.) will have neither a Wali (protector) nor a helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 42\n        },\n        \"text\" : \"Or have they taken (for worship) Auliya' (guardians, supporters, helpers, protectors, etc.) besides Him? But Allah, He Alone is the Wali (Protector, etc.). And it is He Who gives life to the dead, and He is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 42\n        },\n        \"text\" : \"And in whatsoever you differ, the decision thereof is with Allah (He is the ruling Judge). (And say O Muhammad SAW to these polytheists:) Such is Allah, my Lord in Whom I put my trust, and to Him I turn in all of my affairs and in repentance.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 42\n        },\n        \"text\" : \"The Creator of the heavens and the earth. He has made for you mates from yourselves, and for the cattle (also) mates. By this means He creates you (in the wombs). There is nothing like unto Him, and He is the All-Hearer, the All-Seer.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 42\n        },\n        \"text\" : \"To Him belong the keys of the heavens and the earth, He enlarges provision for whom He wills, and straitens (it for whom He wills). Verily! He is the All-Knower of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 42\n        },\n        \"text\" : \"He (Allah) has ordained for you the same religion (Islam) which He ordained for Nuh (Noah), and that which We have inspired in you (O Muhammad SAW), and that which We ordained for Ibrahim (Abraham), Musa (Moses) and 'Iesa (Jesus) saying you should establish religion (i.e. to do what it orders you to do practically), and make no divisions in it (religion) (i.e. various sects in religion). Intolerable for the Mushrikun, is that to which you (O Muhammad SAW) call them. Allah chooses for Himself whom He wills, and guides unto Himself who turns to Him in repentance and in obedience.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 42\n        },\n        \"text\" : \"And they divided not till after knowledge had come to them, through selfish transgression between themselves. And had it not been for a Word that went forth before from your Lord for an appointed term, the matter would have been settled between them. And verily, those who were made to inherit the Scripture [i.e. the Taurah (Torah) and the Injeel (Gospel)] after them (i.e. Jews and Christians) are in grave doubt concerning it (i.e. Allah's true religion Islam or the Quran).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 42\n        },\n        \"text\" : \"So unto this (religion of Islam, alone and this Quran) then invite (people) (O Muhammad SAW), and Istaqim [(i.e. stand firm and straight on Islamic Monotheism by performing all that is ordained by Allah (good deeds, etc.), and by abstaining from all that is forbidden by Allah (sins and evil deeds, etc.)], as you are commanded, and follow not their desires but say: \\\"I believe in whatsoever Allah has sent down of the Book [all the holy Books, this Quran and the Books of the old from the Taurat (Torah), or the Injeel (Gospel) or the Pages of Ibrahim (Abraham)] and I am commanded to do justice among you, Allah is our Lord and your Lord. For us our deeds and for you your deeds. There is no dispute between us and you. Allah will assemble us (all), and to Him is the final return.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 42\n        },\n        \"text\" : \"And those who dispute concerning Allah (His Religion of Islamic Monotheism, with which Muhammad SAW has been sent), after it has been accepted (by the people), of no use is their dispute before their Lord, and on them is wrath, and for them will be a severe torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 42\n        },\n        \"text\" : \"It is Allah Who has sent down the Book (the Quran) in truth, and the Balance (i.e. to act justly). And what can make you know that perhaps the Hour is close at hand?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 42\n        },\n        \"text\" : \"Allah is very Gracious and Kind to His slaves. He gives provisions to whom He wills. And He is the All-Strong, the All-Mighty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 42\n        },\n        \"text\" : \"Or have they partners with Allah (false gods), who have instituted for them a religion which Allah has not allowed. And had it not been for a decisive Word (gone forth already), the matter would have been judged between them. And verily, for the Zalimun (polytheists and wrong-doers), there is a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 42\n        },\n        \"text\" : \"You will see (on the Day of Resurrection), the Zalimun (polytheists and wrong-doers, etc.) fearful of that which they have earned, and it (Allah's Torment) will surely befall them, while those who believe (in the Oneness of Allah Islamic Monotheism) and do righteous deeds (will be) in the flowering meadows of the Gardens (Paradise), having what they wish from their Lord. That is the supreme Grace, (Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 42\n        },\n        \"text\" : \"That is (the Paradise) whereof Allah gives glad tidings to His slaves who believe (in the Oneness of Allah Islamic Monotheism) and do righteous good deeds. Say (O Muhammad SAW): \\\"No reward do I ask of you for this except to be kind to me for my kinship with you.\\\" And whoever earns a good righteous deed, We shall give him an increase of good in respect thereof. Verily, Allah is Oft-Forgiving, Most Ready to appreciate (the deeds of those who are obedient to Him).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 42\n        },\n        \"text\" : \"Or say they: \\\"He has invented a lie against Allah?\\\" If Allah willed, He could have sealed your heart (so that you forget all that you know of the Quran). And Allah wipes out falsehood, and establishes the truth (Islam) by His Word (this Qur'an). Verily, He knows well what (the secrets) are in the breasts (of mankind).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 42\n        },\n        \"text\" : \"And He answers (the invocation of) those who believe (in the Oneness of Allah Islamic Monotheism) and do righteous good deeds, and gives them increase of His Bounty. And as for the disbelievers, theirs will be a severe torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 42\n        },\n        \"text\" : \"And if Allah were to enlarge the provision for His slaves, they would surely rebel in the earth, but He sends down by measure as He wills. Verily! He is in respect of His slaves, the Well-Aware, the All-Seer (of things that benefit them).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 42\n        },\n        \"text\" : \"And He it is Who sends down the rain after they have despaired, and spreads abroad His Mercy. And He is the Wali (Helper, Supporter, Protector, etc.), Worthy of all Praise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 42\n        },\n        \"text\" : \"And among His Ayat (proofs, evidences, lessons, signs, etc.) is the creation of the heavens and the earth, and whatever moving (living) creatures He has dispersed in them both. And He is All-Potent over their assembling (i.e. resurrecting them on the Day of Resurrection after their death, and dispersion of their bodies) whenever He will.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 42\n        },\n        \"text\" : \"And whatever of misfortune befalls you, it is because of what your hands have earned. And He pardons much. (See the Quran Verse 35:45).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 42\n        },\n        \"text\" : \"And you cannot escape from Allah (i.e. His Punishment) in the earth, and besides Allah you have neither any Wali (guardian or a protector) nor any helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 42\n        },\n        \"text\" : \"And those who dispute (polytheists, etc. with Our Messenger Muhammad SAW) as regards Our Ayat (proofs, signs, verses, etc. of Islamic Monotheism) may know that there is no place of refuge for them (from Allah's punishment).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 42\n        },\n        \"text\" : \"So whatever you have been given is but a passing enjoyment for this worldly life, but that which is with Allah (Paradise) is better and more lasting for those who believe (in the Oneness of Allah Islamic Monotheism) and put their trust in their Lord (concerning all of their affairs).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 42\n        },\n        \"text\" : \"And those who answer the Call of their Lord [i.e. to believe that He is the only One Lord (Allah), and to worship none but Him Alone], and perform As-Salat (Iqamat-as-Salat), and who (conduct) their affairs by mutual consultation, and who spend of what We have bestowed on them;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 42\n        },\n        \"text\" : \"The recompense for an evil is an evil like thereof, but whoever forgives and makes reconciliation, his reward is due from Allah. Verily, He likes not the Zalimun (oppressors, polytheists, and wrong-doers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 42\n        },\n        \"text\" : \"And verily, whosoever shows patience and forgives that would truly be from the things recommended by Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 42\n        },\n        \"text\" : \"And whomsoever Allah sends astray, for him there is no Wali (protector) after Him. And you will see the Zalimun (polytheists, wrong-doers, oppressors, etc.) when they behold the torment, they will say: \\\"Is there any way of return (to the world)?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 42\n        },\n        \"text\" : \"And you will see them brought forward to it (Hell) made humble by disgrace, (and) looking with stealthy glance. And those who believe will say: \\\"Verily, the losers are they who lose themselves and their families on the Day of Resurrection. Verily, the Zalimun [i.e. Al-Kafirun (disbelievers in Allah, in His Oneness and in His Messenger SAW, polytheists, wrong-doers, etc.)] will be in a lasting torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 42\n        },\n        \"text\" : \"And they will have no Auliya' (protectors) to help them other than Allah. And he whom Allah sends astray, for him there is no way.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 42\n        },\n        \"text\" : \"Answer the Call of your Lord (i.e. accept the Islamic Monotheism, O mankind, and jinns) before there comes from Allah a Day which cannot be averted. You will have no refuge on that Day nor there will be for you any denying (of your crimes as they are all recorded in the Book of your deeds).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 42\n        },\n        \"text\" : \"But if they turn away (O Muhammad SAW from the Islamic Monotheism, which you have brought to them). We have not sent you (O Muhammad SAW) as a Hafiz (protector) over them (i.e. to take care of their deeds and to recompense them). Your duty is to convey (the Message). And verily, when We cause man to taste of Mercy from Us, he rejoices thereat, but when some ill befalls them because of the deeds which their hands have sent forth, then verily, man (becomes) ingrate!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 42\n        },\n        \"text\" : \"To Allah belongs the kingdom of the heavens and the earth. He creates what He wills. He bestows female (offspring) upon whom He wills, and bestows male (offspring) upon whom He wills.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 42\n        },\n        \"text\" : \"Or He bestows both males and females, and He renders barren whom He wills. Verily, He is the All-Knower and is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 42\n        },\n        \"text\" : \"It is not given to any human being that Allah should speak to him unless (it be) by Inspiration, or from behind a veil, or (that) He sends a Messenger to reveal what He wills by His Leave. Verily, He is Most High, Most Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 42\n        },\n        \"text\" : \"And thus We have sent to you (O Muhammad SAW) Ruhan (an Inspiration, and a Mercy) of Our Command. You knew not what is the Book, nor what is Faith? But We have made it (this Quran) a light wherewith We guide whosoever of Our slaves We will. And verily, you (O Muhammad SAW) are indeed guiding (mankind) to the Straight Path (i.e. Allah's religion of Islamic Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 42\n        },\n        \"text\" : \"The Path of Allah, to Whom belongs all that is in the heavens and all that is in the earth. Verily, all the matters at the end go to Allah (for decision).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 43\n        },\n        \"text\" : \"Ha-Mim. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 43\n        },\n        \"text\" : \"Shall We then (warn you not and) take away the Reminder (this Quran) from you, because you are a people Musrifun\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 43\n        },\n        \"text\" : \"And indeed if you ask them, \\\"Who has created the heavens and the earth?\\\" They will surely say: \\\"The All-Mighty, the All-Knower created them.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 43\n        },\n        \"text\" : \"And Who has created all the pairs and has appointed for you ships and cattle on which you ride,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 43\n        },\n        \"text\" : \"And if one of them is informed of the news of (the birth of) that which he set forth as a parable to the Most Beneficent (Allah) (i.e. of a girl), his face becomes dark, gloomy, and he is filled with grief!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 43\n        },\n        \"text\" : \"(Do they then like for Allah) a creature who is brought up in adornments (wearing silk and gold ornaments, i.e. women), and in dispute cannot make herself clear?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 43\n        },\n        \"text\" : \"And they make the angels who themselves are slaves to the Most Beneficent (Allah) females. Did they witness their creation? Their evidence will be recorded, and they will be questioned!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 43\n        },\n        \"text\" : \"And they said: \\\"If it had been the Will of the Most Beneficent (Allah), we should not have worshipped them (false deities).\\\" They have no knowledge whatsoever of that. They do nothing but lie!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 43\n        },\n        \"text\" : \"\\\"Except Him (i.e. I worship none but Allah Alone) Who did create me, and verily, He will guide me.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 43\n        },\n        \"text\" : \"And he made it [i.e. La ilaha ill-Allah (none has the right to be worshipped but Allah Alone)] a Word lasting among his offspring (True Monotheism), that they may turn back (i.e. to repent to Allah or receive admonition).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 43\n        },\n        \"text\" : \"And were it not that all mankind would have become of one community (all disbelievers, desiring worldly life only), We would have provided for those who disbelieve in the Most Beneficent (Allah), silver roofs for their houses, and elevators (and stair-ways, etc. of silver) whereby they ascend,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 43\n        },\n        \"text\" : \"And adornments of gold. Yet all this (i.e. the roofs, doors, stairs, elevators, thrones etc. of their houses) would have been nothing but an enjoyment of this world. And the Hereafter with your Lord is only for the Muttaqun.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 43\n        },\n        \"text\" : \"And whosoever turns away (blinds himself) from the remembrance of the Most Beneficent (Allah) (i.e. this Quran and worship of Allah), We appoint for him Shaitan (Satan - devil) to be a Qarin (an intimate companion) to him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 43\n        },\n        \"text\" : \"And verily, they (Satans \\/ devils) hinder them from the Path (of Allah), but they think that they are guided aright!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 43\n        },\n        \"text\" : \"It will profit you not this Day (O you who turn away from Allah's remembrance and His worship, etc.) as you did wrong, (and) that you will be sharers (you and your Qarin) in the punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 43\n        },\n        \"text\" : \"And even if We take you (O Muhammad SAW) away, We shall indeed take vengeance on them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 43\n        },\n        \"text\" : \"And ask (O Muhammad SAW) those of Our Messengers whom We sent before you: \\\"Did We ever appoint aliha (gods) to be worshipped besides the Most Beneficent (Allah)?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 43\n        },\n        \"text\" : \"And indeed We did send Musa (Moses) with Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) to Fir'aun (Pharaoh) and his chiefs (inviting them to Allah's Religion of Islam) He said: \\\"Verily, I am a Messenger of the Lord of the 'Alamin (mankind, jinns and all that exists).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 43\n        },\n        \"text\" : \"And not an Ayah (sign, etc.) We showed them but it was greater than its fellow, and We seized them with torment, in order that they might turn [from their polytheism to Allah's Religion (Islamic Monotheism)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 43\n        },\n        \"text\" : \"And they said [to Musa (Moses)]: \\\"O you sorcerer! Invoke your Lord for us according to what He has covenanted with you. Verily, We shall guide ourselves (aright).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 43\n        },\n        \"text\" : \"Thus he [Fir'aun (Pharaoh)] befooled and misled his people, and they obeyed him. Verily, they were ever a people who were Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 43\n        },\n        \"text\" : \"So when they angered Us, We punished them, and drowned them all.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 43\n        },\n        \"text\" : \"And if it were Our Will, We would have [destroyed you (mankind) all, and] made angels to replace you on the earth. [Tafsir At-Tabari, Vol: 25, Page 89].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 43\n        },\n        \"text\" : \"And he ['Iesa (Jesus), son of Maryam (Mary)] shall be a known sign for (the coming of) the Hour (Day of Resurrection) [i.e. 'Iesa's (Jesus) descent on the earth]. Therefore have no doubt concerning it (i.e. the Day of Resurrection). And follow Me (Allah) (i.e. be obedient to Allah and do what He orders you to do, O mankind)! This is the Straight Path (of Islamic Monotheism, leading to Allah and to His Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 43\n        },\n        \"text\" : \"And when 'Iesa (Jesus) came with (Our) clear Proofs, he said: \\\"I have come to you with Al-Hikmah (Prophethood), and in order to make clear to you some of the (points) in which you differ, therefore fear Allah and obey me,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 43\n        },\n        \"text\" : \"\\\"Verily, Allah! He is my Lord (God) and your Lord (God). So worship Him (Alone). This is the (only) Straight Path (i.e. Allah's religion of true Islamic Monotheism).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 43\n        },\n        \"text\" : \"Do they only wait for the Hour that it shall come upon them suddenly, while they perceive not?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 43\n        },\n        \"text\" : \"(It will be said to the true believers of Islamic Monotheism): My worshippers! No fear shall be on you this Day, nor shall you grieve,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 43\n        },\n        \"text\" : \"(You) who believed in Our Ayat (proofs, verses, lessons, signs, revelations, etc.) and were Muslims (i.e. who submit totally to Allah's Will, and believe in the Oneness of Allah - Islamic Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 43\n        },\n        \"text\" : \"Trays of gold and cups will be passed round them, (there will be) therein all that the one's inner-selves could desire, all that the eyes could delight in, and you will abide therein forever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 43\n        },\n        \"text\" : \"And they will cry: \\\"O Malik (Keeper of Hell)! Let your Lord make an end of us.\\\" He will say: \\\"Verily you shall abide forever.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 43\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"If the Most Beneficent (Allah) had a son (or children as you pretend), then I am the first of Allah's worshippers [who deny and refute this claim of yours (and the first to believe in Allah Alone and testify that He has no children)].\\\" [Tafsir At-Tabari].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 43\n        },\n        \"text\" : \"Glorified be the Lord of the heavens and the earth, the Lord of the Throne! Exalted be He from all that they ascribe (to Him).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 43\n        },\n        \"text\" : \"It is He (Allah) Who is the only Ilah (God to be worshipped) in the heaven and the only Ilah (God to be worshipped) on the earth. And He is the All-Wise, the All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 43\n        },\n        \"text\" : \"And blessed be He to Whom belongs the kingdom of the heavens and the earth, and all that is between them, and with Whom is the knowledge of the Hour, and to Whom you (all) will be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 43\n        },\n        \"text\" : \"And those whom they invoke instead of Him have no power of intercession; except those who bear witness to the truth (i.e. believed in the Oneness of Allah, and obeyed His Orders), and they know (the facts about the Oneness of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 43\n        },\n        \"text\" : \"And if you ask them who created them, they will surely say: \\\"Allah\\\". How then are they turned away (from the worship of Allah, Who created them)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 43\n        },\n        \"text\" : \"(Allah has knowledge) of (Prophet Muhammad's) saying: \\\"O my Lord! Verily, these are a people who believe not!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 44\n        },\n        \"text\" : \"Ha-Mim. [These letters are one of the miracles of the Quran and none but Allah (Alone) knows their meanings].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 44\n        },\n        \"text\" : \"(As) a Mercy from your Lord. Verily! He is the All-Hearer, the All-Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 44\n        },\n        \"text\" : \"The Lord of the heavens and the earth and all that is between them, if you (but) have a faith with certainty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 44\n        },\n        \"text\" : \"(They will say): \\\"Our Lord! Remove the torment from us, really we shall become believers!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 44\n        },\n        \"text\" : \"Verily, We shall remove the torment for a while. Verily! You will revert.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 44\n        },\n        \"text\" : \"On the Day when We shall seize you with the greatest grasp. Verily, We will exact retribution.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 44\n        },\n        \"text\" : \"Saying: \\\"Restore to me the slaves of Allah (i.e. the Children of Israel). Verily! I am to you a Messenger worthy of all trust,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 44\n        },\n        \"text\" : \"\\\"And exalt not (yourselves) against Allah. Truly, I have come to you with a manifest authority.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 44\n        },\n        \"text\" : \"\\\"And truly, I seek refuge in my Lord and your Lord, lest you stone me (or call me a sorcerer or kill me).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 44\n        },\n        \"text\" : \"(But they were aggressive), so he [Musa (Moses)] called upon his Lord (saying): \\\"These are indeed the people who are Mujrimun (disbelievers, polytheists, sinners, criminals, etc.).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 44\n        },\n        \"text\" : \"(Allah said): \\\"Depart you with My slaves by night. Surely, you will be pursued.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 44\n        },\n        \"text\" : \"\\\"There is nothing but our first death, and we shall not be resurrected.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 44\n        },\n        \"text\" : \"And We created not the heavens and the earth, and all that is between them, for mere play,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 44\n        },\n        \"text\" : \"Verily, the Day of Judgement (when Allah will judge between the creatures) is the time appointed for all of them,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 44\n        },\n        \"text\" : \"Except him on whom Allah has Mercy. Verily, He is the All-Mighty, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 44\n        },\n        \"text\" : \"So (it will be), and We shall marry them to Houris (female fair ones) with wide, lovely eyes.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 44\n        },\n        \"text\" : \"They will call therein for every kind of fruit in peace and security;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 45\n        },\n        \"text\" : \"Ha-Mim. [These letters are one of the miracles of the Quran and none but Allah (Alone) knows their meanings].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 45\n        },\n        \"text\" : \"The revelation of the Book (this Quran) is from Allah, the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 45\n        },\n        \"text\" : \"And in the alternation of night and day, and the provision (rain) that Allah sends down from the sky, and revives therewith the earth after its death, and in the turning about of the winds (i.e. sometimes towards the east or north, and sometimes towards the south or west etc., sometimes bringing glad tidings of rain etc., and sometimes bringing the torment), are signs for a people who understand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 45\n        },\n        \"text\" : \"These are the Ayat (proofs, evidences, verses, lessons, revelations, etc.) of Allah, which We recite to you (O Muhammad SAW) with truth. Then in which speech after Allah and His Ayat will they believe?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 45\n        },\n        \"text\" : \"Who hears the Verses of Allah (being) recited to him, yet persists with pride as if he heard them not. So announce to him a painful torment!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 45\n        },\n        \"text\" : \"In front of them there is Hell, and that which they have earned will be of no profit to them, nor (will be of any profit to them) those whom they have taken as Auliya' (protectors, helpers, etc.) besides Allah. And theirs will be a great torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 45\n        },\n        \"text\" : \"Allah it is He Who has subjected to you the sea, that ships may sail through it by His Command, and that you may seek of His Bounty, and that you may be thankful,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 45\n        },\n        \"text\" : \"And has subjected to you all that is in the heavens and all that is in the earth; it is all as a favour and kindness from Him. Verily, in it are signs for a people who think deeply.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 45\n        },\n        \"text\" : \"Say (O Muhammad SAW) to the believers to forgive those who (harm them and) hope not for the Days of Allah (i.e. His Recompense), that He may recompense people according to what they have earned (i.e. to punish these disbelievers, who harm the believers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 45\n        },\n        \"text\" : \"Verily, they can avail you nothing against Allah (if He wants to punish you). Verily, the Zalimun (polytheists, wrong-doers, etc.) are Auliya' (protectors, helpers, etc.) to one another, but Allah is the Wali (Helper, Protector, etc.) of the Muttaqun (pious - see V. 2:2).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 45\n        },\n        \"text\" : \"Or do those who earn evil deeds think that We shall hold them equal with those who believe (in the Oneness of Allah Islamic Monotheism) and do righteous good deeds, in their present life and after their death? Worst is the judgement that they make.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 45\n        },\n        \"text\" : \"And Allah has created the heavens and the earth with truth, in order that each person may be recompensed what he has earned, and they will not be wronged.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 45\n        },\n        \"text\" : \"Have you seen him who takes his own lust (vain desires) as his ilah (god), and Allah knowing (him as such), left him astray, and sealed his hearing and his heart, and put a cover on his sight. Who then will guide him after Allah? Will you not then remember?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 45\n        },\n        \"text\" : \"Say (to them): \\\"Allah gives you life, then causes you to die, then He will assemble you on the Day of Resurrection about which there is no doubt. But most of mankind know not.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 45\n        },\n        \"text\" : \"And to Allah belongs the kingdom of the heavens and the earth. And on the Day that the Hour will be established, on that Day the followers of falsehood (polytheists, disbelievers, worshippers of false deities, etc.) shall lose (everything).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 45\n        },\n        \"text\" : \"And you will see each nation humbled to their knees (kneeling), each nation will be called to its Record (of deeds). This Day you shall be recompensed for what you used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 45\n        },\n        \"text\" : \"Then, as for those who believed (in the Oneness of Allah Islamic Monotheism) and did righteous good deeds, their Lord will admit them to His Mercy. That will be the evident success.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 45\n        },\n        \"text\" : \"And when it was said: \\\"Verily! Allah's Promise is the truth, and there is no doubt about the coming of the Hour,\\\" you said; \\\"We know not what is the Hour, we do not think it but as a conjecture, and we have no firm convincing belief (therein).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 45\n        },\n        \"text\" : \"This, because you took the revelations of Allah (this Quran) in mockery, and the life of the world deceived you. So this Day, they shall not be taken out from there (Hell), nor shall they be Yusta'tabun (i.e. they shall not return to the worldly life, so that they repent to Allah, and beg His Pardon for their sins).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 45\n        },\n        \"text\" : \"So all the praises and thanks are to Allah, the Lord of the heavens and the Lord of the earth, and the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 45\n        },\n        \"text\" : \"And His (Alone) is the Majesty in the heavens and the earth, and He is the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 46\n        },\n        \"text\" : \"Ha-Mim. [These letters are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 46\n        },\n        \"text\" : \"The revelation of the Book (this Quran) is from Allah, the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 46\n        },\n        \"text\" : \"We created not the heavens and the earth and all that is between them except with truth, and for an appointed term. But those who disbelieve turn away from that whereof they are warned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 46\n        },\n        \"text\" : \"Say (O Muhammad SAW to these pagans): \\\"Think! All that you invoke besides Allah show me! What have they created of the earth? Or have they a share in (the creation of) the heavens? Bring me a Book (revealed before this), or some trace of knowledge (in support of your claims), if you are truthful!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 46\n        },\n        \"text\" : \"And who is more astray than one who calls (invokes) besides Allah, such as will not answer him till the Day of Resurrection, and who are (even) unaware of their calls (invocations) to them?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 46\n        },\n        \"text\" : \"Or say they: \\\"He (Muhammad SAW) has fabricated it.\\\" Say: \\\"If I have fabricated it, still you have no power to support me against Allah. He knows best of what you say among yourselves concerning it (i.e. this Quran)! Sufficient is He for a witness between me and you! And He is the Oft-Forgiving, the Most Merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 46\n        },\n        \"text\" : \"Say (O Muhammad SAW):\\\"I am not a new thing among the Messengers (of Allah) (i.e. I am not the first Messenger) nor do I know what will be done with me or with you. I only follow that which is revealed to me, and I am but a plain warner.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 46\n        },\n        \"text\" : \"Say: \\\"Tell me! If this (Quran) is from Allah, and you deny it, and a witness from among the Children of Israel ('Abdullah bin Salam) testifies that this Quran is from Allah [like the Taurat (Torah)], so he believed (embraced Islam) while you are too proud (to believe).\\\" Verily! Allah guides not the people who are Zalimun (polytheists, disbelievers and wrong-doing).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 46\n        },\n        \"text\" : \"Verily, those who say: \\\"Our Lord is (only) Allah,\\\" and thereafter Istaqamu (i.e. stood firm and straight on the Islamic Faith of Monotheism by abstaining from all kinds of sins and evil deeds which Allah has forbidden and by performing all kinds of good deeds which He has ordained), on them shall be no fear, nor shall they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 46\n        },\n        \"text\" : \"Such shall be the dwellers of Paradise, abiding therein (forever), a reward for what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 46\n        },\n        \"text\" : \"They are those from whom We shall accept the best of their deeds and overlook their evil deeds. (They shall be) among the dwellers of Paradise, a promise of truth, which they have been promised.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 46\n        },\n        \"text\" : \"But he who says to his parents: \\\"Fie upon you both! Do you hold out the promise to me that I shall be raised up (again) when generations before me have passed away (without rising)?\\\" While they (father and mother) invoke Allah for help (and rebuke their son): \\\"Woe to you! Believe! Verily, the Promise of Allah is true.\\\" But he says: \\\"This is nothing but the tales of the ancient.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 46\n        },\n        \"text\" : \"And for all, there will be degrees according to that which they did, that He (Allah) may recompense them in full for their deeds. And they will not be wronged.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 46\n        },\n        \"text\" : \"On the Day when those who disbelieve (in the Oneness of Allah Islamic Monotheism) will be exposed to the Fire (it will be said): \\\"You received your good things in the life of the world, and you took your pleasure therein. Now this Day you shall be recompensed with a torment of humiliation, because you were arrogant in the land without a right, and because you used to rebel and disobey (Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 46\n        },\n        \"text\" : \"And remember (Hud) the brother of 'Ad, when he warned his people in Al-Ahqaf (the curved sand-hills in the southern part of Arabian Peninsula). And surely, there have passed away warners before him and after him (saying): \\\"Worship none but Allah; truly, I fear for you the torment of a mighty Day.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 46\n        },\n        \"text\" : \"He said: \\\"The knowledge (of the time of its coming) is with Allah only, and I convey to you that wherewith I have been sent, but I see that you are a people given to ignorance!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 46\n        },\n        \"text\" : \"Then, when they saw it as a dense cloud coming towards their valleys, they said: \\\"This is a cloud bringing us rain!\\\" Nay, but it is that (torment) which you were asking to be hastened! a wind wherein is a painful torment!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 46\n        },\n        \"text\" : \"And indeed We had firmly established them with that wherewith We have not established you (O Quraish)! And We had assigned them the (faculties of) hearing (ears), seeing (eyes), and hearts, but their hearing (ears), seeing (eyes), and their hearts availed them nothing since they used to deny the Ayat (Allah's Prophets and their Prophethood, proofs, evidences, verses, signs, revelations, etc.) of Allah, and they were completely encircled by that which they used to mock at!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 46\n        },\n        \"text\" : \"And indeed We have destroyed towns (populations) round about you, and We have (repeatedly) shown (them) the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) in various ways that they might return (to the truth and believe in the Oneness of Allah - Islamic Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 46\n        },\n        \"text\" : \"Then why did those whom they had taken for aliha (gods) besides Allah, as a way of approach (to Allah) not help them? Nay, but they vanished completely from them (when there came the torment). And that was their lie, and their inventions which they had been inventing (before their destruction).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 46\n        },\n        \"text\" : \"O our people! Respond (with obedience) to Allah's Caller (i.e. Allah's Messenger Muhammad SAW), and believe in him (i.e. believe in that which Muhammad SAW has brought from Allah and follow him). He (Allah) will forgive you of your sins, and will save you from a painful torment (i.e. Hell-fire).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 46\n        },\n        \"text\" : \"And whosoever does not respond to Allah's Caller, he cannot escape on earth, and there will be no Auliya' (protectors) for him besides Allah (from Allah's Punishment). Those are in manifest error.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 46\n        },\n        \"text\" : \"Do they not see that Allah, Who created the heavens and the earth, and was not wearied by their creation, is Able to give life to the dead? Yes, He surely is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 46\n        },\n        \"text\" : \"Therefore be patient (O Muhammad SAW) as did the Messengers of strong will and be in no haste about them (disbelievers). On the Day when they will see that (torment) with which they are promised (i.e. threatened, it will be) as if they had not stayed more than an hour in a single day. (O mankind! This Quran is sufficient as) a clear Message (or proclamation to save yourself from destruction). But shall any be destroyed except the people who are Al-Fasiqun (the rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 47\n        },\n        \"text\" : \"Those who disbelieve [in the Oneness of Allah, and in the Message of Prophet Muhammad SAW], and hinder (men) from the Path of Allah (Islamic Monotheism), He will render their deeds vain.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 47\n        },\n        \"text\" : \"That is because those who disbelieve follow falsehood, while those who believe follow the truth from their Lord. Thus does Allah set forth their parables for mankind.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 47\n        },\n        \"text\" : \"So, when you meet (in fight Jihad in Allah's Cause), those who disbelieve smite at their necks till when you have killed and wounded many of them, then bind a bond firmly (on them, i.e. take them as captives). Thereafter (is the time) either for generosity (i.e. free them without ransom), or ransom (according to what benefits Islam), until the war lays down its burden. Thus [you are ordered by Allah to continue in carrying out Jihad against the disbelievers till they embrace Islam (i.e. are saved from the punishment in the Hell-fire) or at least come under your protection], but if it had been Allah's Will, He Himself could certainly have punished them (without you). But (He lets you fight), in order to test you, some with others. But those who are killed in the Way of Allah, He will never let their deeds be lost,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 47\n        },\n        \"text\" : \"O you who believe! If you help (in the cause of) Allah, He will help you, and make your foothold firm.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 47\n        },\n        \"text\" : \"But those who disbelieve (in the Oneness of Allah Islamic Monotheism), for them is destruction, and (Allah) will make their deeds vain.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 47\n        },\n        \"text\" : \"That is because they hate that which Allah has sent down (this Quran and Islamic laws, etc.), so He has made their deeds fruitless.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 47\n        },\n        \"text\" : \"Have they not travelled through the earth, and seen what was the end of those before them? Allah destroyed them completely and a similar (fate awaits) the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 47\n        },\n        \"text\" : \"That is because Allah is the Maula (Lord, Master, Helper, Protector, etc.) of those who believe, and the disbelievers have no Maula (lord, master, helper, protector, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 47\n        },\n        \"text\" : \"Certainly! Allah will admit those who believe (in the Oneness of Allah Islamic Monotheism) and do righteous good deeds, to Gardens under which rivers flow (Paradise), while those who disbelieve enjoy themselves and eat as cattle eat, and the Fire will be their abode.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 47\n        },\n        \"text\" : \"The description of Paradise which the Muttaqun (pious - see V. 2:2) have been promised is that in it are rivers of water the taste and smell of which are not changed; rivers of milk of which the taste never changes; rivers of wine delicious to those who drink; and rivers of clarified honey (clear and pure) therein for them is every kind of fruit; and forgiveness from their Lord. (Are these) like those who shall dwell for ever in the Fire, and be given, to drink, boiling water, so that it cuts up their bowels?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 47\n        },\n        \"text\" : \"And among them are some who listen to you (O Muhammad SAW) till, when they go out from you, they say to those who have received knowledge: \\\"What has he said just now? Such are men whose hearts Allah has sealed, and they follow their lusts (evil desires).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 47\n        },\n        \"text\" : \"Do they then await (anything) other than the Hour, that it should come upon them suddenly? But some of its portents (indications and signs) have already come, and when it (actually) is on them, how can they benefit then by their reminder?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 47\n        },\n        \"text\" : \"So know (O Muhammad SAW) that La ilaha ill-Allah (none has the right to be worshipped but Allah), and ask forgiveness for your sin, and also for (the sin of) believing men and believing women. And Allah knows well your moving about, and your place of rest (in your homes).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 47\n        },\n        \"text\" : \"Those who believe say: \\\"Why is not a Surah (chapter of the Quran) sent down (for us)? But when a decisive Surah (explaining and ordering things) is sent down, and fighting (Jihad - holy fighting in Allah's Cause) is mentioned (i.e. ordained) therein, you will see those in whose hearts is a disease (of hypocrisy) looking at you with a look of one fainting to death. But it was better for them (hypocrites, to listen to Allah and to obey Him).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 47\n        },\n        \"text\" : \"Obedience (to Allah) and good words (were better for them). And when the matter (preparation for Jihad) is resolved on, then if they had been true to Allah, it would have been better for them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 47\n        },\n        \"text\" : \"Such are they whom Allah has cursed, so that He has made them deaf and blinded their sight.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 47\n        },\n        \"text\" : \"Verily, those who have turned back (have apostated) as disbelievers after the guidance has been manifested to them, Shaitan (Satan) has beautified for them (their false hopes), and (Allah) prolonged their term (age).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 47\n        },\n        \"text\" : \"This is because they said to those who hate what Allah has sent down: \\\"We will obey you in part of the matter,\\\" but Allah knows their secrets.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 47\n        },\n        \"text\" : \"That is because they followed that which angered Allah, and hated that which pleased Him. So He made their deeds fruitless.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 47\n        },\n        \"text\" : \"Or do those in whose hearts is a disease (of hypocrisy), think that Allah will not bring to light all their hidden ill-wills?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 47\n        },\n        \"text\" : \"Had We willed, We could have shown them to you, and you should have known them by their marks, but surely, you will know them by the tone of their speech! And Allah knows all your deeds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 47\n        },\n        \"text\" : \"And surely, We shall try you till We test those who strive hard (for the Cause of Allah) and the patient ones, and We shall test your facts (i.e. the one who is a liar, and the one who is truthful).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 47\n        },\n        \"text\" : \"Verily, those who disbelieve, and hinder (men) from the Path of Allah (i.e. Islam), and oppose the Messenger (SAW) (by standing against him and hurting him), after the guidance has been clearly shown to them, they will not hurt Allah in the least, but He will make their deeds fruitless,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 47\n        },\n        \"text\" : \"O you who believe! Obey Allah, and obey the Messenger (Muhammad SAW) and render not vain your deeds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 47\n        },\n        \"text\" : \"Verily, those who disbelieve, and hinder (men) from the Path of Allah (i.e. Islam); then die while they are disbelievers, Allah will not forgive them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 47\n        },\n        \"text\" : \"So be not weak and ask not for peace (from the enemies of Islam), while you are having the upper hand. Allah is with you, and will never decrease the reward of your good deeds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 47\n        },\n        \"text\" : \"The life of this world is but play and pastime, but if you believe (in the Oneness of Allah Islamic Monotheism), and fear Allah, and avoid evil, He will grant you your wages, and will not ask you your wealth.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 47\n        },\n        \"text\" : \"If He were to ask you of it, and press you, you would covetously withhold, and He will bring out all your (secret) ill-wills.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 47\n        },\n        \"text\" : \"Behold! You are those who are called to spend in the Cause of Allah, yet among you are some who are niggardly. And whoever is niggardly, it is only at the expense of his ownself. But Allah is Rich (Free of all wants), and you (mankind) are poor. And if you turn away (from Islam and the obedience of Allah), He will exchange you for some other people, and they will not be your likes.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 48\n        },\n        \"text\" : \"That Allah may forgive you your sins of the past and the future, and complete His Favour on you, and guide you on the Straight Path;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 48\n        },\n        \"text\" : \"And that Allah may help you with strong help.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 48\n        },\n        \"text\" : \"He it is Who sent down As-Sakinah (calmness and tranquillity) into the hearts of the believers, that they may grow more in Faith along with their (present) Faith. And to Allah belong the hosts of the heavens and the earth, and Allah is Ever All-Knower, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 48\n        },\n        \"text\" : \"That He may admit the believing men and the believing women to Gardens under which rivers flow (i.e. Paradise), to abide therein forever, and to expiate from them their sins, and that is with Allah, a supreme success,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 48\n        },\n        \"text\" : \"And that He may punish the Munafiqun (hypocrites), men and women, and also the Mushrikun men and women, who think evil thoughts about Allah, for them is a disgraceful torment, and the Anger of Allah is upon them, and He has cursed them and prepared Hell for them, and worst indeed is that destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 48\n        },\n        \"text\" : \"And to Allah belong the hosts of the heavens and the earth. And Allah is Ever All-Knower, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 48\n        },\n        \"text\" : \"In order that you (O mankind) may believe in Allah and His Messenger (SAW), and that you assist and honour him (SAW), and (that you) glorify (Allah's) praises morning and afternoon.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 48\n        },\n        \"text\" : \"Verily, those who give Bai'a (pledge) to you (O Muhammad SAW) they are giving Bai'a (pledge) to Allah. The Hand of Allah is over their hands. Then whosoever breaks his pledge, breaks only to his own harm, and whosoever fulfills what he has covenanted with Allah, He will bestow on him a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 48\n        },\n        \"text\" : \"Those of the bedouins who lagged behind will say to you: \\\"Our possessions and our families occupied us, so ask forgiveness for us.\\\" They say with their tongues what is not in their hearts. Say: \\\"Who then has any power at all (to intervene) on your behalf with Allah, if He intends you hurt or intends you benefit? Nay, but Allah is Ever All-Aware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 48\n        },\n        \"text\" : \"And whosoever does not believe in Allah and His Messenger (Muhammad SAW), then verily, We have prepared for the disbelievers a blazing Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 48\n        },\n        \"text\" : \"And to Allah belongs the sovereignty of the heavens and the earth, He forgives whom He wills, and punishes whom He wills. And Allah is Ever Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 48\n        },\n        \"text\" : \"Those who lagged behind will say, when you set forth to take the spoils, \\\"Allow us to follow you,\\\" They want to change Allah's Words. Say: \\\"You shall not follow us; thus Allah has said beforehand.\\\" Then they will say: \\\"Nay, you envy us.\\\" Nay, but they understand not except a little.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 48\n        },\n        \"text\" : \"Say (O Muhammad SAW) to the bedouins who lagged behind: \\\"You shall be called to fight against a people given to great warfare, then you shall fight them, or they shall surrender. Then if you obey, Allah will give you a fair reward, but if you turn away as you did turn away before, He will punish you with a painful torment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 48\n        },\n        \"text\" : \"No blame or sin is there upon the blind, nor is there blame or sin upon the lame, nor is there blame or sin upon the sick (that they go not forth to war). And whosoever obeys Allah and His Messenger (Muhammad SAW), He will admit him to Gardens beneath which rivers flow (Paradise); and whosoever turns back, He will punish him with a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 48\n        },\n        \"text\" : \"Indeed, Allah was pleased with the believers when they gave their Bai'a (pledge) to you (O Muhammad SAW) under the tree, He knew what was in their hearts, and He sent down As-Sakinah (calmness and tranquillity) upon them, and He rewarded them with a near victory,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 48\n        },\n        \"text\" : \"And abundant spoils that they will capture. And Allah is Ever All-Mighty, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 48\n        },\n        \"text\" : \"Allah has promised you abundant spoils that you will capture, and He has hastened for you this, and He has restrained the hands of men from you, that it may be a sign for the believers, and that He may guide you to a Straight Path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 48\n        },\n        \"text\" : \"And other (victories and much booty there are, He promises you) which are not yet within your power, indeed Allah compasses them, And Allah is Ever Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 48\n        },\n        \"text\" : \"That has been the Way of Allah already with those who passed away before. And you will not find any change in the Way of Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 48\n        },\n        \"text\" : \"And He it is Who has withheld their hands from you and your hands from them in the midst of Makkah, after He had made you victors over them. And Allah is Ever the All-Seer of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 48\n        },\n        \"text\" : \"They are the ones who disbelieved (in the Oneness of Allah Islamic Monotheism), and hindered you from Al-Masjid-al-Haram (the sacred mosque of Makkah) and the sacrificial animals, detained from reaching their place of sacrifice. Had there not been believing men and believing women whom you did not know, that you may kill them, and on whose account a sin would have been committed by you without (your) knowledge, that Allah might bring into His Mercy whom He will, if they (the believers and the disbelievers) should have been apart, We verily had punished those of them who disbelieved, with painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 48\n        },\n        \"text\" : \"When those who disbelieve had put in their hearts pride and haughtiness the pride and haughtiness of the time of ignorance, then Allah sent down His Sakinah (calmness and tranquillity) upon His Messenger (SAW) and upon the believers, and made them stick to the word of piety (i.e. none has the right to be worshipped but Allah), and they were well entitled to it and worthy of it. And Allah is the All-Knower of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 48\n        },\n        \"text\" : \"Indeed Allah shall fulfil the true vision which He showed to His Messenger (SAW) [i.e. the Prophet SAW saw a dream that he has entered Makkah along with his companions, having their (head) hair shaved and cut short] in very truth. Certainly, you shall enter Al-Masjid-al-Haram; if Allah wills, secure, (some) having your heads shaved, and (some) having your head hair cut short, having no fear. He knew what you knew not, and He granted besides that a near victory.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 48\n        },\n        \"text\" : \"He it is Who has sent His Messenger (Muhammad SAW) with guidance and the religion of truth (Islam), that He may make it (Islam) superior over all religions. And All-Sufficient is Allah as a Witness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 48\n        },\n        \"text\" : \"Muhammad (SAW) is the Messenger of Allah, and those who are with him are severe against disbelievers, and merciful among themselves. You see them bowing and falling down prostrate (in prayer), seeking Bounty from Allah and (His) Good Pleasure. The mark of them (i.e. of their Faith) is on their faces (foreheads) from the traces of (their) prostration (during prayers). This is their description in the Taurat (Torah). But their description in the Injeel (Gospel) is like a (sown) seed which sends forth its shoot, then makes it strong, it then becomes thick, and it stands straight on its stem, delighting the sowers that He may enrage the disbelievers with them. Allah has promised those among them who believe (i.e. all those who follow Islamic Monotheism, the religion of Prophet Muhammad SAW till the Day of Resurrection) and do righteous good deeds, forgiveness and a mighty reward (i.e. Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 49\n        },\n        \"text\" : \"O you who believe! Do not put (yourselves) forward before Allah and His Messenger (SAW), and fear Allah. Verily! Allah is All-Hearing, All-Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 49\n        },\n        \"text\" : \"Verily! Those who lower their voices in the presence of Allah's Messenger (SAW), they are the ones whose hearts Allah has tested for piety. For them is forgiveness and a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 49\n        },\n        \"text\" : \"Verily! Those who call you from behind the dwellings, most of them have no sense.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 49\n        },\n        \"text\" : \"And if they had patience till you could come out to them, it would have been better for them. And Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 49\n        },\n        \"text\" : \"And know that, among you there is the Messenger of Allah (SAW). If he were to obey you (i.e. follow your opinions and desires) in much of the matter, you would surely be in trouble, but Allah has endeared the Faith to you and has beautified it in your hearts, and has made disbelief, wickedness and disobedience (to Allah and His Messenger SAW) hateful to you. These! They are the rightly guided ones,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 49\n        },\n        \"text\" : \"(This is) a Grace from Allah and His Favour. And Allah is All-Knowing, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 49\n        },\n        \"text\" : \"And if two parties or groups among the believers fall to fighting, then make peace between them both, but if one of them rebels against the other, then fight you (all) against the one that which rebels till it complies with the Command of Allah; then if it complies, then make reconciliation between them justly, and be equitable. Verily! Allah loves those who are equitable.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 49\n        },\n        \"text\" : \"The believers are nothing else than brothers (in Islamic religion). So make reconciliation between your brothers, and fear Allah, that you may receive mercy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 49\n        },\n        \"text\" : \"O you who believe! Let not a group scoff at another group, it may be that the latter are better than the former; nor let (some) women scoff at other women, it may be that the latter are better than the former, nor defame one another, nor insult one another by nicknames. How bad is it, to insult one's brother after having Faith [i.e. to call your Muslim brother (a faithful believer) as: \\\"O sinner\\\", or \\\"O wicked\\\", etc.]. And whosoever does not repent, then such are indeed Zalimun (wrong-doers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 49\n        },\n        \"text\" : \"O you who believe! Avoid much suspicions, indeed some suspicions are sins. And spy not, neither backbite one another. Would one of you like to eat the flesh of his dead brother? You would hate it (so hate backbiting). And fear Allah. Verily, Allah is the One Who accepts repentance, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 49\n        },\n        \"text\" : \"O mankind! We have created you from a male and a female, and made you into nations and tribes, that you may know one another. Verily, the most honourable of you with Allah is that (believer) who has At-Taqwa [i.e. one of the Muttaqun (pious - see V. 2:2). Verily, Allah is All-Knowing, All-Aware.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 49\n        },\n        \"text\" : \"The bedouins say: \\\"We believe.\\\" Say: \\\"You believe not but you only say, 'We have surrendered (in Islam),' for Faith has not yet entered your hearts. But if you obey Allah and His Messenger (SAW), He will not decrease anything in reward for your deeds. Verily, Allah is Oft-Forgiving, Most Merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 49\n        },\n        \"text\" : \"Only those are the believers who have believed in Allah and His Messenger, and afterward doubt not but strive with their wealth and their lives for the Cause of Allah. Those! They are the truthful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 49\n        },\n        \"text\" : \"Say: \\\"Will you inform Allah about your religion? While Allah knows all that is in the heavens and all that is in the earth, and Allah is All-Aware of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 49\n        },\n        \"text\" : \"They regard as favour upon you (O Muhammad SAW) that they have embraced Islam. Say: \\\"Count not your Islam as a favour upon me. Nay, but Allah has conferred a favour upon you, that He has guided you to the Faith, if you indeed are true.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 49\n        },\n        \"text\" : \"Verily, Allah knows the unseen of the heavens and the earth. And Allah is the All-Seer of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 50\n        },\n        \"text\" : \"Qaf. [These letters (Qaf, etc.) are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings]. By the Glorious Quran.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 50\n        },\n        \"text\" : \"\\\"When we are dead and have become dust (shall we be resurrected?) That is a far return.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 50\n        },\n        \"text\" : \"An insight and a Reminder for every slave turning to Allah (i.e. the one who believes in Allah and performs deeds of His obedience, and always begs His pardon).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 50\n        },\n        \"text\" : \"And tall date-palms, with ranged clusters;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 50\n        },\n        \"text\" : \"A provision for (Allah's) slaves. And We give life therewith to a dead land. Thus will be the resurrection (of the dead).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 50\n        },\n        \"text\" : \"(And it will be said): \\\"Both of you throw (Order from Allah to the two angels) into Hell, every stubborn disbeliever (in the Oneness of Allah, in His Messengers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 50\n        },\n        \"text\" : \"\\\"Who set up another ilah (god) with Allah, then (both of you) cast him in the severe torment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 50\n        },\n        \"text\" : \"Allah will say: \\\"Dispute not in front of Me, I had already, in advance, sent you the threat.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 50\n        },\n        \"text\" : \"(It will be said): \\\"This is what you were promised, - (it is) for those oft-returning (to Allah) in sincere repentance, and those who preserve their covenant with Allah (by obeying Him in all what He has ordered, and worship none but Allah Alone, i.e. follow Allah's Religion, Islamic Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 50\n        },\n        \"text\" : \"\\\"Who feared the Most Beneficent (Allah) in the Ghaib (unseen): (i.e. in this worldly life before seeing and meeting Him), and brought a heart turned in repentance (to Him - and absolutely free from each and every kind of polytheism),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 50\n        },\n        \"text\" : \"There they will have all that they desire, and We have more (for them, i.e. a glance at the All-Mighty, All-Majestic).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 50\n        },\n        \"text\" : \"And indeed We created the heavens and the earth and all between them in six Days and nothing of fatigue touched Us.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 50\n        },\n        \"text\" : \"So bear with patience (O Muhammad SAW) all that they say, and glorify the Praises of your Lord, before the rising of the sun and before (its) setting (i.e. the Fajr, Zuhr, and 'Asr prayers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 50\n        },\n        \"text\" : \"And during a part of the night (also), glorify His praises (i.e. Maghrib and 'Isha prayers), and (so likewise) after the prayers [As-Sunnah, Nawafil optional and additional prayers, and also glorify, praise and magnify Allah - Subhan Allah, Alhamdu lillah, Allahu-Akbar].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 50\n        },\n        \"text\" : \"And listen on the Day when the caller will call from a near place,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 50\n        },\n        \"text\" : \"On the Day when the earth shall be cleft, from off them, (they will come out) hastening forth. That will be a gathering, quite easy for Us.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 51\n        },\n        \"text\" : \"And those (angels) who distribute (provisions, rain, and other blessings) by (Allah's) Command;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 51\n        },\n        \"text\" : \"Turned aside therefrom (i.e. from Muhammad SAW and the Quran) is he who is turned aside (by the Decree and Preordainment of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 51\n        },\n        \"text\" : \"They used to sleep but little by night [invoking their Lord (Allah) and praying, with fear and hope].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 51\n        },\n        \"text\" : \"And in the hours before dawn, they were (found) asking (Allah) for forgiveness,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 51\n        },\n        \"text\" : \"Then he conceived a fear of them (when they ate not). They said: \\\"Fear not.\\\" And they gave him glad tidings of an intelligent son, having knowledge (about Allah and His religion of True Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 51\n        },\n        \"text\" : \"They said: \\\"Even so says your Lord. Verily, He is the All-Wise, the All-Knower.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 51\n        },\n        \"text\" : \"They said: \\\"We have been sent to a people who are Mujrimun (polytheists, sinners, criminals, disbelievers in Allah);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 51\n        },\n        \"text\" : \"Marked by your Lord for the Musrifun (polytheists, criminals, sinners those who trespass Allah's set limits in evil-doings by committing great sins).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 51\n        },\n        \"text\" : \"(So were) the people of Nuh (Noah) before them. Verily, they were a people who were Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 51\n        },\n        \"text\" : \"And of everything We have created pairs, that you may remember (the Grace of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 51\n        },\n        \"text\" : \"So flee to Allah (from His Torment to His Mercy Islamic Monotheism), verily, I (Muhammad SAW) am a plain warner to you from Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 51\n        },\n        \"text\" : \"And set not up (or worship) any other ilahan (god) along with Allah [Glorified be He (Alone), Exalted above all that they associate as partners with Him]. Verily, I (Muhammad SAW) am a plain warner to you from Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 51\n        },\n        \"text\" : \"So turn away (O Muhammad SAW) from them (Quraish pagans) you are not to be blamed (as you have conveyed Allah's Message).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 51\n        },\n        \"text\" : \"And I (Allah) created not the jinns and humans except they should worship Me (Alone).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 51\n        },\n        \"text\" : \"Verily, Allah is the All-Provider, Owner of Power, the Most Strong.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 51\n        },\n        \"text\" : \"Then, woe to those who disbelieve (in Allah and His Oneness Islamic Monotheism) from (that) their Day which they have been promised (for their punishment).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 52\n        },\n        \"text\" : \"Taste you therein its heat, and whether you are patient of it or impatient of it, it is all the same. You are only being requited for what you used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 52\n        },\n        \"text\" : \"They will recline (with ease) on thrones arranged in ranks. And We shall marry them to Houris (female, fair ones) with wide lovely eyes.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 52\n        },\n        \"text\" : \"And those who believe and whose offspring follow them in Faith, to them shall We join their offspring, and We shall not decrease the reward of their deeds in anything. Every person is a pledge for that which he has earned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 52\n        },\n        \"text\" : \"And We shall provide them with fruit and meat, such as they desire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 52\n        },\n        \"text\" : \"There they shall pass from hand to hand a (wine) cup, free from any Laghw (dirty, false, evil vague talk between them), and free from sin (because it will be legal for them to drink).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 52\n        },\n        \"text\" : \"Saying: \\\"Aforetime, we were afraid with our families (from the punishment of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 52\n        },\n        \"text\" : \"\\\"But Allah has been gracious to us, and has saved us from the torment of the Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 52\n        },\n        \"text\" : \"Therefore, remind and preach (mankind, O Muhammad SAW of Islamic Monotheism). By the Grace of Allah, you are neither a soothsayer, nor a madman.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 52\n        },\n        \"text\" : \"Do their minds command them this [i.e. to tell a lie against you (Muhammad SAW)] or are they people exceeding the bounds (i.e. from Belief in Allah to disbelief).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 52\n        },\n        \"text\" : \"Or has He (Allah) only daughters and you have sons?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 52\n        },\n        \"text\" : \"Or do they intend a plot (against you O Muhammad SAW)? But those who disbelieve (in the Oneness of Allah Islamic Monotheism) are themselves in a plot!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 52\n        },\n        \"text\" : \"Or have they an ilah (a god) other than Allah? Glorified be Allah from all that they ascribe as partners (to Him)\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 52\n        },\n        \"text\" : \"And if they were to see a piece of the heaven falling down, they would say: \\\"Clouds gathered in heaps!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 52\n        },\n        \"text\" : \"The Day when their plotting shall not avail them at all nor will they be helped (i.e. they will receive their torment in Hell).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 53\n        },\n        \"text\" : \"So did (Allah) convey the Inspiration to His slave [Muhammad SAW through Jibrael (Gabriel)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 53\n        },\n        \"text\" : \"Indeed he (Muhammad SAW) did see, of the Greatest Signs, of his Lord (Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 53\n        },\n        \"text\" : \"They are but names which you have named, you and your fathers, for which Allah has sent down no authority. They follow but a guess and that which they themselves desire, whereas there has surely come to them the Guidance from their Lord!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 53\n        },\n        \"text\" : \"Or shall man have what he wishes?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 53\n        },\n        \"text\" : \"But to Allah belongs the last (Hereafter) and the first (the world).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 53\n        },\n        \"text\" : \"And there are many angels in the heavens, whose intercession will avail nothing except after Allah has given leave for whom He wills and pleases.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 53\n        },\n        \"text\" : \"And to Allah belongs all that is in the heavens and all that is in the earth, that He may requite those who do evil with that which they have done (i.e. punish them in Hell), and reward those who do good, with what is best (i.e. Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 53\n        },\n        \"text\" : \"Those who avoid great sins (see the Quran, Verses: 6:152, 153) and Al-Fawahish (illegal sexual intercourse, etc.) except the small faults, verily, your Lord is of vast forgiveness. He knows you well when He created you from the earth (Adam), and when you were fetuses in your mothers' wombs. So ascribe not purity to yourselves. He knows best him who fears Allah and keep his duty to Him [i.e. those who are Al-Muttaqun (pious - see V. 2:2)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 53\n        },\n        \"text\" : \"And of Ibrahim (Abraham) who fulfilled (or conveyed) all that (what Allah ordered him to do or convey),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 53\n        },\n        \"text\" : \"That no burdened person (with sins) shall bear the burden (sins) of another.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 53\n        },\n        \"text\" : \"And that to your Lord (Allah) is the End (Return of everything).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 53\n        },\n        \"text\" : \"And that it is He (Allah) Who makes (whom He wills) laugh, and makes (whom He wills) weep;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 53\n        },\n        \"text\" : \"And that it is He (Allah) Who causes death and gives life;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 53\n        },\n        \"text\" : \"And that He (Allah) creates the pairs, male and female,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 53\n        },\n        \"text\" : \"And that upon Him (Allah) is another bringing forth (Resurrection);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 53\n        },\n        \"text\" : \"And that it is He (Allah) Who gives much or a little (or gives wealth and contentment),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 53\n        },\n        \"text\" : \"And that He (Allah) is the Lord of Sirius (the star which the pagan Arabs used to worship);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 53\n        },\n        \"text\" : \"And that it is He (Allah) Who destroyed the former 'Ad (people),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 53\n        },\n        \"text\" : \"And the people of Nuh (Noah) aforetime, verily, they were more unjust and more rebellious and transgressing [in disobeying Allah and His Messenger Nuh (Noah)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 53\n        },\n        \"text\" : \"None besides Allah can avert it, (or advance it, or delay it).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 53\n        },\n        \"text\" : \"So fall you down in prostration to Allah, and worship Him (Alone).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 54\n        },\n        \"text\" : \"They belied (the Verses of Allah, this Quran), and followed their own lusts. And every matter will be settled [according to the kind of deeds (for the doer of good deeds, his deeds will take him to Paradise, and similarly evil deeds will take their doers to Hell)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 54\n        },\n        \"text\" : \"So (O Muhammad SAW) withdraw from them. The Day that the caller will call (them) to a terrible thing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 54\n        },\n        \"text\" : \"Hastening towards the caller, the disbelievers will say: \\\"This is a hard Day.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 54\n        },\n        \"text\" : \"But they called their comrade and he took (a sword) and killed (her).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 54\n        },\n        \"text\" : \"Verily, We sent against them a violent storm of stones (which destroyed them all), except the family of Lout (Lot), whom We saved in last hour of the night,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 54\n        },\n        \"text\" : \"(They) belied all Our Signs, so We seized them with a Seizure of the All-Mighty, All-Capable to carry out what he Will (Omnipotent).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 54\n        },\n        \"text\" : \"Or do they say: \\\"We are a great multitude, and we shall be victorious?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 54\n        },\n        \"text\" : \"Verily, We have created all things with Qadar (Divine Preordainments of all things before their creation, as written in the Book of Decrees Al-Lauh Al-Mahfuz).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 54\n        },\n        \"text\" : \"And everything, small and big is written (in Al-Lauh Al-Mahfuz already beforehand i.e. before it befalls, or is done by its doer) (See the Quran V. 57:22).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 54\n        },\n        \"text\" : \"In a seat of truth (i.e. Paradise), near the Omnipotent King (Allah, the All-Blessed, the Most High, the Owner of Majesty and Honour).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 55\n        },\n        \"text\" : \"The Most Beneficent (Allah)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 55\n        },\n        \"text\" : \"We shall attend to you, O you two classes (jinns and men)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 55\n        },\n        \"text\" : \"O assembly of jinns and men! If you have power to pass beyond the zones of the heavens and the earth, then pass (them)! But you will never be able to pass them, except with authority (from Allah)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 55\n        },\n        \"text\" : \"But for him who [the true believer of Islamic Monotheism who performs all the duties ordained by Allah and His Messenger Muhammad SAW, and keeps away (abstain) from all kinds of sin and evil deeds prohibited in Islam and] fears the standing before his Lord, there will be two Gardens (i.e. in Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 55\n        },\n        \"text\" : \"Blessed be the Name of your Lord (Allah), the Owner of Majesty and Honour.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 56\n        },\n        \"text\" : \"When the Event (i.e. the Day of Resurrection) befalls.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 56\n        },\n        \"text\" : \"And there can be no denying of its befalling.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 56\n        },\n        \"text\" : \"And you (all) will be in three kinds (i.e. separate groups).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 56\n        },\n        \"text\" : \"And those foremost [(in Islamic Faith of Monotheism and in performing righteous deeds) in the life of this world on the very first call for to embrace Islam,] will be foremost (in Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 56\n        },\n        \"text\" : \"These will be those nearest to Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 56\n        },\n        \"text\" : \"And were persisting in great sin (joining partners in worship along with Allah, committing murders and other crimes, etc.)\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 56\n        },\n        \"text\" : \"And they used to say: \\\"When we die and become dust and bones, shall we then indeed be resurrected?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 56\n        },\n        \"text\" : \"\\\"All will surely be gathered together for appointed Meeting of a known Day.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 56\n        },\n        \"text\" : \"We have decreed death to you all, and We are not unable,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 56\n        },\n        \"text\" : \"(Saying): \\\"We are indeed Mughramun (i.e. ruined or lost the money without any profit, or punished by the loss of all that we spend for cultivation, etc.)! [See Tafsir Al-Qurtubi, Vol. 17, Page 219]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 56\n        },\n        \"text\" : \"If We willed, We verily could make it salt (and undrinkable), why then do you not give thanks (to Allah)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 56\n        },\n        \"text\" : \"We have made it a Reminder (for the Hell-fire, in the Hereafter); and an article of use for the travellers (and all the others, in this world).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 56\n        },\n        \"text\" : \"In a Book well-guarded (with Allah in the heaven i.e. Al-Lauh Al-Mahfuz).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 56\n        },\n        \"text\" : \"Which (that Book with Allah) none can touch but the purified (i.e. the angels).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 56\n        },\n        \"text\" : \"A Revelation (this Quran) from the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 56\n        },\n        \"text\" : \"And instead (of thanking Allah) for the provision He gives you, on the contrary, you deny Him (by disbelief)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 56\n        },\n        \"text\" : \"Then, if he (the dying person) be of the Muqarrabun (those brought near to Allah),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 56\n        },\n        \"text\" : \"Then there is safety and peace (from the Punishment of Allah) for (you as you are from) those on the Right Hand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 57\n        },\n        \"text\" : \"Whatsoever is in the heavens and the earth glorifies Allah, and He is the All-Mighty, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 57\n        },\n        \"text\" : \"His is the kingdom of the heavens and the earth, It is He Who gives life and causes death; and He is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 57\n        },\n        \"text\" : \"He is the First (nothing is before Him) and the Last (nothing is after Him), the Most High (nothing is above Him) and the Most Near (nothing is nearer than Him). And He is the All-Knower of every thing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 57\n        },\n        \"text\" : \"He it is Who created the heavens and the earth in six Days and then Istawa (rose over) the Throne (in a manner that suits His Majesty). He knows what goes into the earth and what comes forth from it, what descends from the heaven and what ascends thereto. And He is with you (by His Knowledge) wheresoever you may be. And Allah is the All-Seer of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 57\n        },\n        \"text\" : \"His is the kingdom of the heavens and the earth. And to Allah return all the matters (for decision).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 57\n        },\n        \"text\" : \"Believe in Allah and His Messenger (Muhammad SAW), and spend of that whereof He has made you trustees. And such of you as believe and spend (in Allah's Way), theirs will be a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 57\n        },\n        \"text\" : \"And what is the matter with you that you believe not in Allah! While the Messenger (Muhammad SAW) invites you to believe in your Lord (Allah), and He (Allah) has indeed taken your covenant, if you are real believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 57\n        },\n        \"text\" : \"It is He Who sends down manifest Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) to His slave (Muhammad SAW) that He may bring you out from darkness into light. And verily, Allah is to you full of kindness, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 57\n        },\n        \"text\" : \"And what is the matter with you that you spend not in the Cause of Allah? And to Allah belongs the heritage of the heavens and the earth. Not equal among you are those who spent and fought before the conquering (of Makkah) (with those among you who did so later). Such are higher in degree than those who spent and fought afterwards. But to all, Allah has promised the best (reward). And Allah is All-Aware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 57\n        },\n        \"text\" : \"Who is he that will lend to Allah a goodly loan, then (Allah) will increase it manifold to his credit (in repaying), and he will have (besides) a good reward (i.e. Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 57\n        },\n        \"text\" : \"On the Day you shall see the believing men and the believing women their light running forward before them and by their right hands. Glad tidings for you this Day! Gardens under which rivers flow (Paradise), to dwell therein forever! Truly, this is the great success!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 57\n        },\n        \"text\" : \"On the Day when the hypocrites men and women will say to the believers: \\\"Wait for us! Let us get something from your light!\\\" It will be said: \\\"Go back to your rear! Then seek a light!\\\" So a wall will be put up between them, with a gate therein. Inside it will be mercy, and outside it will be torment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 57\n        },\n        \"text\" : \"(The hypocrites) will call the believers: \\\"Were we not with you?\\\" The believers will reply: \\\"Yes! But you led yourselves into temptations, you looked forward for our destruction; you doubted (in Faith); and you were deceived by false desires, till the Command of Allah came to pass. And the chief deceiver (Satan) deceived you in respect of Allah.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 57\n        },\n        \"text\" : \"So this Day no ransom shall be taken from you (hypocrites), nor of those who disbelieved, (in the Oneness of Allah Islamic Monotheism). Your abode is the Fire, that is the proper place for you, and worst indeed is that destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 57\n        },\n        \"text\" : \"Has not the time come for the hearts of those who believe (in the Oneness of Allah - Islamic Monotheism) to be affected by Allah's Reminder (this Quran), and that which has been revealed of the truth, lest they become as those who received the Scripture [the Taurat (Torah) and the Injeel (Gospel)] before (i.e. Jews and Christians), and the term was prolonged for them and so their hearts were hardened? And many of them were Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 57\n        },\n        \"text\" : \"Know that Allah gives life to the earth after its death! Indeed We have made clear the Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.) to you, if you but understand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 57\n        },\n        \"text\" : \"Verily, those who give Sadaqat (i.e. Zakat and alms, etc.), men and women, and lend to Allah a goodly loan, it shall be increased manifold (to their credit), and theirs shall be an honourable good reward (i.e. Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 57\n        },\n        \"text\" : \"And those who believe in (the Oneness of) Allah and His Messengers, they are the Siddiqun (i.e. those followers of the Prophets who were first and foremost to believe in them), and the martyrs with their Lord, they shall have their reward and their light. But those who disbelieve (in the Oneness of Allah - Islamic Monotheism) and deny Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.), they shall be the dwellers of the blazing Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 57\n        },\n        \"text\" : \"Know that the life of this world is only play and amusement, pomp and mutual boasting among you, and rivalry in respect of wealth and children, as the likeness of vegetation after rain, thereof the growth is pleasing to the tiller; afterwards it dries up and you see it turning yellow; then it becomes straw. But in the Hereafter (there is) a severe torment (for the disbelievers, evil-doers), and (there is) Forgiveness from Allah and (His) Good Pleasure (for the believers, good-doers), whereas the life of this world is only a deceiving enjoyment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 57\n        },\n        \"text\" : \"Race one with another in hastening towards Forgiveness from your Lord (Allah), and towards Paradise, the width whereof is as the width of heaven and earth, prepared for those who believe in Allah and His Messengers. That is the Grace of Allah which He bestows on whom He pleases. And Allah is the Owner of Great Bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 57\n        },\n        \"text\" : \"No calamity befalls on the earth or in yourselves but is inscribed in the Book of Decrees (Al-Lauh Al-Mahfuz), before We bring it into existence. Verily, that is easy for Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 57\n        },\n        \"text\" : \"In order that you may not be sad over matters that you fail to get, nor rejoice because of that which has been given to you. And Allah likes not prideful boasters.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 57\n        },\n        \"text\" : \"Those who are misers and enjoin upon people miserliness (Allah is not in need of their charity). And whosoever turns away (from Faith Allah's Monotheism), then Allah is Rich (Free of all wants), Worthy of all praise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 57\n        },\n        \"text\" : \"Indeed We have sent Our Messengers with clear proofs, and revealed with them the Scripture and the Balance (justice) that mankind may keep up justice. And We brought forth iron wherein is mighty power (in matters of war), as well as many benefits for mankind, that Allah may test who it is that will help Him (His religion), and His Messengers in the unseen. Verily, Allah is All-Strong, All-Mighty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 57\n        },\n        \"text\" : \"And indeed, We sent Nuh (Noah) and Ibrahim (Abraham), and placed in their offspring Prophethood and Scripture, and among them there is he who is guided, but many of them are Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 57\n        },\n        \"text\" : \"Then, We sent after them, Our Messengers, and We sent 'Iesa (Jesus) - son of Maryam (Mary), and gave him the Injeel (Gospel). And We ordained in the hearts of those who followed him, compassion and mercy. But the Monasticism which they invented for themselves, We did not prescribe for them, but (they sought it) only to please Allah therewith, but that they did not observe it with the right observance. So We gave those among them who believed, their (due) reward, but many of them are Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 57\n        },\n        \"text\" : \"O you who believe [in Musa (Moses) (i.e. Jews) and 'Iesa (Jesus) (i.e. Christians)]! Fear Allah, and believe too in His Messenger (Muhammad SAW), He will give you a double portion of His Mercy, and He will give you a light by which you shall walk (straight), and He will forgive you. And Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 57\n        },\n        \"text\" : \"So that the people of the Scripture (Jews and Christians) may know that they have no power whatsoever over the Grace of Allah, and that (His) Grace is (entirely) in His Hand to bestow it on whomsoever He wills. And Allah is the Owner of Great Bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 58\n        },\n        \"text\" : \"Indeed Allah has heard the statement of her (Khaulah bint Tha'labah) that disputes with you (O Muhammad SAW) concerning her husband (Aus bin As-Samit), and complains to Allah. And Allah hears the argument between you both. Verily, Allah is All-Hearer, All-Seer.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 58\n        },\n        \"text\" : \"Those among you who make their wives unlawful (Az-Zihar) to them by saying to them \\\"You are like my mother's back.\\\" They cannot be their mothers. None can be their mothers except those who gave them birth. And verily, they utter an ill word and a lie. And verily, Allah is Oft-Pardoning, Oft-Forgiving.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 58\n        },\n        \"text\" : \"And those who make unlawful to them (their wives) (by Az-Zihar) and wish to free themselves from what they uttered, (the penalty) in that case (is) the freeing of a slave before they touch each other. That is an admonition to you (so that you may not return to such an ill thing). And Allah is All-Aware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 58\n        },\n        \"text\" : \"And he who finds not (the money for freeing a slave) must fast two successive months before they both touch each other. And for him who is unable to do so, he should feed sixty of Miskin (poor). That is in order that you may have perfect Faith in Allah and His Messenger. These are the limits set by Allah. And for disbelievers, there is a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 58\n        },\n        \"text\" : \"Verily, those who oppose Allah and His Messenger (Muhammad SAW) will be disgraced, as those before them (among the past nation), were disgraced. And We have sent down clear Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.). And for the disbelievers is a disgracing torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 58\n        },\n        \"text\" : \"On the Day when Allah will resurrect them all together (i.e. the Day of Resurrection) and inform them of what they did. Allah has kept account of it, while they have forgotten it. And Allah is Witness over all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 58\n        },\n        \"text\" : \"Have you not seen that Allah knows whatsoever is in the heavens and whatsoever is on the earth? There is no Najwa (secret counsel) of three, but He is their fourth (with His Knowledge, while He Himself is over the Throne, over the seventh heaven), nor of five but He is their sixth (with His Knowledge), not of less than that or more, but He is with them (with His Knowledge) wheresoever they may be; and afterwards on the Day of Resurrection, He will inform them of what they did. Verily, Allah is the All-Knower of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 58\n        },\n        \"text\" : \"Have you not seen those who were forbidden to hold secret counsels, and afterwards returned to that which they had been forbidden, and conspired together for sin and wrong doing and disobedience to the Messenger (Muhammad SAW). And when they come to you, they greet you with a greeting wherewith Allah greets you not, and say within themselves: \\\"Why should Allah punish us not for what we say?\\\" Hell will be sufficient for them, they will burn therein, and worst indeed is that destination!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 58\n        },\n        \"text\" : \"O you who believe! When you hold secret counsel, do it not for sin and wrong-doing, and disobedience towards the Messenger (Muhammad SAW) but do it for Al-Birr (righteousness) and Taqwa (virtues and piety); and fear Allah unto Whom you shall be gathered.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 58\n        },\n        \"text\" : \"Secret counsels (conspiracies) are only from Shaitan (Satan), in order that he may cause grief to the believers. But he cannot harm them in the least, except as Allah permits, and in Allah let the believers put their trust.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 58\n        },\n        \"text\" : \"O you who believe! When you are told to make room in the assemblies, (spread out and) make room. Allah will give you (ample) room (from His Mercy). And when you are told to rise up [for prayers, Jihad (holy fighting in Allah's Cause), or for any other good deed], rise up. Allah will exalt in degree those of you who believe, and those who have been granted knowledge. And Allah is Well-Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 58\n        },\n        \"text\" : \"O you who believe! When you (want to) consult the Messenger (Muhammad SAW) in private, spend something in charity before your private consultation. That will be better and purer for you. But if you find not (the means for it), then verily, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 58\n        },\n        \"text\" : \"Are you afraid of spending in charity before your private consultation (with him)? If then you do it not, and Allah has forgiven you, then (at least) perform As-Salat (Iqamat-as-Salat) and give Zakat and obey Allah (i.e. do all what Allah and His Prophet SAW order you to do). And Allah is All-Aware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 58\n        },\n        \"text\" : \"Have you (O Muhammad SAW) not seen those (hypocrites) who take for friends a people upon whom is the Wrath of Allah (i.e. Jews)? They are neither of you (Muslims) nor of them (Jews), and they swear to a lie while they know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 58\n        },\n        \"text\" : \"Allah has prepared for them a severe torment. Evil indeed is that which they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 58\n        },\n        \"text\" : \"They have made their oaths a screen (for their evil actions). Thus they hinder (men) from the Path of Allah, so they shall have a humiliating torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 58\n        },\n        \"text\" : \"Their children and their wealth will avail them nothing against Allah. They will be (the) dwellers of the Fire, to dwell therein forever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 58\n        },\n        \"text\" : \"On the Day when Allah will resurrect them all together (for their account), then they will swear to Him as they swear to you (O Muslims). And they think that they have something (to stand upon). Verily, they are liars!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 58\n        },\n        \"text\" : \"Shaitan (Satan) has overtaken them. So he has made them forget the remembrance of Allah. They are the party of Shaitan (Satan). Verily, it is the party of Shaitan (Satan) that will be the losers!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 58\n        },\n        \"text\" : \"Those who oppose Allah and His Messenger (Muhammad SAW), they will be among the lowest (most humiliated).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 58\n        },\n        \"text\" : \"Allah has decreed: \\\"Verily! It is I and My Messengers who shall be the victorious.\\\" Verily, Allah is All-Powerful, All-Mighty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 58\n        },\n        \"text\" : \"You (O Muhammad SAW) will not find any people who believe in Allah and the Last Day, making friendship with those who oppose Allah and His Messenger (Muhammad SAW), even though they were their fathers, or their sons, or their brothers, or their kindred (people). For such He has written Faith in their hearts, and strengthened them with Ruh (proofs, light and true guidance) from Himself. And We will admit them to Gardens (Paradise) under which rivers flow, to dwell therein (forever). Allah is pleased with them, and they with Him. They are the Party of Allah. Verily, it is the Party of Allah that will be the successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 59\n        },\n        \"text\" : \"Whatsoever is in the heavens and whatsoever is on the earth glorifies Allah. And He is the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 59\n        },\n        \"text\" : \"He it is Who drove out the disbelievers among the people of the Scripture (i.e. the Jews of the tribe of Bani An-Nadir) from their homes at the first gathering. You did not think that they would get out. And they thought that their fortresses would defend them from Allah! But Allah's (Torment) reached them from a place whereof they expected it not, and He cast terror into their hearts, so that they destroyed their own dwellings with their own hands and the hands of the believers. Then take admonition, O you with eyes (to see).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 59\n        },\n        \"text\" : \"And had it not been that Allah had decreed exile for them, He would certainly have punished them in this world, and in the Hereafter theirs shall be the torment of the Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 59\n        },\n        \"text\" : \"That is because they opposed Allah and His Messenger (Muhammad SAW). And whosoever opposes Allah, then verily, Allah is Severe in punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 59\n        },\n        \"text\" : \"What you (O Muslims) cut down of the palm-trees (of the enemy), or you left them standing on their stems, it was by Leave of Allah, and in order that He might disgrace the Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 59\n        },\n        \"text\" : \"And what Allah gave as booty (Fai') to His Messenger (Muhammad SAW) from them, for which you made no expedition with either cavalry or camelry. But Allah gives power to His Messengers over whomsoever He wills. And Allah is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 59\n        },\n        \"text\" : \"What Allah gave as booty (Fai') to His Messenger (Muhammad SAW) from the people of the townships, - it is for Allah, His Messenger (Muhammad SAW), the kindred (of Messenger Muhammad SAW), the orphans, Al-Masakin (the poor), and the wayfarer, in order that it may not become a fortune used by the rich among you. And whatsoever the Messenger (Muhammad SAW) gives you, take it, and whatsoever he forbids you, abstain (from it), and fear Allah. Verily, Allah is Severe in punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 59\n        },\n        \"text\" : \"(And there is also a share in this booty) for the poor emigrants, who were expelled from their homes and their property, seeking Bounties from Allah and to please Him. And helping Allah (i.e. helping His religion) and His Messenger (Muhammad SAW). Such are indeed the truthful (to what they say);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 59\n        },\n        \"text\" : \"Have you (O Muhammad SAW) not observed the hypocrites who say to their friends among the people of the Scripture who disbelieve: \\\"(By Allah) If you are expelled, we (too) indeed will go out with you, and we shall never obey any one against you, and if you are attacked (in fight), we shall indeed help you.\\\" But Allah is Witness, that they verily, are liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 59\n        },\n        \"text\" : \"Verily, you (believers in the Oneness of Allah - Islamic Monotheism) are more awful as a fear in their (Jews of Bani An-Nadir) breasts than Allah. That is because they are a people who comprehend not (the Majesty and Power of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 59\n        },\n        \"text\" : \"They fight not against you even together, except in fortified townships, or from behind walls. Their enmity among themselves is very great. You would think they were united, but their hearts are divided, that is because they are a people who understand not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 59\n        },\n        \"text\" : \"(Their allies deceived them) like Shaitan (Satan), when he says to man: \\\"Disbelieve in Allah.\\\" But when (man) disbelieves in Allah, Shaitan (Satan) says: \\\"I am free of you, I fear Allah, the Lord of the 'Alamin (mankind, jinns and all that exists)!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 59\n        },\n        \"text\" : \"So the end of both will be that they will be in the Fire, abiding therein. Such is the recompense of the Zalimun (i.e. polytheists, wrong-doers, disbelievers in Allah and in His Oneness, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 59\n        },\n        \"text\" : \"O you who believe! Fear Allah and keep your duty to Him. And let every person look to what he has sent forth for the morrow, and fear Allah. Verily, Allah is All-Aware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 59\n        },\n        \"text\" : \"And be not like those who forgot Allah (i.e. became disobedient to Allah) and He caused them to forget their ownselves, (let them to forget to do righteous deeds). Those are the Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 59\n        },\n        \"text\" : \"Had We sent down this Quran on a mountain, you would surely have seen it humbling itself and rending asunder by the fear of Allah. Such are the parables which We put forward to mankind that they may reflect.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 59\n        },\n        \"text\" : \"He is Allah, than Whom there is La ilaha illa Huwa (none has the right to be worshipped but He) the All-Knower of the unseen and the seen (open). He is the Most Beneficent, the Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 59\n        },\n        \"text\" : \"He is Allah than Whom there is La ilaha illa Huwa (none has the right to be worshipped but He) the King, the Holy, the One Free from all defects, the Giver of security, the Watcher over His creatures, the All-Mighty, the Compeller, the Supreme. Glory be to Allah! (High is He) above all that they associate as partners with Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 59\n        },\n        \"text\" : \"He is Allah, the Creator, the Inventor of all things, the Bestower of forms. To Him belong the Best Names. All that is in the heavens and the earth glorify Him. And He is the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 60\n        },\n        \"text\" : \"O you who believe! Take not My enemies and your enemies (i.e. disbelievers and polytheists, etc.) as friends, showing affection towards them, while they have disbelieved in what has come to you of the truth (i.e. Islamic Monotheism, this Quran, and Muhammad SAW), and have driven out the Messenger (Muhammad SAW) and yourselves (from your homeland) because you believe in Allah your Lord! If you have come forth to strive in My Cause and to seek My Good Pleasure, (then take not these disbelievers and polytheists, etc., as your friends). You show friendship to them in secret, while I am All-Aware of what you conceal and what you reveal. And whosoever of you (Muslims) does that, then indeed he has gone (far) astray, (away) from the Straight Path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 60\n        },\n        \"text\" : \"Neither your relatives nor your children will benefit you on the Day of Resurrection (against Allah). He will judge between you. And Allah is the All-Seer of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 60\n        },\n        \"text\" : \"Indeed there has been an excellent example for you in Ibrahim (Abraham) and those with him, when they said to their people: \\\"Verily, we are free from you and whatever you worship besides Allah, we have rejected you, and there has started between us and you, hostility and hatred for ever, until you believe in Allah Alone,\\\" except the saying of Ibrahim (Abraham) to his father: \\\"Verily, I will ask for forgiveness (from Allah) for you, but I have no power to do anything for you before Allah.\\\" Our Lord! In You (Alone) we put our trust, and to You (Alone) we turn in repentance, and to You (Alone) is (our) final Return,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 60\n        },\n        \"text\" : \"\\\"Our Lord! Make us not a trial for the disbelievers, and forgive us, Our Lord! Verily, You, only You are the All-Mighty, the All-Wise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 60\n        },\n        \"text\" : \"Certainly, there has been in them an excellent example for you to follow, for those who look forward to (the Meeting with) Allah (for the reward from Him) and the Last Day. And whosoever turn away, then verily, Allah is Rich (Free of all wants), Worthy of all Praise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 60\n        },\n        \"text\" : \"Perhaps Allah will make friendship between you and those whom you hold as enemies. And Allah has power (over all things), and Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 60\n        },\n        \"text\" : \"Allah does not forbid you to deal justly and kindly with those who fought not against you on account of religion and did not drive you out of your homes. Verily, Allah loves those who deal with equity.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 60\n        },\n        \"text\" : \"It is only as regards those who fought against you on account of religion, and have driven you out of your homes, and helped to drive you out, that Allah forbids you to befriend them. And whosoever will befriend them, then such are the Zalimun (wrong-doers those who disobey Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 60\n        },\n        \"text\" : \"O you who believe! When believing women come to you as emigrants, examine them, Allah knows best as to their Faith, then if you ascertain that they are true believers, send them not back to the disbelievers, they are not lawful (wives) for the disbelievers nor are the disbelievers lawful (husbands) for them. But give the disbelievers that (amount of money) which they have spent [as their Mahr] to them. And there will be no sin on you to marry them if you have paid their Mahr to them. Likewise hold not the disbelieving women as wives, and ask for (the return of) that which you have spent (as Mahr) and let them (the disbelievers, etc.) ask back for that which they have spent. That is the Judgement of Allah. He judges between you. And Allah is All-Knowing, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 60\n        },\n        \"text\" : \"And if any of your wives have gone from you to the disbelievers, and you have an accession (by the coming over of a woman from the other side), then pay to those whose wives have gone, the equivalent of what they had spent (on their Mahr). And fear Allah in Whom you believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 60\n        },\n        \"text\" : \"O Prophet! When believing women come to you to give you the Bai'a (pledge), that they will not associate anything in worship with Allah, that they will not steal, that they will not commit illegal sexual intercourse, that they will not kill their children, that they will not utter slander, intentionally forging falsehood (i.e. by making illegal children belonging to their husbands), and that they will not disobey you in any Ma'ruf (Islamic Monotheism and all that which Islam ordains) then accept their Bai'a (pledge), and ask Allah to forgive them, Verily, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 60\n        },\n        \"text\" : \"O you who believe! Take not as friends the people who incurred the Wrath of Allah (i.e. the Jews). Surely, they have been in despair to receive any good in the Hereafter, just as the disbelievers have been in despair about those (buried) in graves (that they will not be resurrected on the Day of Resurrection).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 61\n        },\n        \"text\" : \"Whatsoever is in the heavens and whatsoever is on the earth glorifies Allah. And He is the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 61\n        },\n        \"text\" : \"Most hateful it is with Allah that you say that which you do not do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 61\n        },\n        \"text\" : \"Verily, Allah loves those who fight in His Cause in rows (ranks) as if they were a solid structure.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 61\n        },\n        \"text\" : \"And (remember) when Musa (Moses) said to his people: \\\"O my people! Why do you hurt me while you know certainly that I am the Messenger of Allah to you? So when they turned away (from the Path of Allah), Allah turned their hearts away (from the Right Path). And Allah guides not the people who are Fasiqun (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 61\n        },\n        \"text\" : \"And (remember) when 'Iesa (Jesus), son of Maryam (Mary), said: \\\"O Children of Israel! I am the Messenger of Allah unto you confirming the Taurat [(Torah) which came] before me, and giving glad tidings of a Messenger to come after me, whose name shall be Ahmad. But when he (Ahmad i.e. Muhammad SAW) came to them with clear proofs, they said: \\\"This is plain magic.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 61\n        },\n        \"text\" : \"And who does more wrong than the one who invents a lie against Allah, while he is being invited to Islam? And Allah guides not the people who are Zalimun (polytheists, wrong-doers and disbelievers) folk.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 61\n        },\n        \"text\" : \"They intend to put out the Light of Allah (i.e. the religion of Islam, this Quran, and Prophet Muhammad SAW) with their mouths. But Allah will complete His Light even though the disbelievers hate (it).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 61\n        },\n        \"text\" : \"He it is Who has sent His Messenger (Muhammad SAW) with guidance and the religion of truth (Islamic Monotheism) to make it victorious over all (other) religions even though the Mushrikun (polytheists, pagans, idolaters, and disbelievers in the Oneness of Allah and in His Messenger Muhammed SAW) hate (it).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 61\n        },\n        \"text\" : \"O You who believe! Shall I guide you to a commerce that will save you from a painful torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 61\n        },\n        \"text\" : \"That you believe in Allah and His Messenger (Muhammad SAW), and that you strive hard and fight in the Cause of Allah with your wealth and your lives, that will be better for you, if you but know!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 61\n        },\n        \"text\" : \"And also (He will give you) another (blessing) which you love, help from Allah (against your enemies) and a near victory. And give glad tidings (O Muhammad SAW) to the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 61\n        },\n        \"text\" : \"O you who believe! Be you helpers (in the Cause) of Allah as said 'Iesa (Jesus), son of Maryam (Mary), to Al-Hawariun (the disciples): \\\"Who are my helpers (in the Cause) of Allah?\\\" Al-Hawarieen (the disciples) said: \\\"We are Allah's helpers\\\" (i.e. we will strive in His Cause!). Then a group of the Children of Israel believed and a group disbelieved. So We gave power to those who believed against their enemies, and they became the uppermost.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 62\n        },\n        \"text\" : \"Whatsoever is in the heavens and whatsoever is on the earth glorifies Allah, the King (of everything), the Holy, the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 62\n        },\n        \"text\" : \"And He has sent him (Prophet Muhammad SAW) also to others among them (Muslims) who have not yet joined them (but they will come). And He (Allah) is the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 62\n        },\n        \"text\" : \"That is the Grace of Allah, which He bestows on whom He wills. And Allah is the Owner of Mighty Grace.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 62\n        },\n        \"text\" : \"The likeness of those who were entrusted with the (obligation of the) Taurat (Torah) (i.e. to obey its commandments and to practise its legal laws), but who subsequently failed in those (obligations), is as the likeness of a donkey who carries huge burdens of books (but understands nothing from them). How bad is the example (or the likeness) of people who deny the Ayat (proofs, evidences, verses, signs, revelations, etc.) of Allah. And Allah guides not the people who are Zalimun (polytheists, wrong-doers, disbelievers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 62\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"O you Jews! If you pretend that you are friends of Allah, to the exclusion of (all) other mankind, then long for death if you are truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 62\n        },\n        \"text\" : \"But they will never long for it (death), because of what (deeds) their hands have sent before them! And Allah knows well the Zalimun (polytheists, wrong-doers, disbelievers, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 62\n        },\n        \"text\" : \"Say (to them): \\\"Verily, the death from which you flee will surely meet you, then you will be sent back to (Allah), the All-Knower of the unseen and the seen, and He will tell you what you used to do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 62\n        },\n        \"text\" : \"O you who believe (Muslims)! When the call is proclaimed for the Salat (prayer) on the day of Friday (Jumu'ah prayer), come to the remembrance of Allah [Jumu'ah religious talk (Khutbah) and Salat (prayer)] and leave off business (and every other thing), that is better for you if you did but know!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 62\n        },\n        \"text\" : \"Then when the (Jumu'ah) Salat (prayer) is finished, you may disperse through the land, and seek the Bounty of Allah (by working, etc.), and remember Allah much, that you may be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 62\n        },\n        \"text\" : \"And when they see some merchandise or some amusement [beating of Tambur (drum) etc.] they disperse headlong to it, and leave you (Muhammad SAW) standing [while delivering Jumu'ah's religious talk (Khutbah)]. Say \\\"That which Allah has is better than any amusement or merchandise! And Allah is the Best of providers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 63\n        },\n        \"text\" : \"When the hypocrites come to you (O Muhammad SAW), they say: \\\"We bear witness that you are indeed the Messenger of Allah.\\\" Allah knows that you are indeed His Messenger and Allah bears witness that the hypocrites are liars indeed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 63\n        },\n        \"text\" : \"They have made their oaths a screen (for their hypocrisy). Thus they hinder (men) from the Path of Allah. Verily, evil is what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 63\n        },\n        \"text\" : \"And when you look at them, their bodies please you; and when they speak, you listen to their words. They are as blocks of wood propped up. They think that every cry is against them. They are the enemies, so beware of them. May Allah curse them! How are they denying (or deviating from) the Right Path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 63\n        },\n        \"text\" : \"And when it is said to them: \\\"Come, so that the Messenger of Allah may ask forgiveness from Allah for you\\\", they turn aside their heads, and you would see them turning away their faces in pride.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 63\n        },\n        \"text\" : \"It is equal to them whether you (Muhammad SAW) ask forgiveness or ask not forgiveness for them, Allah will never forgive them. Verily, Allah guides not the people who are the Fasiqin (rebellious, disobedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 63\n        },\n        \"text\" : \"They are the ones who say: \\\"Spend not on those who are with Allah's Messenger, until they desert him.\\\" And to Allah belong the treasures of the heavens and the earth, but the hypocrites comprehend not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 63\n        },\n        \"text\" : \"They (hyprocrites) say: \\\"If we return to Al-Madinah, indeed the more honourable ('Abdullah bin Ubai bin Salul, the chief of hyprocrites at Al-Madinah) will expel therefrom the meaner (i.e. Allah's Messenger SAW).\\\" But honour, power and glory belong to Allah, His Messenger (Muhammad SAW), and to the believers, but the hypocrites know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 63\n        },\n        \"text\" : \"O you who believe! Let not your properties or your children divert you from the remembrance of Allah. And whosoever does that, then they are the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 63\n        },\n        \"text\" : \"And Allah grants respite to none when his appointed time (death) comes. And Allah is All-Aware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 64\n        },\n        \"text\" : \"Whatsoever is in the heavens and whatsoever is on the earth glorifies Allah. His is the dominion, and to Him belong all the praises and thanks, and He is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 64\n        },\n        \"text\" : \"He it is Who created you, then some of you are disbelievers and some of you are believers. And Allah is All-Seer of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 64\n        },\n        \"text\" : \"He knows what is in the heavens and on earth, and He knows what you conceal and what you reveal. And Allah is the All-Knower of what is in the breasts (of men).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 64\n        },\n        \"text\" : \"That was because there came to them their Messengers with clear proofs (signs), but they said: \\\"Shall mere men guide us?\\\" So they disbelieved and turned away (from the truth), and Allah was not in need (of them). And Allah is Rich (Free of all wants), Worthy of all praise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 64\n        },\n        \"text\" : \"The disbelievers pretend that they will never be resurrected (for the Account). Say (O Muhammad SAW): \\\"Yes! By my Lord, you will certainly be resurrected, then you will be informed of (and recompensed for) what you did, and that is easy for Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 64\n        },\n        \"text\" : \"Therefore, believe in Allah and His Messenger (Muhammad SAW), and in the Light (this Quran) which We have sent down. And Allah is All-Aware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 64\n        },\n        \"text\" : \"(And remember) the Day when He will gather you (all) on the Day of Gathering, that will be the Day of mutual loss and gain (i.e. loss for the disbelievers as they will enter the Hell-fire and gain for the believers as they will enter Paradise). And whosoever believes in Allah and performs righteous good deeds, He will remit from him his sins, and will admit him to Gardens under which rivers flow (Paradise) to dwell therein forever, that will be the great success.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 64\n        },\n        \"text\" : \"But those who disbelieved (in the Oneness of Allah - Islamic Monotheism) and denied Our Ayat (proofs, evidences, verses, lessons, signs, revelations, etc.), they will be the dwellers of the Fire, to dwell therein forever. And worst indeed is that destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 64\n        },\n        \"text\" : \"No calamity befalls, but with the Leave [i.e. decision and Qadar (Divine Preordainments)] of Allah, and whosoever believes in Allah, He guides his heart [to the true Faith with certainty, i.e. what has befallen him was already written for him by Allah from the Qadar (Divine Preordainments)], and Allah is the All-Knower of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 64\n        },\n        \"text\" : \"Obey Allah, and obey the Messenger (Muhammad SAW), but if you turn away, then the duty of Our Messenger is only to convey (the Message) clearly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 64\n        },\n        \"text\" : \"Allah! La ilaha illa Huwa (none has the right to be worshipped but He), and in Allah (Alone), therefore, let the believers put their trust.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 64\n        },\n        \"text\" : \"O you who believe! Verily, among your wives and your children there are enemies for you (i.e. may stop you from the obedience of Allah), therefore beware of them! But if you pardon (them) and overlook, and forgive (their faults), then verily, Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 64\n        },\n        \"text\" : \"Your wealth and your children are only a trial, whereas Allah! With Him is a great reward (Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 64\n        },\n        \"text\" : \"So keep your duty to Allah and fear Him as much as you can; listen and obey; and spend in charity, that is better for yourselves. And whosoever is saved from his own covetousness, then they are the successful ones.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 64\n        },\n        \"text\" : \"If you lend to Allah a goodly loan (i.e. spend in Allah's Cause) He will double it for you, and will forgive you. And Allah is Most Ready to appreciate and to reward, Most Forbearing,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 64\n        },\n        \"text\" : \"All-Knower of the unseen and seen, the All-Mighty, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 65\n        },\n        \"text\" : \"O Prophet (SAW)! When you divorce women, divorce them at their 'Iddah (prescribed periods), and count (accurately) their 'Iddah (periods). And fear Allah your Lord (O Muslims), and turn them not out of their (husband's) homes, nor shall they (themselves) leave, except in case they are guilty of some open illegal sexual intercourse. And those are the set limits of Allah. And whosoever transgresses the set limits of Allah, then indeed he has wronged himself. You (the one who divorces his wife) know not, it may be that Allah will afterward bring some new thing to pass (i.e. to return her back to you if that was the first or second divorce).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 65\n        },\n        \"text\" : \"Then when they are about to fulfil their term appointed, either take them back in a good manner or part with them in a good manner. And take for witness two just persons from among you (Muslims). And establish the witness for Allah. That will be an admonition given to him who believes in Allah and the Last Day. And whosoever fears Allah and keeps his duty to Him, He will make a way for him to get out (from every difficulty).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 65\n        },\n        \"text\" : \"And He will provide him from (sources) he never could imagine. And whosoever puts his trust in Allah, then He will suffice him. Verily, Allah will accomplish his purpose. Indeed Allah has set a measure for all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 65\n        },\n        \"text\" : \"And those of your women as have passed the age of monthly courses, for them the 'Iddah (prescribed period), if you have doubts (about their periods), is three months, and for those who have no courses [(i.e. they are still immature) their 'Iddah (prescribed period) is three months likewise, except in case of death]. And for those who are pregnant (whether they are divorced or their husbands are dead), their 'Iddah (prescribed period) is until they deliver (their burdens), and whosoever fears Allah and keeps his duty to Him, He will make his matter easy for him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 65\n        },\n        \"text\" : \"That is the Command of Allah, which He has sent down to you, and whosoever fears Allah and keeps his duty to Him, He will remit his sins from him, and will enlarge his reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 65\n        },\n        \"text\" : \"Let the rich man spend according to his means, and the man whose resources are restricted, let him spend according to what Allah has given him. Allah puts no burden on any person beyond what He has given him. Allah will grant after hardship, ease.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 65\n        },\n        \"text\" : \"And many a town (population) revolted against the Command of its Lord and His Messengers, and We called it to a severe account (i.e. torment in this worldly life), and shall punish it with a horrible torment (in Hell, in the Hereafter).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 65\n        },\n        \"text\" : \"Allah has prepared for them a severe torment. So fear Allah and keep your duty to Him, O men of understanding who have believed! - Allah has indeed sent down to you a Reminder (this Quran).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 65\n        },\n        \"text\" : \"(And has also sent to you) a Messenger (Muhammad SAW), who recites to you the Verses of Allah (the Quran) containing clear explanations, that He may take out, those who believe and do righteous good deeds from the darkness (of polytheism and disbelief) to the light (of Monotheism and true Faith). And whosoever believes in Allah and performs righteous good deeds, He will admit him into Gardens under which rivers flow (Paradise), to dwell therein forever. Allah has indeed granted for him an excellent provision.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 65\n        },\n        \"text\" : \"It is Allah Who has created seven heavens and of the earth the like thereof (i.e. seven). His Command descends between them (heavens and earth), that you may know that Allah has power over all things, and that Allah surrounds (comprehends) all things in (His) Knowledge.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 66\n        },\n        \"text\" : \"O Prophet! Why do you ban (for yourself) that which Allah has made lawful to you, seeking to please your wives? And Allah is Oft-Forgiving, Most Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 66\n        },\n        \"text\" : \"Allah has already ordained for you (O men), the dissolution of your oaths. And Allah is your Maula (Lord, or Master, or Protector, etc.) and He is the All-Knower, the All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 66\n        },\n        \"text\" : \"And (remember) when the Prophet (SAW) disclosed a matter in confidence to one of his wives (Hafsah), so when she told it (to another i.e. 'Aishah), and Allah made it known to him, he informed part thereof and left a part. Then when he told her (Hafsah) thereof, she said: \\\"Who told you this?\\\" He said: \\\"The All-Knower, the All-Aware (Allah) has told me\\\".\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 66\n        },\n        \"text\" : \"If you two (wives of the Prophet SAW, namely 'Aishah and Hafsah) turn in repentance to Allah, (it will be better for you), your hearts are indeed so inclined (to oppose what the Prophet SAW likes), but if you help one another against him (Muhammad SAW), then verily, Allah is his Maula (Lord, or Master, or Protector, etc.), and Jibrael (Gabriel), and the righteous among the believers, and furthermore, the angels are his helpers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 66\n        },\n        \"text\" : \"It may be if he divorced you (all) that his Lord will give him instead of you, wives better than you, Muslims (who submit to Allah), believers, obedient to Allah, turning to Allah in repentance, worshipping Allah sincerely, fasting or emigrants (for Allah's sake), previously married and virgins.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 66\n        },\n        \"text\" : \"O you who believe! Ward off from yourselves and your families a Fire (Hell) whose fuel is men and stones, over which are (appointed) angels stern (and) severe, who disobey not, (from executing) the Commands they receive from Allah, but do that which they are commanded.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 66\n        },\n        \"text\" : \"(It will be said in the Hereafter) O you who disbelieve (in the Oneness of Allah - Islamic Monotheism)! Make no excuses this Day! You are being requited only for what you used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 66\n        },\n        \"text\" : \"O you who believe! Turn to Allah with sincere repentance! It may be that your Lord will remit from you your sins, and admit you into Gardens under which rivers flow (Paradise) the Day that Allah will not disgrace the Prophet (Muhammad SAW) and those who believe with him, their Light will run forward before them and with (their Records Books of deeds) in their right hands they will say: \\\"Our Lord! Keep perfect our Light for us [and do not put it off till we cross over the Sirat (a slippery bridge over the Hell) safely] and grant us forgiveness. Verily, You are Able to do all things.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 66\n        },\n        \"text\" : \"Allah sets forth an example for those who disbelieve, the wife of Nuh (Noah) and the wife of Lout (Lot). They were under two of our righteous slaves, but they both betrayed their (husbands by rejecting their doctrine) so they [Nuh (Noah) and Lout (Lot)] benefited them (their respective wives) not, against Allah, and it was said: \\\"Enter the Fire along with those who enter!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 66\n        },\n        \"text\" : \"And Allah has set forth an example for those who believe, the wife of Fir'aun (Pharaoh), when she said: \\\"My Lord! Build for me a home with You in Paradise, and save me from Fir'aun (Pharaoh) and his work, and save me from the people who are Zalimun (polytheists, wrong-doers and disbelievers in Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 66\n        },\n        \"text\" : \"And Maryam (Mary), the daughter of 'Imran who guarded her chastity; and We breathed into (the sleeve of her shirt or her garment) through Our Ruh [i.e. Jibrael (Gabriel)], and she testified to the truth of the Words of her Lord [i.e. believed in the Words of Allah: \\\"Be!\\\" and he was; that is 'Iesa (Jesus) - son of Maryam (Mary); as a Messenger of Allah], and (also believed in) His Scriptures, and she was of the Qanitin (i.e. obedient to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 67\n        },\n        \"text\" : \"Blessed is He in Whose Hand is the dominion, and He is Able to do all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 67\n        },\n        \"text\" : \"Who has created death and life, that He may test you which of you is best in deed. And He is the All-Mighty, the Oft-Forgiving;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 67\n        },\n        \"text\" : \"And for those who disbelieve in their Lord (Allah) is the torment of Hell, and worst indeed is that destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 67\n        },\n        \"text\" : \"They will say: \\\"Yes indeed; a warner did come to us, but we belied him and said: 'Allah never sent down anything (of revelation), you are only in great error.'\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 67\n        },\n        \"text\" : \"And whether you keep your talk secret or disclose it, verily, He is the All-Knower of what is in the breasts (of men).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 67\n        },\n        \"text\" : \"Should not He Who has created know? And He is the Most Kind and Courteous (to His slaves) All-Aware (of everything).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 67\n        },\n        \"text\" : \"Do you feel secure that He, Who is over the heaven (Allah), will not cause the earth to sink with you, then behold it shakes (as in an earthquake)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 67\n        },\n        \"text\" : \"Or do you feel secure that He, Who is over the heaven (Allah), will not send against you a violent whirlwind? Then you shall know how (terrible) has been My Warning?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 67\n        },\n        \"text\" : \"And indeed those before them belied (the Messengers of Allah), then how terrible was My denial (punishment)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 67\n        },\n        \"text\" : \"Do they not see the birds above them, spreading out their wings and folding them in? None upholds them except the Most Beneficent (Allah). Verily, He is the All-Seer of everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 67\n        },\n        \"text\" : \"Say: \\\"It is He Who has created you from the earth, and to Him shall you be gathered (in the Hereafter).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 67\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"The knowledge (of its exact time) is with Allah only, and I am only a plain warner.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 67\n        },\n        \"text\" : \"But when they will see it (the torment on the Day of Resurrection) approaching, the faces of those who disbelieve will be different (black, sad, and in grieve), and it will be said (to them): \\\"This is (the promise) which you were calling for!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 67\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Tell me! If Allah destroys me, and those with me, or He bestows His Mercy on us, - who can save the disbelievers from a painful torment?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 67\n        },\n        \"text\" : \"Say: \\\"He is the Most Beneficent (Allah), in Him we believe, and in Him we put our trust. So you will come to know who is it that is in manifest error.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 67\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"Tell me! If (all) your water were to be sunk away, who then can supply you with flowing (spring) water?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 68\n        },\n        \"text\" : \"Nun. [These letters (Nun, etc.) are one of the miracles of the Quran, and none but Allah (Alone) knows their meanings]. By the pen and what the (angels) write (in the Records of men).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 68\n        },\n        \"text\" : \"So (O Muhammad SAW) obey not the deniers [(of Islamic Monotheism those who belie the Verses of Allah), the Oneness of Allah, and the Messenger of Allah (Muhammad SAW), etc.]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 68\n        },\n        \"text\" : \"Cruel, after all that base-born (of illegitimate birth),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 68\n        },\n        \"text\" : \"We shall brand him over the nose!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 68\n        },\n        \"text\" : \"Without saying: In sha' Allah (If Allah will).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 68\n        },\n        \"text\" : \"Then they called out one to another as soon as the morning broke,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 68\n        },\n        \"text\" : \"No Miskin (poor man) shall enter upon you into it today.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 68\n        },\n        \"text\" : \"The best among them said: \\\"Did I not tell you: why do you not say: In sha' Allah (If Allah will).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 68\n        },\n        \"text\" : \"Shall We then treat the (submitting) Muslims like the Mujrimun (criminals, polytheists and disbelievers, etc.)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 68\n        },\n        \"text\" : \"That you shall have all that you choose?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 68\n        },\n        \"text\" : \"(Remember) the Day when the Shin shall be laid bare (i.e. the Day of Resurrection) and they shall be called to prostrate (to Allah), but they (hypocrites) shall not be able to do so,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 68\n        },\n        \"text\" : \"Their eyes will be cast down, ignominy will cover them; they used to be called to prostrate (offer prayers), while they were healthy and good (in the life of the world, but they did not).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 68\n        },\n        \"text\" : \"Then leave Me Alone with such as belie this Quran. We shall punish them gradually from directions they perceive not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 68\n        },\n        \"text\" : \"But it is nothing else than a Reminder to all the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 69\n        },\n        \"text\" : \"Which Allah imposed on them for seven nights and eight days in succession, so that you could see men lying overthrown (destroyed), as if they were hollow trunks of date-palms!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 69\n        },\n        \"text\" : \"And the earth and the mountains shall be removed from their places, and crushed with a single crushing,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 69\n        },\n        \"text\" : \"Then on that Day shall the (Great) Event befall,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 69\n        },\n        \"text\" : \"That Day shall you be brought to Judgement, not a secret of you will be hidden.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 69\n        },\n        \"text\" : \"\\\"Surely, I did believe that I shall meet my Account!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 69\n        },\n        \"text\" : \"So he shall be in a life, well-pleasing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 69\n        },\n        \"text\" : \"Verily, He used not to believe in Allah, the Most Great,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 69\n        },\n        \"text\" : \"That this is verily the word of an honoured Messenger [i.e. Jibrael (Gabriel) or Muhammad SAW which he has brought from Allah].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 69\n        },\n        \"text\" : \"This is the Revelation sent down from the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 69\n        },\n        \"text\" : \"And if he (Muhammad SAW) had forged a false saying concerning Us (Allah),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 70\n        },\n        \"text\" : \"A questioner asked concerning a torment about to befall\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 70\n        },\n        \"text\" : \"From Allah, the Lord of the ways of ascent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 70\n        },\n        \"text\" : \"Though they shall be made to see one another [(i.e. on the Day of Resurrection), there will be none but see his father, children and relatives, but he will neither speak to them nor will ask them for any help)], - the Mujrim, (criminal, sinner, disbeliever, etc.) would desire to ransom himself from the punishment of that Day by his children.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 70\n        },\n        \"text\" : \"And all that are in the earth, so that it might save him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 70\n        },\n        \"text\" : \"Calling: \\\"[O Kafir (O disbeliever in Allah, His angels, His Book, His Messengers, Day of Resurrection and in Al-Qadar (Divine Preordainments), O Mushrik (O polytheist, disbeliever in the Oneness of Allah)] (all) such as turn their backs and turn away their faces (from Faith) [picking and swallowing them up from that great gathering of mankind (on the Day of Resurrection) just as a bird picks up a food-grain from the earth with its beak and swallows it up] [Tafsir Al-Qurtubi, Vol. 18, Page 289]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 70\n        },\n        \"text\" : \"And collect (wealth) and hide it (from spending it in the Cause of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 70\n        },\n        \"text\" : \"Such shall dwell in the Gardens (i.e. Paradise) honoured.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 70\n        },\n        \"text\" : \"So what is the matter with those who disbelieve that they hasten to listen from you (O Muhammad SAW), in order to belie you and to mock at you, and at Allah's Book (this Quran).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 70\n        },\n        \"text\" : \"So I swear by the Lord of all [the three hundred and sixty (360)] points of sunrise and sunset in the east and the west that surely We are Able\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 70\n        },\n        \"text\" : \"With their eyes lowered in fear and humility, ignominy covering them (all over)! That is the Day which they were promised!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 71\n        },\n        \"text\" : \"\\\"That you should worship Allah (Alone), be dutiful to Him, and obey me,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 71\n        },\n        \"text\" : \"\\\"He (Allah) will forgive you of your sins and respite you to an appointed term. Verily, the term of Allah when it comes, cannot be delayed, if you but knew.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 71\n        },\n        \"text\" : \"He said: \\\"O my Lord! Verily, I have called my people night and day (i.e. secretly and openly to accept the doctrine of Islamic Monotheism).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 71\n        },\n        \"text\" : \"\\\"But all my calling added nothing but to (their) flight (from the truth).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 71\n        },\n        \"text\" : \"\\\"And verily! Every time I called unto them that You might forgive them, they thrust their fingers into their ears, covered themselves up with their garments, and persisted (in their refusal), and magnified themselves in pride.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 71\n        },\n        \"text\" : \"\\\"Then verily, I called to them openly (aloud);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 71\n        },\n        \"text\" : \"What is the matter with you, [that you fear not Allah (His punishment), and] you hope not for reward (from Allah or you believe not in His Oneness).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 71\n        },\n        \"text\" : \"See you not how Allah has created the seven heavens one above another,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 71\n        },\n        \"text\" : \"And Allah has brought you forth from the (dust of) earth. [Tafsir At-Tabari, Vol. 29, Page 97].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 71\n        },\n        \"text\" : \"And Allah has made for you the earth wide spread (an expanse).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 71\n        },\n        \"text\" : \"\\\"And they have said: 'You shall not leave your gods, nor shall you leave Wadd, nor Suwa', nor Yaghuth, nor Ya'uq, nor Nasr (names of the idols);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 71\n        },\n        \"text\" : \"\\\"And indeed they have led many astray. And (O Allah): 'Grant no increase to the Zalimun (polytheists, wrong-doers, and disbelievers, etc.) save error.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 71\n        },\n        \"text\" : \"Because of their sins they were drowned, then were made to enter the Fire, and they found none to help them instead of Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 71\n        },\n        \"text\" : \"\\\"My Lord! Forgive me, and my parents, and him who enters my home as a believer, and all the believing men and women. And to the Zalimun (polytheists, wrong-doers, and disbelievers, etc.) grant You no increase but destruction!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 72\n        },\n        \"text\" : \"'It guides to the Right Path, and we have believed therein, and we shall never join (in worship) anything with our Lord (Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 72\n        },\n        \"text\" : \"'And that the foolish among us [i.e. Iblis (Satan) or the polytheists amongst the jinns] used to utter against Allah that which was wrong and not right.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 72\n        },\n        \"text\" : \"'And verily, we thought that men and jinns would not utter a lie against Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 72\n        },\n        \"text\" : \"'And they thought as you thought, that Allah will not send any Messenger (to mankind or jinns).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 72\n        },\n        \"text\" : \"'And we think that we cannot escape (from the punishment of) Allah in the earth, nor can we escape (from the punishment) by flight.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 72\n        },\n        \"text\" : \"'And indeed when we heard the Guidance (this Quran), we believed therein (Islamic Monotheism), and whosoever believes in his Lord shall have no fear, either of a decrease in the reward of his good deeds or an increase in punishment for his sins.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 72\n        },\n        \"text\" : \"'And of us some are Muslims (who have submitted to Allah, after listening to this Quran), and of us some are Al-Qasitun (disbelievers those who have deviated from the Right Path)'. And whosoever has embraced Islam (i.e. has become a Muslim by submitting to Allah), then such have sought the Right Path.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 72\n        },\n        \"text\" : \"And as for the Qasitun (disbelievers who deviated from the Right Path), they shall be firewood for Hell,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 72\n        },\n        \"text\" : \"If they (non-Muslims) had believed in Allah, and went on the Right Way (i.e. Islam) We should surely have bestowed on them water (rain) in abundance.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 72\n        },\n        \"text\" : \"And the mosques are for Allah (Alone), so invoke not anyone along with Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 72\n        },\n        \"text\" : \"(It has been revealed to me that) When the slave of Allah (Muhammad SAW) stood up invoking (his Lord Allah) in prayer to Him they (the jinns) just made round him a dense crowd as if sticking one over the other (in order to listen to the Prophet's recitation).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 72\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"I invoke only my Lord (Allah Alone), and I associate none as partners along with Him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 72\n        },\n        \"text\" : \"Say (O Muhammad SAW): \\\"None can protect me from Allah's punishment (if I were to disobey Him), nor should I find refuge except in Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 72\n        },\n        \"text\" : \"\\\"(Mine is) but conveyance (of the truth) from Allah and His Messages (of Islamic Monotheism), and whosoever disobeys Allah and His Messenger, then verily, for him is the Fire of Hell, he shall dwell therein forever.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 72\n        },\n        \"text\" : \"\\\"(He Alone) the All-Knower of the Gha'ib (unseen), and He reveals to none His Gha'ib (unseen).\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 72\n        },\n        \"text\" : \"[He (Allah) protects them (the Messengers)], till He sees that they (the Messengers) have conveyed the Messages of their Lord (Allah). And He (Allah) surrounds all that which is with them, and He (Allah) keeps count of all things (i.e. He knows the exact number of everything).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 73\n        },\n        \"text\" : \"Stand (to pray) all night, except a little.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 73\n        },\n        \"text\" : \"Verily, We shall send down to you a weighty Word (i.e. obligations, legal laws, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 73\n        },\n        \"text\" : \"Verily, the rising by night (for Tahajjud prayer) is very hard and most potent and good for governing (the soul), and most suitable for (understanding) the Word (of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 73\n        },\n        \"text\" : \"Verily, your Lord knows that you do stand (to pray at night) a little less than two-thirds of the night, or half the night, or a third of the night, and so do a party of those with you, And Allah measures the night and the day. He knows that you are unable to pray the whole night, so He has turned to you (in mercy). So, recite you of the Quran as much as may be easy for you. He knows that there will be some among you sick, others travelling through the land, seeking of Allah's Bounty; yet others fighting in Allah's Cause. So recite as much of the Quran as may be easy (for you), and perform As-Salat (Iqamat-as-Salat) and give Zakat, and lend to Allah a goodly loan, and whatever good you send before you for yourselves, (i.e. Nawafil non-obligatory acts of worship: prayers, charity, fasting, Hajj and 'Umrah, etc.), you will certainly find it with Allah, better and greater in reward. And seek Forgiveness of Allah. Verily, Allah is Oft-Forgiving, Most-Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 74\n        },\n        \"text\" : \"And your Lord (Allah) magnify!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 74\n        },\n        \"text\" : \"And give not a thing in order to have more (or consider not your deeds of Allah's obedience as a favour to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 74\n        },\n        \"text\" : \"And be patient for the sake of your Lord (i.e. perform your duty to Allah)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 74\n        },\n        \"text\" : \"After all that he desires that I should give more;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 74\n        },\n        \"text\" : \"I shall oblige him to (climb a slippery mountain in the Hell-fire called As-Sa'ud, or to) face a severe torment!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 74\n        },\n        \"text\" : \"And We have set none but angels as guardians of the Fire, and We have fixed their number (19) only as a trial for the disbelievers, in order that the people of the Scripture (Jews and Christians) may arrive at a certainty [that this Quran is the truth as it agrees with their Books i.e. their number (19) is written in the Taurat (Torah) and the Injeel (Gospel)] and the believers may increase in Faith (as this Quran is the truth) and that no doubts may be left for the people of the Scripture and the believers, and that those in whose hearts is a disease (of hypocrisy) and the disbelievers may say: \\\"What Allah intends by this (curious) example?\\\" Thus Allah leads astray whom He wills and guides whom He wills. And none can know the hosts of your Lord but He. And this (Hell) is nothing else than a (warning) reminder to mankind.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 74\n        },\n        \"text\" : \"\\\"And we used to talk falsehood (all that which Allah hated) with vain talkers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 74\n        },\n        \"text\" : \"Nay, everyone of them desires that he should be given pages spread out (coming from Allah with a writing that Islam is the right religion, and Muhammad SAW has come with the truth from Allah the Lord of the heavens and earth, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 74\n        },\n        \"text\" : \"Nay! But they fear not the Hereafter (from Allah's punishment).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 74\n        },\n        \"text\" : \"And they will not receive admonition unless Allah wills; He (Allah) is the One, deserving that mankind should be afraid of, and should be dutiful to Him, and should not take any Ilah (God) along with Him, and He is the One Who forgives (sins).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 75\n        },\n        \"text\" : \"Does man (a disbeliever) think that We shall not assemble his bones?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 75\n        },\n        \"text\" : \"So, when the sight shall be dazed,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 75\n        },\n        \"text\" : \"Then it is for Us (Allah) to make it clear to you,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 75\n        },\n        \"text\" : \"Some faces that Day shall be Nadirah (shining and radiant).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 75\n        },\n        \"text\" : \"Looking at their Lord (Allah);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 75\n        },\n        \"text\" : \"Thinking that some calamity was about to fall on them;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 75\n        },\n        \"text\" : \"The drive will be, on that Day, to your Lord (Allah)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 75\n        },\n        \"text\" : \"Does man think that he will be left Suda [neglected without being punished or rewarded for the obligatory duties enjoined by his Lord (Allah) on him]?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 75\n        },\n        \"text\" : \"Then he became an 'Alaqa (a clot); then (Allah) shaped and fashioned (him) in due proportion.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 75\n        },\n        \"text\" : \"Is not He (Allah Who does that), Able to give life to the dead? (Yes! He is Able to do all things).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 76\n        },\n        \"text\" : \"Verily, the Abrar (pious, who fear Allah and avoid evil), shall drink a cup (of wine) mixed with water from a spring in Paradise called Kafur.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 76\n        },\n        \"text\" : \"A spring wherefrom the slaves of Allah will drink, causing it to gush forth abundantly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 76\n        },\n        \"text\" : \"(Saying): \\\"We feed you seeking Allah's Countenance only. We wish for no reward, nor thanks from you.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 76\n        },\n        \"text\" : \"So Allah saved them from the evil of that Day, and gave them Nadratan (a light of beauty) and joy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 76\n        },\n        \"text\" : \"And their recompense shall be Paradise, and silken garments, because they were patient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 76\n        },\n        \"text\" : \"A spring there, called Salsabil.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 76\n        },\n        \"text\" : \"Therefore be patient (O Muhammad SAW) and submit to the Command of your Lord (Allah, by doing your duty to Him and by conveying His Message to mankind), and obey neither a sinner nor a disbeliever among them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 76\n        },\n        \"text\" : \"Verily! This (Verses of the Quran) is an admonition, so whosoever wills, let him take a Path to his Lord (Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 76\n        },\n        \"text\" : \"But you cannot will, unless Allah wills. Verily, Allah is Ever All-Knowing, All-Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 77\n        },\n        \"text\" : \"By the winds (or angels or the Messengers of Allah) sent forth one after another.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 77\n        },\n        \"text\" : \"To cut off all excuses or to warn;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 77\n        },\n        \"text\" : \"So shall We make later generations to follow them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 77\n        },\n        \"text\" : \"And have placed therein firm, and tall mountains; and have given you to drink sweet water?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 77\n        },\n        \"text\" : \"That will be a Day when they shall not speak (during some part of it),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 77\n        },\n        \"text\" : \"So if you have a plot, use it against Me (Allah)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 77\n        },\n        \"text\" : \"Verily, the Muttaqun (pious - see V. 2:2) shall be amidst shades and springs.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 78\n        },\n        \"text\" : \"And We have created you in pairs (male and female, tall and short, good and bad, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 78\n        },\n        \"text\" : \"The Day when the Trumpet will be blown, and you shall come forth in crowds (groups);\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 78\n        },\n        \"text\" : \"And the heaven shall be opened, and it will become as gates,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 78\n        },\n        \"text\" : \"And the mountains shall be moved away from their places and they will be as if they were a mirage.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 78\n        },\n        \"text\" : \"A dwelling place for the Taghun (those who transgress the boundry limits set by Allah like polytheists, disbelievers in the Oneness of Allah, hyprocrites, sinners, criminals, etc.),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 78\n        },\n        \"text\" : \"Nothing cool shall they taste therein, nor any drink.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 78\n        },\n        \"text\" : \"And all things We have recorded in a Book.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 78\n        },\n        \"text\" : \"So taste you (the results of your evil actions); no increase shall We give you, except in torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 78\n        },\n        \"text\" : \"No Laghw (dirty, false, evil talk) shall they hear therein, nor lying;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 78\n        },\n        \"text\" : \"The Day that Ar-Ruh [Jibrael (Gabriel) or another angel] and the angels will stand forth in rows, none shall speak except him whom the Most Beneficent (Allah) allows, and he will speak what is right.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 79\n        },\n        \"text\" : \"And by those angels who arrange to do the Commands of their Lord, (so verily, you disbelievers will be called to account).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 79\n        },\n        \"text\" : \"They say: \\\"Shall we indeed be returned to (our) former state of life?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 79\n        },\n        \"text\" : \"When his Lord called him in the sacred valley of Tuwa,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 79\n        },\n        \"text\" : \"Go to Fir'aun (Pharaoh), verily, he has transgressed all bounds (in crimes, sins, polytheism, disbelief, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 79\n        },\n        \"text\" : \"Then he turned his back, striving hard (against Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 79\n        },\n        \"text\" : \"So Allah, seized him with punishment for his last [i.e. his saying: \\\"I am your lord, most high\\\") (see Verse 79:24)] and first [(i.e. his saying, \\\"O chiefs! I know not that you have a god other than I\\\" (see Verse 28:38)] transgression.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 79\n        },\n        \"text\" : \"Verily, in this is an instructive admonition for whosoever fears Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 79\n        },\n        \"text\" : \"He raised its height, and He has equally ordered it,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 79\n        },\n        \"text\" : \"The Day when man shall remember what he strove for,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 79\n        },\n        \"text\" : \"And Hell-fire shall be made apparent in full view for (every) one who sees,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 79\n        },\n        \"text\" : \"Then, for him who Tagha (transgressed all bounds, in disbelief, oppression and evil deeds of disobedience to Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 80\n        },\n        \"text\" : \"What does it matter to you if he will not become pure (from disbelief, you are only a Messenger, your duty is to convey the Message of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 80\n        },\n        \"text\" : \"And is afraid (of Allah and His Punishment),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 80\n        },\n        \"text\" : \"That Day shall a man flee from his brother,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 80\n        },\n        \"text\" : \"Such will be the Kafarah (disbelievers in Allah, in His Oneness, and in His Messenger Muhammad (Peace be upon him), etc.), the Fajarah (wicked evil doers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 81\n        },\n        \"text\" : \"And when the stars shall fall;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 81\n        },\n        \"text\" : \"And when the mountains shall made to pass away;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 81\n        },\n        \"text\" : \"And when the pregnant she-camels shall be neglected;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 81\n        },\n        \"text\" : \"And when the wild beasts shall be gathered together;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 81\n        },\n        \"text\" : \"And when the seas shall become as blazing Fire or shall overflow;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 81\n        },\n        \"text\" : \"And when the souls shall be joined with their bodies;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 81\n        },\n        \"text\" : \"And when the female (infant) buried alive (as the pagan Arabs used to do) shall be questioned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 81\n        },\n        \"text\" : \"And when the written pages of deeds (good and bad) of every person shall be laid open;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 81\n        },\n        \"text\" : \"And when the heaven shall be stripped off and taken away from its place;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 81\n        },\n        \"text\" : \"And when Hell-fire shall be kindled to fierce ablaze.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 81\n        },\n        \"text\" : \"And when Paradise shall be brought near,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 81\n        },\n        \"text\" : \"Verily, this is the Word (this Quran brought by) a most honourable messenger [Jibrael (Gabriel), from Allah to the Prophet Muhammad (Peace be upon him)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 81\n        },\n        \"text\" : \"Owner of power, and high rank with (Allah) the Lord of the Throne,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 81\n        },\n        \"text\" : \"Verily, this (the Quran) is no less than a Reminder to (all) the 'Alamin (mankind and jinns).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 81\n        },\n        \"text\" : \"And you will not, unless (it be) that Allah wills, the Lord of the 'Alamin (mankind, jinns and all that exists).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 82\n        },\n        \"text\" : \"And when the stars have fallen and scattered;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 82\n        },\n        \"text\" : \"They know all that you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 82\n        },\n        \"text\" : \"(It will be) the Day when no person shall have power (to do) anything for another, and the Decision, that Day, will be (wholly) with Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 83\n        },\n        \"text\" : \"The Day when (all) mankind will stand before the Lord of the 'Alamin (mankind, jinns and all that exists)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 83\n        },\n        \"text\" : \"Woe, that Day, to those who deny [(Allah, His Angels, His Books, His Messengers, the Day of Resurrection, and Al-Qadar (Divine Preordainments)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 83\n        },\n        \"text\" : \"And none can deny it except every transgressor beyond bounds, (in disbelief, oppression and disobedience of Allah, the sinner!)\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 83\n        },\n        \"text\" : \"Nay! Verily, the Record (writing of the deeds) of Al-Abrar (the pious who fear Allah and avoid evil), is (preserved) in 'Illiyyun.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 83\n        },\n        \"text\" : \"To which bear witness those nearest (to Allah, i.e. the angels).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 83\n        },\n        \"text\" : \"Verily, Al-Abrar (the pious who fear Allah and avoid evil) will be in delight (Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 83\n        },\n        \"text\" : \"On thrones, looking (at all things).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 83\n        },\n        \"text\" : \"The last thereof (that wine) will be the smell of musk, and for this let (all) those strive who want to strive (i.e. hasten earnestly to the obedience of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 83\n        },\n        \"text\" : \"A spring whereof drink those nearest to Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 83\n        },\n        \"text\" : \"On (high) thrones, looking (at all things).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 84\n        },\n        \"text\" : \"And has cast out all that was in it and became empty,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 84\n        },\n        \"text\" : \"And shall enter a blazing Fire, and made to taste its burning.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 84\n        },\n        \"text\" : \"You shall certainly travel from stage to stage (in this life and in the Hereafter).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 84\n        },\n        \"text\" : \"And when the Quran is recited to them, they fall not prostrate,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 84\n        },\n        \"text\" : \"And Allah knows best what they gather (of good and bad deeds),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 85\n        },\n        \"text\" : \"They had nothing against them, except that they believed in Allah, the All-Mighty, Worthy of all Praise!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 85\n        },\n        \"text\" : \"Who, to Whom belongs the dominion of the heavens and the earth! And Allah is Witness over everything.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 85\n        },\n        \"text\" : \"Verily, those who put into trial the believing men and believing women (by torturing them and burning them), and then do not turn in repentance, (to Allah), will have the torment of Hell, and they will have the punishment of the burning Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 85\n        },\n        \"text\" : \"And Allah encompasses them from behind! (i.e. all their deeds are within His Knowledge, and He will requite them for their deeds).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 86\n        },\n        \"text\" : \"Verily, (Allah) is Able to bring him back (to life)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 86\n        },\n        \"text\" : \"The Day when all the secrets (deeds, prayers, fasting, etc.) will be examined (as to their truth).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 87\n        },\n        \"text\" : \"We shall make you to recite (the Quran), so you (O Muhammad (Peace be upon him)) shall not forget (it),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 87\n        },\n        \"text\" : \"Except what Allah, may will, He knows what is apparent and what is hidden.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 87\n        },\n        \"text\" : \"And We shall make easy for you (O Muhammad (Peace be upon him)) the easy way (i.e. the doing of righteous deeds).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 87\n        },\n        \"text\" : \"The reminder will be received by him who fears (Allah),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 87\n        },\n        \"text\" : \"Indeed whosoever purifies himself (by avoiding polytheism and accepting Islamic Monotheism) shall achieve success,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 87\n        },\n        \"text\" : \"And remembers (glorifies) the Name of his Lord (worships none but Allah), and prays (five compulsory prayers and Nawafil additional prayers).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 88\n        },\n        \"text\" : \"Some faces, that Day, will be humiliated (in the Hell-fire, i.e. the faces of all disbelievers, Jews and Christians, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 88\n        },\n        \"text\" : \"Labouring (hard in the worldly life by worshipping others besides Allah), weary (in the Hereafter with humility and disgrace).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 88\n        },\n        \"text\" : \"Where they shall neither hear harmful speech nor falsehood,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 88\n        },\n        \"text\" : \"And rich carpets (all) spread out.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 88\n        },\n        \"text\" : \"Then Allah will punish him with the greatest punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 89\n        },\n        \"text\" : \"And by the even and the odd (of all the creations of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 89\n        },\n        \"text\" : \"There is indeed in them (the above oaths) sufficient proofs for men of understanding (and that, they should avoid all kinds of sins and disbeliefs, etc.)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 89\n        },\n        \"text\" : \"Who were very tall like lofty pillars,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 89\n        },\n        \"text\" : \"And (with) Thamud (people), who cut (hewed) out rocks in the valley (to make dwellings)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 89\n        },\n        \"text\" : \"Who did transgress beyond bounds in the lands (in the disobedience of Allah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 89\n        },\n        \"text\" : \"And you devour inheritance all with greed,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 91\n        },\n        \"text\" : \"Indeed he succeeds who purifies his ownself (i.e. obeys and performs all that Allah ordered, by following the true Faith of Islamic Monotheism and by doing righteous good deeds).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 91\n        },\n        \"text\" : \"And indeed he fails who corrupts his ownself (i.e. disobeys what Allah has ordered by rejecting the true Faith of Islamic Monotheism or by following polytheism, etc. or by doing every kind of evil wicked deeds).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 91\n        },\n        \"text\" : \"But the Messenger of Allah [Salih (Saleh)] said to them: \\\"Be cautious! Fear the evil end. That is the she-camel of Allah! (Do not harm it) and bar it not from having its drink!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 91\n        },\n        \"text\" : \"Then they denied him and they killed it. So their Lord destroyed them because of their sin, and made them equal in destruction (i.e. all grades of people, rich and poor, strong and weak, etc.)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 91\n        },\n        \"text\" : \"And He (Allah) feared not the consequences thereof.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 92\n        },\n        \"text\" : \"As for him who gives (in charity) and keeps his duty to Allah and fears Him,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 92\n        },\n        \"text\" : \"None shall enter it save the most wretched,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 93\n        },\n        \"text\" : \"And verily, your Lord will give you (all i.e. good) so that you shall be well-pleased.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 93\n        },\n        \"text\" : \"And proclaim the Grace of your Lord (i.e. the Prophethood and all other Graces).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 94\n        },\n        \"text\" : \"So when you have finished (from your occupation), then stand up for Allah's worship (i.e. stand up for prayer).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 94\n        },\n        \"text\" : \"And to your Lord (Alone) turn (all your intentions and hopes and) your invocations.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 95\n        },\n        \"text\" : \"Save those who believe (in Islamic Monotheism) and do righteous deeds, then they shall have a reward without end (Paradise).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 95\n        },\n        \"text\" : \"Is not Allah the Best of judges?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 96\n        },\n        \"text\" : \"Read! In the Name of your Lord, Who has created (all that exists),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 96\n        },\n        \"text\" : \"Nay! Verily, man does transgress all bounds (in disbelief and evil deed, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 96\n        },\n        \"text\" : \"Tell me, if he (Muhammad (Peace be upon him)) is on the guidance (of Allah)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 96\n        },\n        \"text\" : \"Knows he not that Allah does see (what he does)?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 96\n        },\n        \"text\" : \"Then, let him call upon his council (of helpers),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 96\n        },\n        \"text\" : \"We will call the guards of Hell (to deal with him)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 96\n        },\n        \"text\" : \"Nay! (O Muhammad (Peace be upon him))! Do not obey him (Abu Jahl). Fall prostrate and draw near to Allah!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 97\n        },\n        \"text\" : \"The night of Al-Qadr (Decree) is better than a thousand months (i.e. worshipping Allah in that night is better than worshipping Him a thousand months, (i.e. 83 years and 4 months).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 97\n        },\n        \"text\" : \"Therein descend the angels and the Ruh [Jibrael (Gabriel)] by Allah's Permission with all Decrees,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 97\n        },\n        \"text\" : \"Peace! (All that night, there is Peace and Goodness from Allah to His believing slaves) until the appearance of dawn.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 98\n        },\n        \"text\" : \"A Messenger (Muhammad (Peace be upon him)) from Allah, reciting (the Quran) purified pages [purified from Al-Batil (falsehood, etc.)].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 98\n        },\n        \"text\" : \"Containing correct and straight laws from Allah.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 98\n        },\n        \"text\" : \"And they were commanded not, but that they should worship Allah, and worship none but Him Alone (abstaining from ascribing partners to Him), and perform As-Salat (Iqamat-as-Salat) and give Zakat: and that is the right religion.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 98\n        },\n        \"text\" : \"Verily, those who believe [in the Oneness of Allah, and in His Messenger Muhammad (Peace be upon him)) including all obligations ordered by Islam] and do righteous good deeds, they are the best of creatures.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 98\n        },\n        \"text\" : \"Their reward with their Lord is 'Adn (Eden) Paradise (Gardens of Eternity), underneath which rivers flow, they will abide therein forever, Allah Well-Pleased with them, and they with Him. That is for him who fears his Lord.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 99\n        },\n        \"text\" : \"That Day it will declare its information (about all what happened over it of good or evil).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 99\n        },\n        \"text\" : \"So whosoever does good equal to the weight of an atom (or a small ant), shall see it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 99\n        },\n        \"text\" : \"And whosoever does evil equal to the weight of an atom (or a small ant), shall see it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 100\n        },\n        \"text\" : \"Knows he not that when the contents of the graves are brought out and poured forth (all mankind is resurrected).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 100\n        },\n        \"text\" : \"And that which is in the breasts (of men) shall be made known.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 102\n        },\n        \"text\" : \"Nay! You shall come to know!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 102\n        },\n        \"text\" : \"Again, Nay! You shall come to know!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 102\n        },\n        \"text\" : \"Verily, You shall see the blazing Fire (Hell)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 102\n        },\n        \"text\" : \"And again, you shall see it with certainty of sight!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 102\n        },\n        \"text\" : \"Then, on that Day, you shall be asked about the delight (you indulged in, in this world)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 103\n        },\n        \"text\" : \"Except those who believe (in Islamic Monotheism) and do righteous good deeds, and recommend one another to the truth (i.e. order one another to perform all kinds of good deeds (Al-Ma'ruf) which Allah has ordained, and abstain from all kinds of sins and evil deeds (Al-Munkar) which Allah has forbidden), and recommend one another to patience (for the sufferings, harms, and injuries which one may encounter in Allah's Cause during preaching His religion of Islamic Monotheism or Jihad, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 104\n        },\n        \"text\" : \"The fire of Allah, kindled,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 104\n        },\n        \"text\" : \"Verily, it shall be closed in on them,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 106\n        },\n        \"text\" : \"(It is a great Grace and Protection from Allah), for the taming of the Quraish,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 106\n        },\n        \"text\" : \"(And with all those Allah's Grace and Protections for their taming, We cause) the (Quraish) caravans to set forth safe in winter (to the south), and in summer (to the north without any fear),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 106\n        },\n        \"text\" : \"So let them worship (Allah) the Lord of this House (the Ka'bah in Makkah).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 107\n        },\n        \"text\" : \"And refuse Al-Ma'un (small kindnesses e.g. salt, sugar, water, etc.).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 109\n        },\n        \"text\" : \"Say (O Muhammad (Peace be upon him) to these Mushrikun and Kafirun): \\\"O Al-Kafirun (disbelievers in Allah, in His Oneness, in His Angels, in His Books, in His Messengers, in the Day of Resurrection, and in Al-Qadar, etc.)!\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 109\n        },\n        \"text\" : \"\\\"And I shall not worship that which you are worshipping.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 110\n        },\n        \"text\" : \"When comes the Help of Allah (to you, O Muhammad (Peace be upon him) against your enemies) and the conquest (of Makkah),\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 110\n        },\n        \"text\" : \"And you see that the people enter Allah's religion (Islam) in crowds,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 112\n        },\n        \"text\" : \"Say (O Muhammad (Peace be upon him)): \\\"He is Allah, (the) One.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 112\n        },\n        \"text\" : \"\\\"Allah-us-Samad (The Self-Sufficient Master, Whom all creatures need, He neither eats nor drinks).\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 113\n        },\n        \"text\" : \"Say: \\\"I seek refuge with (Allah) the Lord of the daybreak,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 114\n        },\n        \"text\" : \"Say: \\\"I seek refuge with (Allah) the Lord of mankind,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 114\n        },\n        \"text\" : \"\\\"From the evil of the whisperer (devil who whispers evil in the hearts of men) who withdraws (from his whispering in one's heart after one remembers Allah),\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"translation: 1\"\n    }\n  },\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 1\n        },\n        \"text\" : \"In the name of Allah, the Entirely Merciful, the Especially Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 1\n        },\n        \"text\" : \"[All] praise is [due] to Allah, Lord of the worlds -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 1\n        },\n        \"text\" : \"The Entirely Merciful, the Especially Merciful,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 2\n        },\n        \"text\" : \"This is the Book about which there is no doubt, a guidance for those conscious of Allah -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 2\n        },\n        \"text\" : \"Indeed, those who disbelieve - it is all the same for them whether you warn them or do not warn them - they will not believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 2\n        },\n        \"text\" : \"Allah has set a seal upon their hearts and upon their hearing, and over their vision is a veil. And for them is a great punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 2\n        },\n        \"text\" : \"And of the people are some who say, \\\"We believe in Allah and the Last Day,\\\" but they are not believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 2\n        },\n        \"text\" : \"They [think to] deceive Allah and those who believe, but they deceive not except themselves and perceive [it] not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 2\n        },\n        \"text\" : \"In their hearts is disease, so Allah has increased their disease; and for them is a painful punishment because they [habitually] used to lie.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 2\n        },\n        \"text\" : \"[But] Allah mocks them and prolongs them in their transgression [while] they wander blindly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 2\n        },\n        \"text\" : \"Their example is that of one who kindled a fire, but when it illuminated what was around him, Allah took away their light and left them in darkness [so] they could not see.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 2\n        },\n        \"text\" : \"Or [it is] like a rainstorm from the sky within which is darkness, thunder and lightning. They put their fingers in their ears against the thunderclaps in dread of death. But Allah is encompassing of the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 2\n        },\n        \"text\" : \"The lightning almost snatches away their sight. Every time it lights [the way] for them, they walk therein; but when darkness comes over them, they stand [still]. And if Allah had willed, He could have taken away their hearing and their sight. Indeed, Allah is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 2\n        },\n        \"text\" : \"[He] who made for you the earth a bed [spread out] and the sky a ceiling and sent down from the sky, rain and brought forth thereby fruits as provision for you. So do not attribute to Allah equals while you know [that there is nothing similar to Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if you are in doubt about what We have sent down upon Our Servant [Muhammad], then produce a surah the like thereof and call upon your witnesses other than Allah, if you should be truthful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 2\n        },\n        \"text\" : \"And give good tidings to those who believe and do righteous deeds that they will have gardens [in Paradise] beneath which rivers flow. Whenever they are provided with a provision of fruit therefrom, they will say, \\\"This is what we were provided with before.\\\" And it is given to them in likeness. And they will have therein purified spouses, and they will abide therein eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 2\n        },\n        \"text\" : \"Indeed, Allah is not timid to present an example - that of a mosquito or what is smaller than it. And those who have believed know that it is the truth from their Lord. But as for those who disbelieve, they say, \\\"What did Allah intend by this as an example?\\\" He misleads many thereby and guides many thereby. And He misleads not except the defiantly disobedient,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 2\n        },\n        \"text\" : \"Who break the covenant of Allah after contracting it and sever that which Allah has ordered to be joined and cause corruption on earth. It is those who are the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 2\n        },\n        \"text\" : \"How can you disbelieve in Allah when you were lifeless and He brought you to life; then He will cause you to die, then He will bring you [back] to life, and then to Him you will be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 2\n        },\n        \"text\" : \"It is He who created for you all of that which is on the earth. Then He directed Himself to the heaven, [His being above all creation], and made them seven heavens, and He is Knowing of all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [mention, O Muhammad], when your Lord said to the angels, \\\"Indeed, I will make upon the earth a successive authority.\\\" They said, \\\"Will You place upon it one who causes corruption therein and sheds blood, while we declare Your praise and sanctify You?\\\" Allah said, \\\"Indeed, I know that which you do not know.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 2\n        },\n        \"text\" : \"And He taught Adam the names - all of them. Then He showed them to the angels and said, \\\"Inform Me of the names of these, if you are truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 2\n        },\n        \"text\" : \"But Satan caused them to slip out of it and removed them from that [condition] in which they had been. And We said, \\\"Go down, [all of you], as enemies to one another, and you will have upon the earth a place of settlement and provision for a time.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 2\n        },\n        \"text\" : \"We said, \\\"Go down from it, all of you. And when guidance comes to you from Me, whoever follows My guidance - there will be no fear concerning them, nor will they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 2\n        },\n        \"text\" : \"And those who disbelieve and deny Our signs - those will be companions of the Fire; they will abide therein eternally.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 2\n        },\n        \"text\" : \"And believe in what I have sent down confirming that which is [already] with you, and be not the first to disbelieve in it. And do not exchange My signs for a small price, and fear [only] Me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 2\n        },\n        \"text\" : \"And seek help through patience and prayer, and indeed, it is difficult except for the humbly submissive [to Allah ]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 2\n        },\n        \"text\" : \"And fear a Day when no soul will suffice for another soul at all, nor will intercession be accepted from it, nor will compensation be taken from it, nor will they be aided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [recall] when We saved your forefathers from the people of Pharaoh, who afflicted you with the worst torment, slaughtering your [newborn] sons and keeping your females alive. And in that was a great trial from your Lord.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [recall] when We parted the sea for you and saved you and drowned the people of Pharaoh while you were looking on.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [recall] when We made an appointment with Moses for forty nights. Then you took [for worship] the calf after him, while you were wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [recall] when We gave Moses the Scripture and criterion that perhaps you would be guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [recall] when Moses said to his people, \\\"O my people, indeed you have wronged yourselves by your taking of the calf [for worship]. So repent to your Creator and kill yourselves. That is best for [all of] you in the sight of your Creator.\\\" Then He accepted your repentance; indeed, He is the Accepting of repentance, the Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [recall] when you said, \\\"O Moses, we will never believe you until we see Allah outright\\\"; so the thunderbolt took you while you were looking on.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [recall] when We said, \\\"Enter this city and eat from it wherever you will in [ease and] abundance, and enter the gate bowing humbly and say, 'Relieve us of our burdens.' We will [then] forgive your sins for you, and We will increase the doers of good [in goodness and reward].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [recall] when Moses prayed for water for his people, so We said, \\\"Strike with your staff the stone.\\\" And there gushed forth from it twelve springs, and every people knew its watering place. \\\"Eat and drink from the provision of Allah, and do not commit abuse on the earth, spreading corruption.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [recall] when you said, \\\"O Moses, we can never endure one [kind of] food. So call upon your Lord to bring forth for us from the earth its green herbs and its cucumbers and its garlic and its lentils and its onions.\\\" [Moses] said, \\\"Would you exchange what is better for what is less? Go into [any] settlement and indeed, you will have what you have asked.\\\" And they were covered with humiliation and poverty and returned with anger from Allah [upon them]. That was because they [repeatedly] disbelieved in the signs of Allah and killed the prophets without right. That was because they disobeyed and were [habitually] transgressing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 2\n        },\n        \"text\" : \"Indeed, those who believed and those who were Jews or Christians or Sabeans [before Prophet Muhammad] - those [among them] who believed in Allah and the Last Day and did righteousness - will have their reward with their Lord, and no fear will there be concerning them, nor will they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [recall] when We took your covenant, [O Children of Israel, to abide by the Torah] and We raised over you the mount, [saying], \\\"Take what We have given you with determination and remember what is in it that perhaps you may become righteous.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 2\n        },\n        \"text\" : \"Then you turned away after that. And if not for the favor of Allah upon you and His mercy, you would have been among the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 2\n        },\n        \"text\" : \"And We made it a deterrent punishment for those who were present and those who succeeded [them] and a lesson for those who fear Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [recall] when Moses said to his people, \\\"Indeed, Allah commands you to slaughter a cow.\\\" They said, \\\"Do you take us in ridicule?\\\" He said, \\\"I seek refuge in Allah from being among the ignorant.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 2\n        },\n        \"text\" : \"They said, \\\"Call upon your Lord to make clear to us what it is.\\\" [Moses] said, \\\"[ Allah ] says, 'It is a cow which is neither old nor virgin, but median between that,' so do what you are commanded.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 2\n        },\n        \"text\" : \"They said, \\\"Call upon your Lord to show us what is her color.\\\" He said, \\\"He says, 'It is a yellow cow, bright in color - pleasing to the observers.' \\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 2\n        },\n        \"text\" : \"They said, \\\"Call upon your Lord to make clear to us what it is. Indeed, [all] cows look alike to us. And indeed we, if Allah wills, will be guided.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [recall] when you slew a man and disputed over it, but Allah was to bring out that which you were concealing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 2\n        },\n        \"text\" : \"So, We said, \\\"Strike the slain man with part of it.\\\" Thus does Allah bring the dead to life, and He shows you His signs that you might reason.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 2\n        },\n        \"text\" : \"Then your hearts became hardened after that, being like stones or even harder. For indeed, there are stones from which rivers burst forth, and there are some of them that split open and water comes out, and there are some of them that fall down for fear of Allah . And Allah is not unaware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 2\n        },\n        \"text\" : \"Do you covet [the hope, O believers], that they would believe for you while a party of them used to hear the words of Allah and then distort the Torah after they had understood it while they were knowing?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when they meet those who believe, they say, \\\"We have believed\\\"; but when they are alone with one another, they say, \\\"Do you talk to them about what Allah has revealed to you so they can argue with you about it before your Lord?\\\" Then will you not reason?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 2\n        },\n        \"text\" : \"But do they not know that Allah knows what they conceal and what they declare?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 2\n        },\n        \"text\" : \"So woe to those who write the \\\"scripture\\\" with their own hands, then say, \\\"This is from Allah,\\\" in order to exchange it for a small price. Woe to them for what their hands have written and woe to them for what they earn.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 2\n        },\n        \"text\" : \"And they say, \\\"Never will the Fire touch us, except for a few days.\\\" Say, \\\"Have you taken a covenant with Allah ? For Allah will never break His covenant. Or do you say about Allah that which you do not know?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 2\n        },\n        \"text\" : \"Yes, whoever earns evil and his sin has encompassed him - those are the companions of the Fire; they will abide therein eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 2\n        },\n        \"text\" : \"But they who believe and do righteous deeds - those are the companions of Paradise; they will abide therein eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [recall] when We took the covenant from the Children of Israel, [enjoining upon them], \\\"Do not worship except Allah ; and to parents do good and to relatives, orphans, and the needy. And speak to people good [words] and establish prayer and give zakah.\\\" Then you turned away, except a few of you, and you were refusing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [recall] when We took your covenant, [saying], \\\"Do not shed each other's blood or evict one another from your homes.\\\" Then you acknowledged [this] while you were witnessing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 2\n        },\n        \"text\" : \"Then, you are those [same ones who are] killing one another and evicting a party of your people from their homes, cooperating against them in sin and aggression. And if they come to you as captives, you ransom them, although their eviction was forbidden to you. So do you believe in part of the Scripture and disbelieve in part? Then what is the recompense for those who do that among you except disgrace in worldly life; and on the Day of Resurrection they will be sent back to the severest of punishment. And Allah is not unaware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 2\n        },\n        \"text\" : \"And they said, \\\"Our hearts are wrapped.\\\" But, [in fact], Allah has cursed them for their disbelief, so little is it that they believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when there came to them a Book from Allah confirming that which was with them - although before they used to pray for victory against those who disbelieved - but [then] when there came to them that which they recognized, they disbelieved in it; so the curse of Allah will be upon the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 2\n        },\n        \"text\" : \"How wretched is that for which they sold themselves - that they would disbelieve in what Allah has revealed through [their] outrage that Allah would send down His favor upon whom He wills from among His servants. So they returned having [earned] wrath upon wrath. And for the disbelievers is a humiliating punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when it is said to them, \\\"Believe in what Allah has revealed,\\\" they say, \\\"We believe [only] in what was revealed to us.\\\" And they disbelieve in what came after it, while it is the truth confirming that which is with them. Say, \\\"Then why did you kill the prophets of Allah before, if you are [indeed] believers?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [recall] when We took your covenant and raised over you the mount, [saying], \\\"Take what We have given you with determination and listen.\\\" They said [instead], \\\"We hear and disobey.\\\" And their hearts absorbed [the worship of] the calf because of their disbelief. Say, \\\"How wretched is that which your faith enjoins upon you, if you should be believers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 2\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"If the home of the Hereafter with Allah is for you alone and not the [other] people, then wish for death, if you should be truthful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 2\n        },\n        \"text\" : \"But they will never wish for it, ever, because of what their hands have put forth. And Allah is Knowing of the wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 2\n        },\n        \"text\" : \"And you will surely find them the most greedy of people for life - [even] more than those who associate others with Allah . One of them wishes that he could be granted life a thousand years, but it would not remove him in the least from the [coming] punishment that he should be granted life. And Allah is Seeing of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 2\n        },\n        \"text\" : \"Say, \\\"Whoever is an enemy to Gabriel - it is [none but] he who has brought the Qur'an down upon your heart, [O Muhammad], by permission of Allah, confirming that which was before it and as guidance and good tidings for the believers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 2\n        },\n        \"text\" : \"Whoever is an enemy to Allah and His angels and His messengers and Gabriel and Michael - then indeed, Allah is an enemy to the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when a messenger from Allah came to them confirming that which was with them, a party of those who had been given the Scripture threw the Scripture of Allah behind their backs as if they did not know [what it contained].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 2\n        },\n        \"text\" : \"And they followed [instead] what the devils had recited during the reign of Solomon. It was not Solomon who disbelieved, but the devils disbelieved, teaching people magic and that which was revealed to the two angels at Babylon, Harut and Marut. But the two angels do not teach anyone unless they say, \\\"We are a trial, so do not disbelieve [by practicing magic].\\\" And [yet] they learn from them that by which they cause separation between a man and his wife. But they do not harm anyone through it except by permission of Allah . And the people learn what harms them and does not benefit them. But the Children of Israel certainly knew that whoever purchased the magic would not have in the Hereafter any share. And wretched is that for which they sold themselves, if they only knew.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if they had believed and feared Allah, then the reward from Allah would have been [far] better, if they only knew.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who have believed, say not [to Allah 's Messenger], \\\"Ra'ina\\\" but say, \\\"Unthurna\\\" and listen. And for the disbelievers is a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 2\n        },\n        \"text\" : \"Neither those who disbelieve from the People of the Scripture nor the polytheists wish that any good should be sent down to you from your Lord. But Allah selects for His mercy whom He wills, and Allah is the possessor of great bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 2\n        },\n        \"text\" : \"We do not abrogate a verse or cause it to be forgotten except that We bring forth [one] better than it or similar to it. Do you not know that Allah is over all things competent?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 2\n        },\n        \"text\" : \"Do you not know that to Allah belongs the dominion of the heavens and the earth and [that] you have not besides Allah any protector or any helper?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 2\n        },\n        \"text\" : \"Many of the People of the Scripture wish they could turn you back to disbelief after you have believed, out of envy from themselves [even] after the truth has become clear to them. So pardon and overlook until Allah delivers His command. Indeed, Allah is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 2\n        },\n        \"text\" : \"And establish prayer and give zakah, and whatever good you put forward for yourselves - you will find it with Allah. Indeed, Allah of what you do, is Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 2\n        },\n        \"text\" : \"Yes [on the contrary], whoever submits his face in Islam to Allah while being a doer of good will have his reward with his Lord. And no fear will there be concerning them, nor will they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 113,\n          \"sura\" : 2\n        },\n        \"text\" : \"The Jews say \\\"The Christians have nothing [true] to stand on,\\\" and the Christians say, \\\"The Jews have nothing to stand on,\\\" although they [both] recite the Scripture. Thus the polytheists speak the same as their words. But Allah will judge between them on the Day of Resurrection concerning that over which they used to differ.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 2\n        },\n        \"text\" : \"And who are more unjust than those who prevent the name of Allah from being mentioned in His mosques and strive toward their destruction. It is not for them to enter them except in fear. For them in this world is disgrace, and they will have in the Hereafter a great punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 115,\n          \"sura\" : 2\n        },\n        \"text\" : \"And to Allah belongs the east and the west. So wherever you [might] turn, there is the Face of Allah . Indeed, Allah is all-Encompassing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 2\n        },\n        \"text\" : \"They say, \\\" Allah has taken a son.\\\" Exalted is He! Rather, to Him belongs whatever is in the heavens and the earth. All are devoutly obedient to Him,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 118,\n          \"sura\" : 2\n        },\n        \"text\" : \"Those who do not know say, \\\"Why does Allah not speak to us or there come to us a sign?\\\" Thus spoke those before them like their words. Their hearts resemble each other. We have shown clearly the signs to a people who are certain [in faith].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 120,\n          \"sura\" : 2\n        },\n        \"text\" : \"And never will the Jews or the Christians approve of you until you follow their religion. Say, \\\"Indeed, the guidance of Allah is the [only] guidance.\\\" If you were to follow their desires after what has come to you of knowledge, you would have against Allah no protector or helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 123,\n          \"sura\" : 2\n        },\n        \"text\" : \"And fear a Day when no soul will suffice for another soul at all, and no compensation will be accepted from it, nor will any intercession benefit it, nor will they be aided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 124,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [mention, O Muhammad], when Abraham was tried by his Lord with commands and he fulfilled them. [ Allah ] said, \\\"Indeed, I will make you a leader for the people.\\\" [Abraham] said, \\\"And of my descendants?\\\" [ Allah ] said, \\\"My covenant does not include the wrongdoers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 126,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [mention] when Abraham said, \\\"My Lord, make this a secure city and provide its people with fruits - whoever of them believes in Allah and the Last Day.\\\" [ Allah ] said. \\\"And whoever disbelieves - I will grant him enjoyment for a little; then I will force him to the punishment of the Fire, and wretched is the destination.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 132,\n          \"sura\" : 2\n        },\n        \"text\" : \"And Abraham instructed his sons [to do the same] and [so did] Jacob, [saying], \\\"O my sons, indeed Allah has chosen for you this religion, so do not die except while you are Muslims.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 136,\n          \"sura\" : 2\n        },\n        \"text\" : \"Say, [O believers], \\\"We have believed in Allah and what has been revealed to us and what has been revealed to Abraham and Ishmael and Isaac and Jacob and the Descendants and what was given to Moses and Jesus and what was given to the prophets from their Lord. We make no distinction between any of them, and we are Muslims [in submission] to Him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 137,\n          \"sura\" : 2\n        },\n        \"text\" : \"So if they believe in the same as you believe in, then they have been [rightly] guided; but if they turn away, they are only in dissension, and Allah will be sufficient for you against them. And He is the Hearing, the Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 138,\n          \"sura\" : 2\n        },\n        \"text\" : \"[And say, \\\"Ours is] the religion of Allah . And who is better than Allah in [ordaining] religion? And we are worshippers of Him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 139,\n          \"sura\" : 2\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"Do you argue with us about Allah while He is our Lord and your Lord? For us are our deeds, and for you are your deeds. And we are sincere [in deed and intention] to Him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 140,\n          \"sura\" : 2\n        },\n        \"text\" : \"Or do you say that Abraham and Ishmael and Isaac and Jacob and the Descendants were Jews or Christians? Say, \\\"Are you more knowing or is Allah ?\\\" And who is more unjust than one who conceals a testimony he has from Allah ? And Allah is not unaware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 142,\n          \"sura\" : 2\n        },\n        \"text\" : \"The foolish among the people will say, \\\"What has turned them away from their qiblah, which they used to face?\\\" Say, \\\"To Allah belongs the east and the west. He guides whom He wills to a straight path.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 143,\n          \"sura\" : 2\n        },\n        \"text\" : \"And thus we have made you a just community that you will be witnesses over the people and the Messenger will be a witness over you. And We did not make the qiblah which you used to face except that We might make evident who would follow the Messenger from who would turn back on his heels. And indeed, it is difficult except for those whom Allah has guided. And never would Allah have caused you to lose your faith. Indeed Allah is, to the people, Kind and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 144,\n          \"sura\" : 2\n        },\n        \"text\" : \"We have certainly seen the turning of your face, [O Muhammad], toward the heaven, and We will surely turn you to a qiblah with which you will be pleased. So turn your face toward al-Masjid al-Haram. And wherever you [believers] are, turn your faces toward it [in prayer]. Indeed, those who have been given the Scripture well know that it is the truth from their Lord. And Allah is not unaware of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 148,\n          \"sura\" : 2\n        },\n        \"text\" : \"For each [religious following] is a direction toward which it faces. So race to [all that is] good. Wherever you may be, Allah will bring you forth [for judgement] all together. Indeed, Allah is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 149,\n          \"sura\" : 2\n        },\n        \"text\" : \"So from wherever you go out [for prayer, O Muhammad] turn your face toward al- Masjid al-Haram, and indeed, it is the truth from your Lord. And Allah is not unaware of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 153,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who have believed, seek help through patience and prayer. Indeed, Allah is with the patient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 154,\n          \"sura\" : 2\n        },\n        \"text\" : \"And do not say about those who are killed in the way of Allah, \\\"They are dead.\\\" Rather, they are alive, but you perceive [it] not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 156,\n          \"sura\" : 2\n        },\n        \"text\" : \"Who, when disaster strikes them, say, \\\"Indeed we belong to Allah, and indeed to Him we will return.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 158,\n          \"sura\" : 2\n        },\n        \"text\" : \"Indeed, as-Safa and al-Marwah are among the symbols of Allah . So whoever makes Hajj to the House or performs 'umrah - there is no blame upon him for walking between them. And whoever volunteers good - then indeed, Allah is appreciative and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 159,\n          \"sura\" : 2\n        },\n        \"text\" : \"Indeed, those who conceal what We sent down of clear proofs and guidance after We made it clear for the people in the Scripture - those are cursed by Allah and cursed by those who curse,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 161,\n          \"sura\" : 2\n        },\n        \"text\" : \"Indeed, those who disbelieve and die while they are disbelievers - upon them will be the curse of Allah and of the angels and the people, all together,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 162,\n          \"sura\" : 2\n        },\n        \"text\" : \"Abiding eternally therein. The punishment will not be lightened for them, nor will they be reprieved.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 163,\n          \"sura\" : 2\n        },\n        \"text\" : \"And your god is one God. There is no deity [worthy of worship] except Him, the Entirely Merciful, the Especially Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 164,\n          \"sura\" : 2\n        },\n        \"text\" : \"Indeed, in the creation of the heavens and earth, and the alternation of the night and the day, and the [great] ships which sail through the sea with that which benefits people, and what Allah has sent down from the heavens of rain, giving life thereby to the earth after its lifelessness and dispersing therein every [kind of] moving creature, and [His] directing of the winds and the clouds controlled between the heaven and the earth are signs for a people who use reason.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 165,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [yet], among the people are those who take other than Allah as equals [to Him]. They love them as they [should] love Allah . But those who believe are stronger in love for Allah . And if only they who have wronged would consider [that] when they see the punishment, [they will be certain] that all power belongs to Allah and that Allah is severe in punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 166,\n          \"sura\" : 2\n        },\n        \"text\" : \"[And they should consider that] when those who have been followed disassociate themselves from those who followed [them], and they [all] see the punishment, and cut off from them are the ties [of relationship],\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 167,\n          \"sura\" : 2\n        },\n        \"text\" : \"Those who followed will say, \\\"If only we had another turn [at worldly life] so we could disassociate ourselves from them as they have disassociated themselves from us.\\\" Thus will Allah show them their deeds as regrets upon them. And they are never to emerge from the Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 169,\n          \"sura\" : 2\n        },\n        \"text\" : \"He only orders you to evil and immorality and to say about Allah what you do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 170,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when it is said to them, \\\"Follow what Allah has revealed,\\\" they say, \\\"Rather, we will follow that which we found our fathers doing.\\\" Even though their fathers understood nothing, nor were they guided?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 171,\n          \"sura\" : 2\n        },\n        \"text\" : \"The example of those who disbelieve is like that of one who shouts at what hears nothing but calls and cries cattle or sheep - deaf, dumb and blind, so they do not understand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 172,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who have believed, eat from the good things which We have provided for you and be grateful to Allah if it is [indeed] Him that you worship.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 173,\n          \"sura\" : 2\n        },\n        \"text\" : \"He has only forbidden to you dead animals, blood, the flesh of swine, and that which has been dedicated to other than Allah . But whoever is forced [by necessity], neither desiring [it] nor transgressing [its limit], there is no sin upon him. Indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 174,\n          \"sura\" : 2\n        },\n        \"text\" : \"Indeed, they who conceal what Allah has sent down of the Book and exchange it for a small price - those consume not into their bellies except the Fire. And Allah will not speak to them on the Day of Resurrection, nor will He purify them. And they will have a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 176,\n          \"sura\" : 2\n        },\n        \"text\" : \"That is [deserved by them] because Allah has sent down the Book in truth. And indeed, those who differ over the Book are in extreme dissension.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 177,\n          \"sura\" : 2\n        },\n        \"text\" : \"Righteousness is not that you turn your faces toward the east or the west, but [true] righteousness is [in] one who believes in Allah, the Last Day, the angels, the Book, and the prophets and gives wealth, in spite of love for it, to relatives, orphans, the needy, the traveler, those who ask [for help], and for freeing slaves; [and who] establishes prayer and gives zakah; [those who] fulfill their promise when they promise; and [those who] are patient in poverty and hardship and during battle. Those are the ones who have been true, and it is those who are the righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 178,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who have believed, prescribed for you is legal retribution for those murdered - the free for the free, the slave for the slave, and the female for the female. But whoever overlooks from his brother anything, then there should be a suitable follow-up and payment to him with good conduct. This is an alleviation from your Lord and a mercy. But whoever transgresses after that will have a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 181,\n          \"sura\" : 2\n        },\n        \"text\" : \"Then whoever alters the bequest after he has heard it - the sin is only upon those who have altered it. Indeed, Allah is Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 182,\n          \"sura\" : 2\n        },\n        \"text\" : \"But if one fears from the bequeather [some] error or sin and corrects that which is between them, there is no sin upon him. Indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 185,\n          \"sura\" : 2\n        },\n        \"text\" : \"The month of Ramadhan [is that] in which was revealed the Qur'an, a guidance for the people and clear proofs of guidance and criterion. So whoever sights [the new moon of] the month, let him fast it; and whoever is ill or on a journey - then an equal number of other days. Allah intends for you ease and does not intend for you hardship and [wants] for you to complete the period and to glorify Allah for that [to] which He has guided you; and perhaps you will be grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 186,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when My servants ask you, [O Muhammad], concerning Me - indeed I am near. I respond to the invocation of the supplicant when he calls upon Me. So let them respond to Me [by obedience] and believe in Me that they may be [rightly] guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 187,\n          \"sura\" : 2\n        },\n        \"text\" : \"It has been made permissible for you the night preceding fasting to go to your wives [for sexual relations]. They are clothing for you and you are clothing for them. Allah knows that you used to deceive yourselves, so He accepted your repentance and forgave you. So now, have relations with them and seek that which Allah has decreed for you. And eat and drink until the white thread of dawn becomes distinct to you from the black thread [of night]. Then complete the fast until the sunset. And do not have relations with them as long as you are staying for worship in the mosques. These are the limits [set by] Allah, so do not approach them. Thus does Allah make clear His ordinances to the people that they may become righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 189,\n          \"sura\" : 2\n        },\n        \"text\" : \"They ask you, [O Muhammad], about the new moons. Say, \\\"They are measurements of time for the people and for Hajj.\\\" And it is not righteousness to enter houses from the back, but righteousness is [in] one who fears Allah. And enter houses from their doors. And fear Allah that you may succeed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 190,\n          \"sura\" : 2\n        },\n        \"text\" : \"Fight in the way of Allah those who fight you but do not transgress. Indeed. Allah does not like transgressors.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 192,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if they cease, then indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 193,\n          \"sura\" : 2\n        },\n        \"text\" : \"Fight them until there is no [more] fitnah and [until] worship is [acknowledged to be] for Allah . But if they cease, then there is to be no aggression except against the oppressors.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 194,\n          \"sura\" : 2\n        },\n        \"text\" : \"[Fighting in] the sacred month is for [aggression committed in] the sacred month, and for [all] violations is legal retribution. So whoever has assaulted you, then assault him in the same way that he has assaulted you. And fear Allah and know that Allah is with those who fear Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 195,\n          \"sura\" : 2\n        },\n        \"text\" : \"And spend in the way of Allah and do not throw [yourselves] with your [own] hands into destruction [by refraining]. And do good; indeed, Allah loves the doers of good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 196,\n          \"sura\" : 2\n        },\n        \"text\" : \"And complete the Hajj and 'umrah for Allah . But if you are prevented, then [offer] what can be obtained with ease of sacrificial animals. And do not shave your heads until the sacrificial animal has reached its place of slaughter. And whoever among you is ill or has an ailment of the head [making shaving necessary must offer] a ransom of fasting [three days] or charity or sacrifice. And when you are secure, then whoever performs 'umrah [during the Hajj months] followed by Hajj [offers] what can be obtained with ease of sacrificial animals. And whoever cannot find [or afford such an animal] - then a fast of three days during Hajj and of seven when you have returned [home]. Those are ten complete [days]. This is for those whose family is not in the area of al-Masjid al-Haram. And fear Allah and know that Allah is severe in penalty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 197,\n          \"sura\" : 2\n        },\n        \"text\" : \"Hajj is [during] well-known months, so whoever has made Hajj obligatory upon himself therein [by entering the state of ihram], there is [to be for him] no sexual relations and no disobedience and no disputing during Hajj. And whatever good you do - Allah knows it. And take provisions, but indeed, the best provision is fear of Allah . And fear Me, O you of understanding.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 198,\n          \"sura\" : 2\n        },\n        \"text\" : \"There is no blame upon you for seeking bounty from your Lord [during Hajj]. But when you depart from 'Arafat, remember Allah at al- Mash'ar al-Haram. And remember Him, as He has guided you, for indeed, you were before that among those astray.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 199,\n          \"sura\" : 2\n        },\n        \"text\" : \"Then depart from the place from where [all] the people depart and ask forgiveness of Allah . Indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 200,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when you have completed your rites, remember Allah like your [previous] remembrance of your fathers or with [much] greater remembrance. And among the people is he who says, \\\"Our Lord, give us in this world,\\\" and he will have in the Hereafter no share.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 202,\n          \"sura\" : 2\n        },\n        \"text\" : \"Those will have a share of what they have earned, and Allah is swift in account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 203,\n          \"sura\" : 2\n        },\n        \"text\" : \"And remember Allah during [specific] numbered days. Then whoever hastens [his departure] in two days - there is no sin upon him; and whoever delays [until the third] - there is no sin upon him - for him who fears Allah . And fear Allah and know that unto Him you will be gathered.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 204,\n          \"sura\" : 2\n        },\n        \"text\" : \"And of the people is he whose speech pleases you in worldly life, and he calls Allah to witness as to what is in his heart, yet he is the fiercest of opponents.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 205,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when he goes away, he strives throughout the land to cause corruption therein and destroy crops and animals. And Allah does not like corruption.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 206,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when it is said to him, \\\"Fear Allah,\\\" pride in the sin takes hold of him. Sufficient for him is Hellfire, and how wretched is the resting place.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 207,\n          \"sura\" : 2\n        },\n        \"text\" : \"And of the people is he who sells himself, seeking means to the approval of Allah . And Allah is kind to [His] servants.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 209,\n          \"sura\" : 2\n        },\n        \"text\" : \"But if you deviate after clear proofs have come to you, then know that Allah is Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 210,\n          \"sura\" : 2\n        },\n        \"text\" : \"Do they await but that Allah should come to them in covers of clouds and the angels [as well] and the matter is [then] decided? And to Allah [all] matters are returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 211,\n          \"sura\" : 2\n        },\n        \"text\" : \"Ask the Children of Israel how many a sign of evidence We have given them. And whoever exchanges the favor of Allah [for disbelief] after it has come to him - then indeed, Allah is severe in penalty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 212,\n          \"sura\" : 2\n        },\n        \"text\" : \"Beautified for those who disbelieve is the life of this world, and they ridicule those who believe. But those who fear Allah are above them on the Day of Resurrection. And Allah gives provision to whom He wills without account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 213,\n          \"sura\" : 2\n        },\n        \"text\" : \"Mankind was [of] one religion [before their deviation]; then Allah sent the prophets as bringers of good tidings and warners and sent down with them the Scripture in truth to judge between the people concerning that in which they differed. And none differed over the Scripture except those who were given it - after the clear proofs came to them - out of jealous animosity among themselves. And Allah guided those who believed to the truth concerning that over which they had differed, by His permission. And Allah guides whom He wills to a straight path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 214,\n          \"sura\" : 2\n        },\n        \"text\" : \"Or do you think that you will enter Paradise while such [trial] has not yet come to you as came to those who passed on before you? They were touched by poverty and hardship and were shaken until [even their] messenger and those who believed with him said,\\\"When is the help of Allah ?\\\" Unquestionably, the help of Allah is near.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 215,\n          \"sura\" : 2\n        },\n        \"text\" : \"They ask you, [O Muhammad], what they should spend. Say, \\\"Whatever you spend of good is [to be] for parents and relatives and orphans and the needy and the traveler. And whatever you do of good - indeed, Allah is Knowing of it.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 216,\n          \"sura\" : 2\n        },\n        \"text\" : \"Fighting has been enjoined upon you while it is hateful to you. But perhaps you hate a thing and it is good for you; and perhaps you love a thing and it is bad for you. And Allah Knows, while you know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 217,\n          \"sura\" : 2\n        },\n        \"text\" : \"They ask you about the sacred month - about fighting therein. Say, \\\"Fighting therein is great [sin], but averting [people] from the way of Allah and disbelief in Him and [preventing access to] al-Masjid al-Haram and the expulsion of its people therefrom are greater [evil] in the sight of Allah . And fitnah is greater than killing.\\\" And they will continue to fight you until they turn you back from your religion if they are able. And whoever of you reverts from his religion [to disbelief] and dies while he is a disbeliever - for those, their deeds have become worthless in this world and the Hereafter, and those are the companions of the Fire, they will abide therein eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 218,\n          \"sura\" : 2\n        },\n        \"text\" : \"Indeed, those who have believed and those who have emigrated and fought in the cause of Allah - those expect the mercy of Allah . And Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 219,\n          \"sura\" : 2\n        },\n        \"text\" : \"They ask you about wine and gambling. Say, \\\"In them is great sin and [yet, some] benefit for people. But their sin is greater than their benefit.\\\" And they ask you what they should spend. Say, \\\"The excess [beyond needs].\\\" Thus Allah makes clear to you the verses [of revelation] that you might give thought.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 220,\n          \"sura\" : 2\n        },\n        \"text\" : \"To this world and the Hereafter. And they ask you about orphans. Say, \\\"Improvement for them is best. And if you mix your affairs with theirs - they are your brothers. And Allah knows the corrupter from the amender. And if Allah had willed, He could have put you in difficulty. Indeed, Allah is Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 221,\n          \"sura\" : 2\n        },\n        \"text\" : \"And do not marry polytheistic women until they believe. And a believing slave woman is better than a polytheist, even though she might please you. And do not marry polytheistic men [to your women] until they believe. And a believing slave is better than a polytheist, even though he might please you. Those invite [you] to the Fire, but Allah invites to Paradise and to forgiveness, by His permission. And He makes clear His verses to the people that perhaps they may remember.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 222,\n          \"sura\" : 2\n        },\n        \"text\" : \"And they ask you about menstruation. Say, \\\"It is harm, so keep away from wives during menstruation. And do not approach them until they are pure. And when they have purified themselves, then come to them from where Allah has ordained for you. Indeed, Allah loves those who are constantly repentant and loves those who purify themselves.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 223,\n          \"sura\" : 2\n        },\n        \"text\" : \"Your wives are a place of sowing of seed for you, so come to your place of cultivation however you wish and put forth [righteousness] for yourselves. And fear Allah and know that you will meet Him. And give good tidings to the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 224,\n          \"sura\" : 2\n        },\n        \"text\" : \"And do not make [your oath by] Allah an excuse against being righteous and fearing Allah and making peace among people. And Allah is Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 225,\n          \"sura\" : 2\n        },\n        \"text\" : \"Allah does not impose blame upon you for what is unintentional in your oaths, but He imposes blame upon you for what your hearts have earned. And Allah is Forgiving and Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 226,\n          \"sura\" : 2\n        },\n        \"text\" : \"For those who swear not to have sexual relations with their wives is a waiting time of four months, but if they return [to normal relations] - then indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 227,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if they decide on divorce - then indeed, Allah is Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 228,\n          \"sura\" : 2\n        },\n        \"text\" : \"Divorced women remain in waiting for three periods, and it is not lawful for them to conceal what Allah has created in their wombs if they believe in Allah and the Last Day. And their husbands have more right to take them back in this [period] if they want reconciliation. And due to the wives is similar to what is expected of them, according to what is reasonable. But the men have a degree over them [in responsibility and authority]. And Allah is Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 229,\n          \"sura\" : 2\n        },\n        \"text\" : \"Divorce is twice. Then, either keep [her] in an acceptable manner or release [her] with good treatment. And it is not lawful for you to take anything of what you have given them unless both fear that they will not be able to keep [within] the limits of Allah . But if you fear that they will not keep [within] the limits of Allah, then there is no blame upon either of them concerning that by which she ransoms herself. These are the limits of Allah, so do not transgress them. And whoever transgresses the limits of Allah - it is those who are the wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 230,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if he has divorced her [for the third time], then she is not lawful to him afterward until [after] she marries a husband other than him. And if the latter husband divorces her [or dies], there is no blame upon the woman and her former husband for returning to each other if they think that they can keep [within] the limits of Allah . These are the limits of Allah, which He makes clear to a people who know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 231,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when you divorce women and they have [nearly] fulfilled their term, either retain them according to acceptable terms or release them according to acceptable terms, and do not keep them, intending harm, to transgress [against them]. And whoever does that has certainly wronged himself. And do not take the verses of Allah in jest. And remember the favor of Allah upon you and what has been revealed to you of the Book and wisdom by which He instructs you. And fear Allah and know that Allah is Knowing of all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 232,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when you divorce women and they have fulfilled their term, do not prevent them from remarrying their [former] husbands if they agree among themselves on an acceptable basis. That is instructed to whoever of you believes in Allah and the Last Day. That is better for you and purer, and Allah knows and you know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 233,\n          \"sura\" : 2\n        },\n        \"text\" : \"Mothers may breastfeed their children two complete years for whoever wishes to complete the nursing [period]. Upon the father is the mothers' provision and their clothing according to what is acceptable. No person is charged with more than his capacity. No mother should be harmed through her child, and no father through his child. And upon the [father's] heir is [a duty] like that [of the father]. And if they both desire weaning through mutual consent from both of them and consultation, there is no blame upon either of them. And if you wish to have your children nursed by a substitute, there is no blame upon you as long as you give payment according to what is acceptable. And fear Allah and know that Allah is Seeing of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 234,\n          \"sura\" : 2\n        },\n        \"text\" : \"And those who are taken in death among you and leave wives behind - they, [the wives, shall] wait four months and ten [days]. And when they have fulfilled their term, then there is no blame upon you for what they do with themselves in an acceptable manner. And Allah is [fully] Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 235,\n          \"sura\" : 2\n        },\n        \"text\" : \"There is no blame upon you for that to which you [indirectly] allude concerning a proposal to women or for what you conceal within yourselves. Allah knows that you will have them in mind. But do not promise them secretly except for saying a proper saying. And do not determine to undertake a marriage contract until the decreed period reaches its end. And know that Allah knows what is within yourselves, so beware of Him. And know that Allah is Forgiving and Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 237,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if you divorce them before you have touched them and you have already specified for them an obligation, then [give] half of what you specified - unless they forego the right or the one in whose hand is the marriage contract foregoes it. And to forego it is nearer to righteousness. And do not forget graciousness between you. Indeed Allah, of whatever you do, is Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 238,\n          \"sura\" : 2\n        },\n        \"text\" : \"Maintain with care the [obligatory] prayers and [in particular] the middle prayer and stand before Allah, devoutly obedient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 239,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if you fear [an enemy, then pray] on foot or riding. But when you are secure, then remember Allah [in prayer], as He has taught you that which you did not [previously] know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 240,\n          \"sura\" : 2\n        },\n        \"text\" : \"And those who are taken in death among you and leave wives behind - for their wives is a bequest: maintenance for one year without turning [them] out. But if they leave [of their own accord], then there is no blame upon you for what they do with themselves in an acceptable way. And Allah is Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 242,\n          \"sura\" : 2\n        },\n        \"text\" : \"Thus does Allah make clear to you His verses that you might use reason.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 243,\n          \"sura\" : 2\n        },\n        \"text\" : \"Have you not considered those who left their homes in many thousands, fearing death? Allah said to them, \\\"Die\\\"; then He restored them to life. And Allah is full of bounty to the people, but most of the people do not show gratitude.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 244,\n          \"sura\" : 2\n        },\n        \"text\" : \"And fight in the cause of Allah and know that Allah is Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 245,\n          \"sura\" : 2\n        },\n        \"text\" : \"Who is it that would loan Allah a goodly loan so He may multiply it for him many times over? And it is Allah who withholds and grants abundance, and to Him you will be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 246,\n          \"sura\" : 2\n        },\n        \"text\" : \"Have you not considered the assembly of the Children of Israel after [the time of] Moses when they said to a prophet of theirs, \\\"Send to us a king, and we will fight in the way of Allah \\\"? He said, \\\"Would you perhaps refrain from fighting if fighting was prescribed for you?\\\" They said, \\\"And why should we not fight in the cause of Allah when we have been driven out from our homes and from our children?\\\" But when fighting was prescribed for them, they turned away, except for a few of them. And Allah is Knowing of the wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 247,\n          \"sura\" : 2\n        },\n        \"text\" : \"And their prophet said to them, \\\"Indeed, Allah has sent to you Saul as a king.\\\" They said, \\\"How can he have kingship over us while we are more worthy of kingship than him and he has not been given any measure of wealth?\\\" He said, \\\"Indeed, Allah has chosen him over you and has increased him abundantly in knowledge and stature. And Allah gives His sovereignty to whom He wills. And Allah is all-Encompassing [in favor] and Knowing.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 249,\n          \"sura\" : 2\n        },\n        \"text\" : \"And when Saul went forth with the soldiers, he said, \\\"Indeed, Allah will be testing you with a river. So whoever drinks from it is not of me, and whoever does not taste it is indeed of me, excepting one who takes [from it] in the hollow of his hand.\\\" But they drank from it, except a [very] few of them. Then when he had crossed it along with those who believed with him, they said, \\\"There is no power for us today against Goliath and his soldiers.\\\" But those who were certain that they would meet Allah said, \\\"How many a small company has overcome a large company by permission of Allah . And Allah is with the patient.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 251,\n          \"sura\" : 2\n        },\n        \"text\" : \"So they defeated them by permission of Allah, and David killed Goliath, and Allah gave him the kingship and prophethood and taught him from that which He willed. And if it were not for Allah checking [some] people by means of others, the earth would have been corrupted, but Allah is full of bounty to the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 252,\n          \"sura\" : 2\n        },\n        \"text\" : \"These are the verses of Allah which We recite to you, [O Muhammad], in truth. And indeed, you are from among the messengers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 253,\n          \"sura\" : 2\n        },\n        \"text\" : \"Those messengers - some of them We caused to exceed others. Among them were those to whom Allah spoke, and He raised some of them in degree. And We gave Jesus, the Son of Mary, clear proofs, and We supported him with the Pure Spirit. If Allah had willed, those [generations] succeeding them would not have fought each other after the clear proofs had come to them. But they differed, and some of them believed and some of them disbelieved. And if Allah had willed, they would not have fought each other, but Allah does what He intends.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 255,\n          \"sura\" : 2\n        },\n        \"text\" : \"Allah - there is no deity except Him, the Ever-Living, the Sustainer of [all] existence. Neither drowsiness overtakes Him nor sleep. To Him belongs whatever is in the heavens and whatever is on the earth. Who is it that can intercede with Him except by His permission? He knows what is [presently] before them and what will be after them, and they encompass not a thing of His knowledge except for what He wills. His Kursi extends over the heavens and the earth, and their preservation tires Him not. And He is the Most High, the Most Great.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 256,\n          \"sura\" : 2\n        },\n        \"text\" : \"There shall be no compulsion in [acceptance of] the religion. The right course has become clear from the wrong. So whoever disbelieves in Taghut and believes in Allah has grasped the most trustworthy handhold with no break in it. And Allah is Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 257,\n          \"sura\" : 2\n        },\n        \"text\" : \"Allah is the ally of those who believe. He brings them out from darknesses into the light. And those who disbelieve - their allies are Taghut. They take them out of the light into darknesses. Those are the companions of the Fire; they will abide eternally therein.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 258,\n          \"sura\" : 2\n        },\n        \"text\" : \"Have you not considered the one who argued with Abraham about his Lord [merely] because Allah had given him kingship? When Abraham said, \\\"My Lord is the one who gives life and causes death,\\\" he said, \\\"I give life and cause death.\\\" Abraham said, \\\"Indeed, Allah brings up the sun from the east, so bring it up from the west.\\\" So the disbeliever was overwhelmed [by astonishment], and Allah does not guide the wrongdoing people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 259,\n          \"sura\" : 2\n        },\n        \"text\" : \"Or [consider such an example] as the one who passed by a township which had fallen into ruin. He said, \\\"How will Allah bring this to life after its death?\\\" So Allah caused him to die for a hundred years; then He revived him. He said, \\\"How long have you remained?\\\" The man said, \\\"I have remained a day or part of a day.\\\" He said, \\\"Rather, you have remained one hundred years. Look at your food and your drink; it has not changed with time. And look at your donkey; and We will make you a sign for the people. And look at the bones [of this donkey] - how We raise them and then We cover them with flesh.\\\" And when it became clear to him, he said, \\\"I know that Allah is over all things competent.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 260,\n          \"sura\" : 2\n        },\n        \"text\" : \"And [mention] when Abraham said, \\\"My Lord, show me how You give life to the dead.\\\" [ Allah ] said, \\\"Have you not believed?\\\" He said, \\\"Yes, but [I ask] only that my heart may be satisfied.\\\" [ Allah ] said, \\\"Take four birds and commit them to yourself. Then [after slaughtering them] put on each hill a portion of them; then call them - they will come [flying] to you in haste. And know that Allah is Exalted in Might and Wise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 261,\n          \"sura\" : 2\n        },\n        \"text\" : \"The example of those who spend their wealth in the way of Allah is like a seed [of grain] which grows seven spikes; in each spike is a hundred grains. And Allah multiplies [His reward] for whom He wills. And Allah is all-Encompassing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 262,\n          \"sura\" : 2\n        },\n        \"text\" : \"Those who spend their wealth in the way of Allah and then do not follow up what they have spent with reminders [of it] or [other] injury will have their reward with their Lord, and there will be no fear concerning them, nor will they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 263,\n          \"sura\" : 2\n        },\n        \"text\" : \"Kind speech and forgiveness are better than charity followed by injury. And Allah is Free of need and Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 264,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who have believed, do not invalidate your charities with reminders or injury as does one who spends his wealth [only] to be seen by the people and does not believe in Allah and the Last Day. His example is like that of a [large] smooth stone upon which is dust and is hit by a downpour that leaves it bare. They are unable [to keep] anything of what they have earned. And Allah does not guide the disbelieving people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 265,\n          \"sura\" : 2\n        },\n        \"text\" : \"And the example of those who spend their wealth seeking means to the approval of Allah and assuring [reward for] themselves is like a garden on high ground which is hit by a downpour - so it yields its fruits in double. And [even] if it is not hit by a downpour, then a drizzle [is sufficient]. And Allah, of what you do, is Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 266,\n          \"sura\" : 2\n        },\n        \"text\" : \"Would one of you like to have a garden of palm trees and grapevines underneath which rivers flow in which he has from every fruit? But he is afflicted with old age and has weak offspring, and it is hit by a whirlwind containing fire and is burned. Thus does Allah make clear to you [His] verses that you might give thought.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 267,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who have believed, spend from the good things which you have earned and from that which We have produced for you from the earth. And do not aim toward the defective therefrom, spending [from that] while you would not take it [yourself] except with closed eyes. And know that Allah is Free of need and Praiseworthy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 268,\n          \"sura\" : 2\n        },\n        \"text\" : \"Satan threatens you with poverty and orders you to immorality, while Allah promises you forgiveness from Him and bounty. And Allah is all-Encompassing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 270,\n          \"sura\" : 2\n        },\n        \"text\" : \"And whatever you spend of expenditures or make of vows - indeed, Allah knows of it. And for the wrongdoers there are no helpers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 271,\n          \"sura\" : 2\n        },\n        \"text\" : \"If you disclose your charitable expenditures, they are good; but if you conceal them and give them to the poor, it is better for you, and He will remove from you some of your misdeeds [thereby]. And Allah, with what you do, is [fully] Acquainted.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 272,\n          \"sura\" : 2\n        },\n        \"text\" : \"Not upon you, [O Muhammad], is [responsibility for] their guidance, but Allah guides whom He wills. And whatever good you [believers] spend is for yourselves, and you do not spend except seeking the countenance of Allah . And whatever you spend of good - it will be fully repaid to you, and you will not be wronged.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 273,\n          \"sura\" : 2\n        },\n        \"text\" : \"[Charity is] for the poor who have been restricted for the cause of Allah, unable to move about in the land. An ignorant [person] would think them self-sufficient because of their restraint, but you will know them by their [characteristic] sign. They do not ask people persistently [or at all]. And whatever you spend of good - indeed, Allah is Knowing of it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 274,\n          \"sura\" : 2\n        },\n        \"text\" : \"Those who spend their wealth [in Allah 's way] by night and by day, secretly and publicly - they will have their reward with their Lord. And no fear will there be concerning them, nor will they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 275,\n          \"sura\" : 2\n        },\n        \"text\" : \"Those who consume interest cannot stand [on the Day of Resurrection] except as one stands who is being beaten by Satan into insanity. That is because they say, \\\"Trade is [just] like interest.\\\" But Allah has permitted trade and has forbidden interest. So whoever has received an admonition from his Lord and desists may have what is past, and his affair rests with Allah . But whoever returns to [dealing in interest or usury] - those are the companions of the Fire; they will abide eternally therein.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 276,\n          \"sura\" : 2\n        },\n        \"text\" : \"Allah destroys interest and gives increase for charities. And Allah does not like every sinning disbeliever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 278,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who have believed, fear Allah and give up what remains [due to you] of interest, if you should be believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 279,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if you do not, then be informed of a war [against you] from Allah and His Messenger. But if you repent, you may have your principal - [thus] you do no wrong, nor are you wronged.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 281,\n          \"sura\" : 2\n        },\n        \"text\" : \"And fear a Day when you will be returned to Allah . Then every soul will be compensated for what it earned, and they will not be treated unjustly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 282,\n          \"sura\" : 2\n        },\n        \"text\" : \"O you who have believed, when you contract a debt for a specified term, write it down. And let a scribe write [it] between you in justice. Let no scribe refuse to write as Allah has taught him. So let him write and let the one who has the obligation dictate. And let him fear Allah, his Lord, and not leave anything out of it. But if the one who has the obligation is of limited understanding or weak or unable to dictate himself, then let his guardian dictate in justice. And bring to witness two witnesses from among your men. And if there are not two men [available], then a man and two women from those whom you accept as witnesses - so that if one of the women errs, then the other can remind her. And let not the witnesses refuse when they are called upon. And do not be [too] weary to write it, whether it is small or large, for its [specified] term. That is more just in the sight of Allah and stronger as evidence and more likely to prevent doubt between you, except when it is an immediate transaction which you conduct among yourselves. For [then] there is no blame upon you if you do not write it. And take witnesses when you conclude a contract. Let no scribe be harmed or any witness. For if you do so, indeed, it is [grave] disobedience in you. And fear Allah . And Allah teaches you. And Allah is Knowing of all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 283,\n          \"sura\" : 2\n        },\n        \"text\" : \"And if you are on a journey and cannot find a scribe, then a security deposit [should be] taken. And if one of you entrusts another, then let him who is entrusted discharge his trust [faithfully] and let him fear Allah, his Lord. And do not conceal testimony, for whoever conceals it - his heart is indeed sinful, and Allah is Knowing of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 284,\n          \"sura\" : 2\n        },\n        \"text\" : \"To Allah belongs whatever is in the heavens and whatever is in the earth. Whether you show what is within yourselves or conceal it, Allah will bring you to account for it. Then He will forgive whom He wills and punish whom He wills, and Allah is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 285,\n          \"sura\" : 2\n        },\n        \"text\" : \"The Messenger has believed in what was revealed to him from his Lord, and [so have] the believers. All of them have believed in Allah and His angels and His books and His messengers, [saying], \\\"We make no distinction between any of His messengers.\\\" And they say, \\\"We hear and we obey. [We seek] Your forgiveness, our Lord, and to You is the [final] destination.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 286,\n          \"sura\" : 2\n        },\n        \"text\" : \"Allah does not charge a soul except [with that within] its capacity. It will have [the consequence of] what [good] it has gained, and it will bear [the consequence of] what [evil] it has earned. \\\"Our Lord, do not impose blame upon us if we have forgotten or erred. Our Lord, and lay not upon us a burden like that which You laid upon those before us. Our Lord, and burden us not with that which we have no ability to bear. And pardon us; and forgive us; and have mercy upon us. You are our protector, so give us victory over the disbelieving people.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 3\n        },\n        \"text\" : \"Allah -  there is no deity except Him, the Ever-Living, the Sustainer of existence.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 3\n        },\n        \"text\" : \"Before, as guidance for the people. And He revealed the Qur'an. Indeed, those who disbelieve in the verses of Allah will have a severe punishment, and Allah is exalted in Might, the Owner of Retribution.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 3\n        },\n        \"text\" : \"Indeed, from Allah nothing is hidden in the earth nor in the heaven.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 3\n        },\n        \"text\" : \"It is He who has sent down to you, [O Muhammad], the Book; in it are verses [that are] precise -  they are the foundation of the Book -  and others unspecific. As for those in whose hearts is deviation [from truth], they will follow that of it which is unspecific, seeking discord and seeking an interpretation [suitable to them]. And no one knows its [true] interpretation except Allah . But those firm in knowledge say, \\\"We believe in it. All [of it] is from our Lord.\\\" And no one will be reminded except those of understanding.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 3\n        },\n        \"text\" : \"Our Lord, surely You will gather the people for a Day about which there is no doubt. Indeed, Allah does not fail in His promise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 3\n        },\n        \"text\" : \"Indeed, those who disbelieve -  never will their wealth or their children avail them against Allah at all. And it is they who are fuel for the Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 3\n        },\n        \"text\" : \"[Theirs is] like the custom of the people of Pharaoh and those before them. They denied Our signs, so Allah seized them for their sins. And Allah is severe in penalty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 3\n        },\n        \"text\" : \"Already there has been for you a sign in the two armies which met -  one fighting in the cause of Allah and another of disbelievers. They saw them [to be] twice their [own] number by [their] eyesight. But Allah supports with His victory whom He wills. Indeed in that is a lesson for those of vision.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 3\n        },\n        \"text\" : \"Beautified for people is the love of that which they desire -  of women and sons, heaped-up sums of gold and silver, fine branded horses, and cattle and tilled land. That is the enjoyment of worldly life, but Allah has with Him the best return.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say, \\\"Shall I inform you of [something] better than that? For those who fear Allah will be gardens in the presence of their Lord beneath which rivers flow, wherein they abide eternally, and purified spouses and approval from Allah . And Allah is Seeing of [His] servants -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 3\n        },\n        \"text\" : \"The patient, the true, the obedient, those who spend [in the way of Allah ], and those who seek forgiveness before dawn.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 3\n        },\n        \"text\" : \"Allah witnesses that there is no deity except Him, and [so do] the angels and those of knowledge -  [that He is] maintaining [creation] in justice. There is no deity except Him, the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 3\n        },\n        \"text\" : \"Indeed, the religion in the sight of Allah is Islam. And those who were given the Scripture did not differ except after knowledge had come to them -  out of jealous animosity between themselves. And whoever disbelieves in the verses of Allah, then indeed, Allah is swift in [taking] account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 3\n        },\n        \"text\" : \"So if they argue with you, say, \\\"I have submitted myself to Allah [in Islam], and [so have] those who follow me.\\\" And say to those who were given the Scripture and [to] the unlearned, \\\"Have you submitted yourselves?\\\" And if they submit [in Islam], they are rightly guided; but if they turn away -  then upon you is only the [duty of] notification. And Allah is Seeing of [His] servants.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 3\n        },\n        \"text\" : \"Those who disbelieve in the signs of Allah and kill the prophets without right and kill those who order justice from among the people -  give them tidings of a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 3\n        },\n        \"text\" : \"Do you not consider, [O Muhammad], those who were given a portion of the Scripture? They are invited to the Scripture of Allah that it should arbitrate between them; then a party of them turns away, and they are refusing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say, \\\"O Allah, Owner of Sovereignty, You give sovereignty to whom You will and You take sovereignty away from whom You will. You honor whom You will and You humble whom You will. In Your hand is [all] good. Indeed, You are over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 3\n        },\n        \"text\" : \"Let not believers take disbelievers as allies rather than believers. And whoever [of you] does that has nothing with Allah, except when taking precaution against them in prudence. And Allah warns you of Himself, and to Allah is the [final] destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say, \\\"Whether you conceal what is in your breasts or reveal it, Allah knows it. And He knows that which is in the heavens and that which is on the earth. And Allah is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 3\n        },\n        \"text\" : \"The Day every soul will find what it has done of good present [before it] and what it has done of evil, it will wish that between itself and that [evil] was a great distance. And Allah warns you of Himself, and Allah is Kind to [His] servants.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"If you should love Allah, then follow me, [so] Allah will love you and forgive you your sins. And Allah is Forgiving and Merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say, \\\"Obey Allah and the Messenger.\\\" But if they turn away -  then indeed, Allah does not like the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 3\n        },\n        \"text\" : \"Indeed, Allah chose Adam and Noah and the family of Abraham and the family of 'Imran over the worlds -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 3\n        },\n        \"text\" : \"Descendants, some of them from others. And Allah is Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 3\n        },\n        \"text\" : \"But when she delivered her, she said, \\\"My Lord, I have delivered a female.\\\" And Allah was most knowing of what she delivered, \\\"And the male is not like the female. And I have named her Mary, and I seek refuge for her in You and [for] her descendants from Satan, the expelled [from the mercy of Allah ].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 3\n        },\n        \"text\" : \"So her Lord accepted her with good acceptance and caused her to grow in a good manner and put her in the care of Zechariah. Every time Zechariah entered upon her in the prayer chamber, he found with her provision. He said, \\\"O Mary, from where is this [coming] to you?\\\" She said, \\\"It is from Allah . Indeed, Allah provides for whom He wills without account.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 3\n        },\n        \"text\" : \"At that, Zechariah called upon his Lord, saying, \\\"My Lord, grant me from Yourself a good offspring. Indeed, You are the Hearer of supplication.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 3\n        },\n        \"text\" : \"So the angels called him while he was standing in prayer in the chamber, \\\"Indeed, Allah gives you good tidings of John, confirming a word from Allah and [who will be] honorable, abstaining [from women], and a prophet from among the righteous.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 3\n        },\n        \"text\" : \"He said, \\\"My Lord, how will I have a boy when I have reached old age and my wife is barren?\\\" The angel said, \\\"Such is Allah ; He does what He wills.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 3\n        },\n        \"text\" : \"And [mention] when the angels said, \\\"O Mary, indeed Allah has chosen you and purified you and chosen you above the women of the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 3\n        },\n        \"text\" : \"[And mention] when the angels said, \\\"O Mary, indeed Allah gives you good tidings of a word from Him, whose name will be the Messiah, Jesus, the son of Mary - distinguished in this world and the Hereafter and among those brought near [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 3\n        },\n        \"text\" : \"She said, \\\"My Lord, how will I have a child when no man has touched me?\\\" [The angel] said, \\\"Such is Allah ; He creates what He wills. When He decrees a matter, He only says to it, 'Be,' and it is.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 3\n        },\n        \"text\" : \"And [make him] a messenger to the Children of Israel, [who will say], 'Indeed I have come to you with a sign from your Lord in that I design for you from clay [that which is] like the form of a bird, then I breathe into it and it becomes a bird by permission of Allah . And I cure the blind and the leper, and I give life to the dead -  by permission of Allah . And I inform you of what you eat and what you store in your houses. Indeed in that is a sign for you, if you are believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 3\n        },\n        \"text\" : \"And [I have come] confirming what was before me of the Torah and to make lawful for you some of what was forbidden to you. And I have come to you with a sign from your Lord, so fear Allah and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 3\n        },\n        \"text\" : \"Indeed, Allah is my Lord and your Lord, so worship Him. That is the straight path.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 3\n        },\n        \"text\" : \"But when Jesus felt [persistence in] disbelief from them, he said, \\\"Who are my supporters for [the cause of] Allah ?\\\" The disciples said,\\\" We are supporters for Allah . We have believed in Allah and testify that we are Muslims [submitting to Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 3\n        },\n        \"text\" : \"And the disbelievers planned, but Allah planned. And Allah is the best of planners.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 3\n        },\n        \"text\" : \"[Mention] when Allah said, \\\"O Jesus, indeed I will take you and raise you to Myself and purify you from those who disbelieve and make those who follow you [in submission to Allah alone] superior to those who disbelieve until the Day of Resurrection. Then to Me is your return, and I will judge between you concerning that in which you used to differ.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 3\n        },\n        \"text\" : \"But as for those who believed and did righteous deeds, He will give them in full their rewards, and Allah does not like the wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 3\n        },\n        \"text\" : \"Indeed, the example of Jesus to Allah is like that of Adam. He created him from dust; then He said to him, \\\"Be,\\\" and he was.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 3\n        },\n        \"text\" : \"Then whoever argues with you about it after [this] knowledge has come to you -  say, \\\"Come, let us call our sons and your sons, our women and your women, ourselves and yourselves, then supplicate earnestly [together] and invoke the curse of Allah upon the liars [among us].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 3\n        },\n        \"text\" : \"Indeed, this is the true narration. And there is no deity except Allah . And indeed, Allah is the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 3\n        },\n        \"text\" : \"But if they turn away, then indeed - Allah is Knowing of the corrupters.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say, \\\"O People of the Scripture, come to a word that is equitable between us and you - that we will not worship except Allah and not associate anything with Him and not take one another as lords instead of Allah .\\\" But if they turn away, then say, \\\"Bear witness that we are Muslims [submitting to Him].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 3\n        },\n        \"text\" : \"Here you are -  those who have argued about that of which you have [some] knowledge, but why do you argue about that of which you have no knowledge? And Allah knows, while you know not.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 3\n        },\n        \"text\" : \"Abraham was neither a Jew nor a Christian, but he was one inclining toward truth, a Muslim [submitting to Allah ]. And he was not of the polytheists.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 3\n        },\n        \"text\" : \"Indeed, the most worthy of Abraham among the people are those who followed him [in submission to Allah ] and this prophet, and those who believe [in his message]. And Allah is the ally of the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 3\n        },\n        \"text\" : \"O People of the Scripture, why do you disbelieve in the verses of Allah while you witness [to their truth]?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 3\n        },\n        \"text\" : \"And do not trust except those who follow your religion.\\\" Say, \\\"Indeed, the [true] guidance is the guidance of Allah . [Do you fear] lest someone be given [knowledge] like you were given or that they would [thereby] argue with you before your Lord?\\\" Say, \\\"Indeed, [all] bounty is in the hand of Allah -  He grants it to whom He wills. And Allah is all-Encompassing and Wise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 3\n        },\n        \"text\" : \"He selects for His mercy whom He wills. And Allah is the possessor of great bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 3\n        },\n        \"text\" : \"And among the People of the Scripture is he who, if you entrust him with a great amount [of wealth], he will return it to you. And among them is he who, if you entrust him with a [single] silver coin, he will not return it to you unless you are constantly standing over him [demanding it]. That is because they say, \\\"There is no blame upon us concerning the unlearned.\\\" And they speak untruth about Allah while they know [it].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 3\n        },\n        \"text\" : \"But yes, whoever fulfills his commitment and fears Allah -  then indeed, Allah loves those who fear Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 3\n        },\n        \"text\" : \"Indeed, those who exchange the covenant of Allah and their [own] oaths for a small price will have no share in the Hereafter, and Allah will not speak to them or look at them on the Day of Resurrection, nor will He purify them; and they will have a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 3\n        },\n        \"text\" : \"And indeed, there is among them a party who alter the Scripture with their tongues so you may think it is from the Scripture, but it is not from the Scripture. And they say, \\\"This is from Allah,\\\" but it is not from Allah . And they speak untruth about Allah while they know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 3\n        },\n        \"text\" : \"It is not for a human [prophet] that Allah should give him the Scripture and authority and prophethood and then he would say to the people, \\\"Be servants to me rather than Allah,\\\" but [instead, he would say], \\\"Be pious scholars of the Lord because of what you have taught of the Scripture and because of what you have studied.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 3\n        },\n        \"text\" : \"And [recall, O People of the Scripture], when Allah took the covenant of the prophets, [saying], \\\"Whatever I give you of the Scripture and wisdom and then there comes to you a messenger confirming what is with you, you [must] believe in him and support him.\\\" [ Allah ] said, \\\"Have you acknowledged and taken upon that My commitment?\\\" They said, \\\"We have acknowledged it.\\\" He said, \\\"Then bear witness, and I am with you among the witnesses.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 3\n        },\n        \"text\" : \"So is it other than the religion of Allah they desire, while to Him have submitted [all] those within the heavens and earth, willingly or by compulsion, and to Him they will be returned?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say, \\\"We have believed in Allah and in what was revealed to us and what was revealed to Abraham, Ishmael, Isaac, Jacob, and the Descendants, and in what was given to Moses and Jesus and to the prophets from their Lord. We make no distinction between any of them, and we are Muslims [submitting] to Him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 3\n        },\n        \"text\" : \"How shall Allah guide a people who disbelieved after their belief and had witnessed that the Messenger is true and clear signs had come to them? And Allah does not guide the wrongdoing people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 3\n        },\n        \"text\" : \"Those -  their recompense will be that upon them is the curse of Allah and the angels and the people, all together,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 3\n        },\n        \"text\" : \"Abiding eternally therein. The punishment will not be lightened for them, nor will they be reprieved.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 3\n        },\n        \"text\" : \"Except for those who repent after that and correct themselves. For indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 3\n        },\n        \"text\" : \"Never will you attain the good [reward] until you spend [in the way of Allah ] from that which you love. And whatever you spend -  indeed, Allah is Knowing of it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 3\n        },\n        \"text\" : \"All food was lawful to the Children of Israel except what Israel had made unlawful to himself before the Torah was revealed. Say, [O Muhammad], \\\"So bring the Torah and recite it, if you should be truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 3\n        },\n        \"text\" : \"And whoever invents about Allah untruth after that -  then those are [truly] the wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say, \\\" Allah has told the truth. So follow the religion of Abraham, inclining toward truth; and he was not of the polytheists.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 3\n        },\n        \"text\" : \"In it are clear signs [such as] the standing place of Abraham. And whoever enters it shall be safe. And [due] to Allah from the people is a pilgrimage to the House -  for whoever is able to find thereto a way. But whoever disbelieves -  then indeed, Allah is free from need of the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say, \\\"O People of the Scripture, why do you disbelieve in the verses of Allah while Allah is Witness over what you do?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 3\n        },\n        \"text\" : \"Say, \\\"O People of the Scripture, why do you avert from the way of Allah those who believe, seeking to make it [seem] deviant, while you are witnesses [to the truth]? And Allah is not unaware of what you do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 3\n        },\n        \"text\" : \"And how could you disbelieve while to you are being recited the verses of Allah and among you is His Messenger? And whoever holds firmly to Allah has [indeed] been guided to a straight path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 3\n        },\n        \"text\" : \"O you who have believed, fear Allah as He should be feared and do not die except as Muslims [in submission to Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 3\n        },\n        \"text\" : \"And hold firmly to the rope of Allah all together and do not become divided. And remember the favor of Allah upon you -  when you were enemies and He brought your hearts together and you became, by His favor, brothers. And you were on the edge of a pit of the Fire, and He saved you from it. Thus does Allah make clear to you His verses that you may be guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 3\n        },\n        \"text\" : \"And let there be [arising] from you a nation inviting to [all that is] good, enjoining what is right and forbidding what is wrong, and those will be the successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 3\n        },\n        \"text\" : \"But as for those whose faces will turn white, [they will be] within the mercy of Allah . They will abide therein eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 3\n        },\n        \"text\" : \"These are the verses of Allah . We recite them to you, [O Muhammad], in truth; and Allah wants no injustice to the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 3\n        },\n        \"text\" : \"To Allah belongs whatever is in the heavens and whatever is on the earth. And to Allah will [all] matters be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 3\n        },\n        \"text\" : \"You are the best nation produced [as an example] for mankind. You enjoin what is right and forbid what is wrong and believe in Allah . If only the People of the Scripture had believed, it would have been better for them. Among them are believers, but most of them are defiantly disobedient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 3\n        },\n        \"text\" : \"They have been put under humiliation [by Allah ] wherever they are overtaken, except for a covenant from Allah and a rope from the Muslims. And they have drawn upon themselves anger from Allah and have been put under destitution. That is because they disbelieved in the verses of Allah and killed the prophets without right. That is because they disobeyed and [habitually] transgressed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 113,\n          \"sura\" : 3\n        },\n        \"text\" : \"They are not [all] the same; among the People of the Scripture is a community standing [in obedience], reciting the verses of Allah during periods of the night and prostrating [in prayer].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 3\n        },\n        \"text\" : \"They believe in Allah and the Last Day, and they enjoin what is right and forbid what is wrong and hasten to good deeds. And those are among the righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 115,\n          \"sura\" : 3\n        },\n        \"text\" : \"And whatever good they do -  never will it be removed from them. And Allah is Knowing of the righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 3\n        },\n        \"text\" : \"Indeed, those who disbelieve -  never will their wealth or their children avail them against Allah at all, and those are the companions of the Fire; they will abide therein eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 117,\n          \"sura\" : 3\n        },\n        \"text\" : \"The example of what they spend in this worldly life is like that of a wind containing frost which strikes the harvest of a people who have wronged themselves and destroys it. And Allah has not wronged them, but they wrong themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 119,\n          \"sura\" : 3\n        },\n        \"text\" : \"Here you are loving them but they are not loving you, while you believe in the Scripture -  all of it. And when they meet you, they say, \\\"We believe.\\\" But when they are alone, they bite their fingertips at you in rage. Say, \\\"Die in your rage. Indeed, Allah is Knowing of that within the breasts.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 120,\n          \"sura\" : 3\n        },\n        \"text\" : \"If good touches you, it distresses them; but if harm strikes you, they rejoice at it. And if you are patient and fear Allah, their plot will not harm you at all. Indeed, Allah is encompassing of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 121,\n          \"sura\" : 3\n        },\n        \"text\" : \"And [remember] when you, [O Muhammad], left your family in the morning to post the believers at their stations for the battle [of Uhud] -  and Allah is Hearing and Knowing -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 122,\n          \"sura\" : 3\n        },\n        \"text\" : \"When two parties among you were about to lose courage, but Allah was their ally; and upon Allah the believers should rely.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 123,\n          \"sura\" : 3\n        },\n        \"text\" : \"And already had Allah given you victory at [the battle of] Badr while you were few in number. Then fear Allah ; perhaps you will be grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 125,\n          \"sura\" : 3\n        },\n        \"text\" : \"Yes, if you remain patient and conscious of Allah and the enemy come upon you [attacking] in rage, your Lord will reinforce you with five thousand angels having marks [of distinction]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 126,\n          \"sura\" : 3\n        },\n        \"text\" : \"And Allah made it not except as [a sign of] good tidings for you and to reassure your hearts thereby. And victory is not except from Allah, the Exalted in Might, the Wise -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 128,\n          \"sura\" : 3\n        },\n        \"text\" : \"Not for you, [O Muhammad, but for Allah ], is the decision whether He should [cut them down] or forgive them or punish them, for indeed, they are wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 129,\n          \"sura\" : 3\n        },\n        \"text\" : \"And to Allah belongs whatever is in the heavens and whatever is on the earth. He forgives whom He wills and punishes whom He wills. And Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 130,\n          \"sura\" : 3\n        },\n        \"text\" : \"O you who have believed, do not consume usury, doubled and multiplied, but fear Allah that you may be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 132,\n          \"sura\" : 3\n        },\n        \"text\" : \"And obey Allah and the Messenger that you may obtain mercy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 134,\n          \"sura\" : 3\n        },\n        \"text\" : \"Who spend [in the cause of Allah ] during ease and hardship and who restrain anger and who pardon the people -  and Allah loves the doers of good;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 135,\n          \"sura\" : 3\n        },\n        \"text\" : \"And those who, when they commit an immorality or wrong themselves [by transgression], remember Allah and seek forgiveness for their sins -  and who can forgive sins except Allah ? -  and [who] do not persist in what they have done while they know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 136,\n          \"sura\" : 3\n        },\n        \"text\" : \"Those -  their reward is forgiveness from their Lord and gardens beneath which rivers flow [in Paradise], wherein they will abide eternally; and excellent is the reward of the [righteous] workers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 138,\n          \"sura\" : 3\n        },\n        \"text\" : \"This [Qur'an] is a clear statement to [all] the people and a guidance and instruction for those conscious of Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 140,\n          \"sura\" : 3\n        },\n        \"text\" : \"If a wound should touch you -  there has already touched the [opposing] people a wound similar to it. And these days [of varying conditions] We alternate among the people so that Allah may make evident those who believe and [may] take to Himself from among you martyrs -  and Allah does not like the wrongdoers -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 141,\n          \"sura\" : 3\n        },\n        \"text\" : \"And that Allah may purify the believers [through trials] and destroy the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 142,\n          \"sura\" : 3\n        },\n        \"text\" : \"Or do you think that you will enter Paradise while Allah has not yet made evident those of you who fight in His cause and made evident those who are steadfast?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 144,\n          \"sura\" : 3\n        },\n        \"text\" : \"Muhammad is not but a messenger. [Other] messengers have passed on before him. So if he was to die or be killed, would you turn back on your heels [to unbelief]? And he who turns back on his heels will never harm Allah at all; but Allah will reward the grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 145,\n          \"sura\" : 3\n        },\n        \"text\" : \"And it is not [possible] for one to die except by permission of Allah at a decree determined. And whoever desires the reward of this world -  We will give him thereof; and whoever desires the reward of the Hereafter -  We will give him thereof. And we will reward the grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 146,\n          \"sura\" : 3\n        },\n        \"text\" : \"And how many a prophet [fought and] with him fought many religious scholars. But they never lost assurance due to what afflicted them in the cause of Allah, nor did they weaken or submit. And Allah loves the steadfast.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 148,\n          \"sura\" : 3\n        },\n        \"text\" : \"So Allah gave them the reward of this world and the good reward of the Hereafter. And Allah loves the doers of good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 150,\n          \"sura\" : 3\n        },\n        \"text\" : \"But Allah is your protector, and He is the best of helpers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 151,\n          \"sura\" : 3\n        },\n        \"text\" : \"We will cast terror into the hearts of those who disbelieve for what they have associated with Allah of which He had not sent down [any] authority. And their refuge will be the Fire, and wretched is the residence of the wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 152,\n          \"sura\" : 3\n        },\n        \"text\" : \"And Allah had certainly fulfilled His promise to you when you were killing the enemy by His permission until [the time] when you lost courage and fell to disputing about the order [given by the Prophet] and disobeyed after He had shown you that which you love. Among you are some who desire this world, and among you are some who desire the Hereafter. Then he turned you back from them [defeated] that He might test you. And He has already forgiven you, and Allah is the possessor of bounty for the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 153,\n          \"sura\" : 3\n        },\n        \"text\" : \"[Remember] when you [fled and] climbed [the mountain] without looking aside at anyone while the Messenger was calling you from behind. So Allah repaid you with distress upon distress so you would not grieve for that which had escaped you [of victory and spoils of war] or [for] that which had befallen you [of injury and death]. And Allah is [fully] Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 154,\n          \"sura\" : 3\n        },\n        \"text\" : \"Then after distress, He sent down upon you security [in the form of] drowsiness, overcoming a faction of you, while another faction worried about themselves, thinking of Allah other than the truth -  the thought of ignorance, saying, \\\"Is there anything for us [to have done] in this matter?\\\" Say, \\\"Indeed, the matter belongs completely to Allah .\\\" They conceal within themselves what they will not reveal to you. They say, \\\"If there was anything we could have done in the matter, some of us would not have been killed right here.\\\" Say, \\\"Even if you had been inside your houses, those decreed to be killed would have come out to their death beds.\\\" [It was] so that Allah might test what is in your breasts and purify what is in your hearts. And Allah is Knowing of that within the breasts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 155,\n          \"sura\" : 3\n        },\n        \"text\" : \"Indeed, those of you who turned back on the day the two armies met, it was Satan who caused them to slip because of some [blame] they had earned. But Allah has already forgiven them. Indeed, Allah is Forgiving and Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 156,\n          \"sura\" : 3\n        },\n        \"text\" : \"O you who have believed, do not be like those who disbelieved and said about their brothers when they traveled through the land or went out to fight, \\\"If they had been with us, they would not have died or have been killed,\\\" so Allah makes that [misconception] a regret within their hearts. And it is Allah who gives life and causes death, and Allah is Seeing of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 157,\n          \"sura\" : 3\n        },\n        \"text\" : \"And if you are killed in the cause of Allah or die -  then forgiveness from Allah and mercy are better than whatever they accumulate [in this world].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 158,\n          \"sura\" : 3\n        },\n        \"text\" : \"And whether you die or are killed, unto Allah you will be gathered.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 159,\n          \"sura\" : 3\n        },\n        \"text\" : \"So by mercy from Allah, [O Muhammad], you were lenient with them. And if you had been rude [in speech] and harsh in heart, they would have disbanded from about you. So pardon them and ask forgiveness for them and consult them in the matter. And when you have decided, then rely upon Allah . Indeed, Allah loves those who rely [upon Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 160,\n          \"sura\" : 3\n        },\n        \"text\" : \"If Allah should aid you, no one can overcome you; but if He should forsake you, who is there that can aid you after Him? And upon Allah let the believers rely.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 162,\n          \"sura\" : 3\n        },\n        \"text\" : \"So is one who pursues the pleasure of Allah like one who brings upon himself the anger of Allah and whose refuge is Hell? And wretched is the destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 163,\n          \"sura\" : 3\n        },\n        \"text\" : \"They are [varying] degrees in the sight of Allah, and Allah is Seeing of whatever they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 164,\n          \"sura\" : 3\n        },\n        \"text\" : \"Certainly did Allah confer [great] favor upon the believers when He sent among them a Messenger from themselves, reciting to them His verses and purifying them and teaching them the Book and wisdom, although they had been before in manifest error.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 165,\n          \"sura\" : 3\n        },\n        \"text\" : \"Why [is it that] when a [single] disaster struck you [on the day of Uhud], although you had struck [the enemy in the battle of Badr] with one twice as great, you said, \\\"From where is this?\\\" Say, \\\"It is from yourselves.\\\" Indeed, Allah is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 166,\n          \"sura\" : 3\n        },\n        \"text\" : \"And what struck you on the day the two armies met was by permission of Allah that He might make evident the [true] believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 167,\n          \"sura\" : 3\n        },\n        \"text\" : \"And that He might make evident those who are hypocrites. For it was said to them, \\\"Come, fight in the way of Allah or [at least] defend.\\\" They said, \\\"If we had known [there would be] fighting, we would have followed you.\\\" They were nearer to disbelief that day than to faith, saying with their mouths what was not in their hearts. And Allah is most Knowing of what they conceal -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 169,\n          \"sura\" : 3\n        },\n        \"text\" : \"And never think of those who have been killed in the cause of Allah as dead. Rather, they are alive with their Lord, receiving provision,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 170,\n          \"sura\" : 3\n        },\n        \"text\" : \"Rejoicing in what Allah has bestowed upon them of His bounty, and they receive good tidings about those [to be martyred] after them who have not yet joined them -  that there will be no fear concerning them, nor will they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 171,\n          \"sura\" : 3\n        },\n        \"text\" : \"They receive good tidings of favor from Allah and bounty and [of the fact] that Allah does not allow the reward of believers to be lost -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 172,\n          \"sura\" : 3\n        },\n        \"text\" : \"Those [believers] who responded to Allah and the Messenger after injury had struck them. For those who did good among them and feared Allah is a great reward -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 173,\n          \"sura\" : 3\n        },\n        \"text\" : \"Those to whom hypocrites said, \\\"Indeed, the people have gathered against you, so fear them.\\\" But it [merely] increased them in faith, and they said, \\\"Sufficient for us is Allah, and [He is] the best Disposer of affairs.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 174,\n          \"sura\" : 3\n        },\n        \"text\" : \"So they returned with favor from Allah and bounty, no harm having touched them. And they pursued the pleasure of Allah, and Allah is the possessor of great bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 176,\n          \"sura\" : 3\n        },\n        \"text\" : \"And do not be grieved, [O Muhammad], by those who hasten into disbelief. Indeed, they will never harm Allah at all. Allah intends that He should give them no share in the Hereafter, and for them is a great punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 177,\n          \"sura\" : 3\n        },\n        \"text\" : \"Indeed, those who purchase disbelief [in exchange] for faith -  never will they harm Allah at all, and for them is a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 179,\n          \"sura\" : 3\n        },\n        \"text\" : \"Allah would not leave the believers in that [state] you are in [presently] until He separates the evil from the good. Nor would Allah reveal to you the unseen. But [instead], Allah chooses of His messengers whom He wills, so believe in Allah and His messengers. And if you believe and fear Him, then for you is a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 180,\n          \"sura\" : 3\n        },\n        \"text\" : \"And let not those who [greedily] withhold what Allah has given them of His bounty ever think that it is better for them. Rather, it is worse for them. Their necks will be encircled by what they withheld on the Day of Resurrection. And to Allah belongs the heritage of the heavens and the earth. And Allah, with what you do, is [fully] Acquainted.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 181,\n          \"sura\" : 3\n        },\n        \"text\" : \"Allah has certainly heard the statement of those [Jews] who said, \\\"Indeed, Allah is poor, while we are rich.\\\" We will record what they said and their killing of the prophets without right and will say, \\\"Taste the punishment of the Burning Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 182,\n          \"sura\" : 3\n        },\n        \"text\" : \"That is for what your hands have put forth and because Allah is not ever unjust to [His] servants.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 183,\n          \"sura\" : 3\n        },\n        \"text\" : \"[They are] those who said, \\\"Indeed, Allah has taken our promise not to believe any messenger until he brings us an offering which fire [from heaven] will consume.\\\" Say, \\\"There have already come to you messengers before me with clear proofs and [even] that of which you speak. So why did you kill them, if you should be truthful?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 186,\n          \"sura\" : 3\n        },\n        \"text\" : \"You will surely be tested in your possessions and in yourselves. And you will surely hear from those who were given the Scripture before you and from those who associate others with Allah much abuse. But if you are patient and fear Allah -  indeed, that is of the matters [worthy] of determination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 187,\n          \"sura\" : 3\n        },\n        \"text\" : \"And [mention, O Muhammad], when Allah took a covenant from those who were given the Scripture, [saying], \\\"You must make it clear to the people and not conceal it.\\\" But they threw it away behind their backs and exchanged it for a small price. And wretched is that which they purchased.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 189,\n          \"sura\" : 3\n        },\n        \"text\" : \"And to Allah belongs the dominion of the heavens and the earth, and Allah is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 191,\n          \"sura\" : 3\n        },\n        \"text\" : \"Who remember Allah while standing or sitting or [lying] on their sides and give thought to the creation of the heavens and the earth, [saying], \\\"Our Lord, You did not create this aimlessly; exalted are You [above such a thing]; then protect us from the punishment of the Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 193,\n          \"sura\" : 3\n        },\n        \"text\" : \"Our Lord, indeed we have heard a caller calling to faith, [saying], 'Believe in your Lord,' and we have believed. Our Lord, so forgive us our sins and remove from us our misdeeds and cause us to die with the righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 195,\n          \"sura\" : 3\n        },\n        \"text\" : \"And their Lord responded to them, \\\"Never will I allow to be lost the work of [any] worker among you, whether male or female; you are of one another. So those who emigrated or were evicted from their homes or were harmed in My cause or fought or were killed -  I will surely remove from them their misdeeds, and I will surely admit them to gardens beneath which rivers flow as reward from Allah, and Allah has with Him the best reward.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 197,\n          \"sura\" : 3\n        },\n        \"text\" : \"[It is but] a small enjoyment; then their [final] refuge is Hell, and wretched is the resting place.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 198,\n          \"sura\" : 3\n        },\n        \"text\" : \"But those who feared their Lord will have gardens beneath which rivers flow, abiding eternally therein, as accommodation from Allah . And that which is with Allah is best for the righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 199,\n          \"sura\" : 3\n        },\n        \"text\" : \"And indeed, among the People of the Scripture are those who believe in Allah and what was revealed to you and what was revealed to them, [being] humbly submissive to Allah . They do not exchange the verses of Allah for a small price. Those will have their reward with their Lord. Indeed, Allah is swift in account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 200,\n          \"sura\" : 3\n        },\n        \"text\" : \"O you who have believed, persevere and endure and remain stationed and fear Allah that you may be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 4\n        },\n        \"text\" : \"O mankind, fear your Lord, who created you from one soul and created from it its mate and dispersed from both of them many men and women. And fear Allah, through whom you ask one another, and the wombs. Indeed Allah is ever, over you, an Observer.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 4\n        },\n        \"text\" : \"And do not give the weak-minded your property, which Allah has made a means of sustenance for you, but provide for them with it and clothe them and speak to them words of appropriate kindness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 4\n        },\n        \"text\" : \"And test the orphans [in their abilities] until they reach marriageable age. Then if you perceive in them sound judgement, release their property to them. And do not consume it excessively and quickly, [anticipating] that they will grow up. And whoever, [when acting as guardian], is self-sufficient should refrain [from taking a fee]; and whoever is poor -  let him take according to what is acceptable. Then when you release their property to them, bring witnesses upon them. And sufficient is Allah as Accountant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 4\n        },\n        \"text\" : \"And let those [executors and guardians] fear [injustice] as if they [themselves] had left weak offspring behind and feared for them. So let them fear Allah and speak words of appropriate justice.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 4\n        },\n        \"text\" : \"Allah instructs you concerning your children: for the male, what is equal to the share of two females. But if there are [only] daughters, two or more, for them is two thirds of one's estate. And if there is only one, for her is half. And for one's parents, to each one of them is a sixth of his estate if he left children. But if he had no children and the parents [alone] inherit from him, then for his mother is one third. And if he had brothers [or sisters], for his mother is a sixth, after any bequest he [may have] made or debt. Your parents or your children -  you know not which of them are nearest to you in benefit. [These shares are] an obligation [imposed] by Allah . Indeed, Allah is ever Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 4\n        },\n        \"text\" : \"And for you is half of what your wives leave if they have no child. But if they have a child, for you is one fourth of what they leave, after any bequest they [may have] made or debt. And for the wives is one fourth if you leave no child. But if you leave a child, then for them is an eighth of what you leave, after any bequest you [may have] made or debt. And if a man or woman leaves neither ascendants nor descendants but has a brother or a sister, then for each one of them is a sixth. But if they are more than two, they share a third, after any bequest which was made or debt, as long as there is no detriment [caused]. [This is] an ordinance from Allah, and Allah is Knowing and Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 4\n        },\n        \"text\" : \"These are the limits [set by] Allah, and whoever obeys Allah and His Messenger will be admitted by Him to gardens [in Paradise] under which rivers flow, abiding eternally therein; and that is the great attainment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whoever disobeys Allah and His Messenger and transgresses His limits -  He will put him into the Fire to abide eternally therein, and he will have a humiliating punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 4\n        },\n        \"text\" : \"Those who commit unlawful sexual intercourse of your women -  bring against them four [witnesses] from among you. And if they testify, confine the guilty women to houses until death takes them or Allah ordains for them [another] way.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 4\n        },\n        \"text\" : \"And the two who commit it among you, dishonor them both. But if they repent and correct themselves, leave them alone. Indeed, Allah is ever Accepting of repentance and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 4\n        },\n        \"text\" : \"The repentance accepted by Allah is only for those who do wrong in ignorance [or carelessness] and then repent soon after. It is those to whom Allah will turn in forgiveness, and Allah is ever Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who have believed, it is not lawful for you to inherit women by compulsion. And do not make difficulties for them in order to take [back] part of what you gave them unless they commit a clear immorality. And live with them in kindness. For if you dislike them - perhaps you dislike a thing and Allah makes therein much good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 4\n        },\n        \"text\" : \"And do not marry those [women] whom your fathers married, except what has already occurred. Indeed, it was an immorality and hateful [to Allah ] and was evil as a way.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 4\n        },\n        \"text\" : \"Prohibited to you [for marriage] are your mothers, your daughters, your sisters, your father's sisters, your mother's sisters, your brother's daughters, your sister's daughters, your [milk] mothers who nursed you, your sisters through nursing, your wives' mothers, and your step-daughters under your guardianship [born] of your wives unto whom you have gone in. But if you have not gone in unto them, there is no sin upon you. And [also prohibited are] the wives of your sons who are from your [own] loins, and that you take [in marriage] two sisters simultaneously, except for what has already occurred. Indeed, Allah is ever Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 4\n        },\n        \"text\" : \"And [also prohibited to you are all] married women except those your right hands possess. [This is] the decree of Allah upon you. And lawful to you are [all others] beyond these, [provided] that you seek them [in marriage] with [gifts from] your property, desiring chastity, not unlawful sexual intercourse. So for whatever you enjoy [of marriage] from them, give them their due compensation as an obligation. And there is no blame upon you for what you mutually agree to beyond the obligation. Indeed, Allah is ever Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whoever among you cannot [find] the means to marry free, believing women, then [he may marry] from those whom your right hands possess of believing slave girls. And Allah is most knowing about your faith. You [believers] are of one another. So marry them with the permission of their people and give them their due compensation according to what is acceptable. [They should be] chaste, neither [of] those who commit unlawful intercourse randomly nor those who take [secret] lovers. But once they are sheltered in marriage, if they should commit adultery, then for them is half the punishment for free [unmarried] women. This [allowance] is for him among you who fears sin, but to be patient is better for you. And Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 4\n        },\n        \"text\" : \"Allah wants to make clear to you [the lawful from the unlawful] and guide you to the [good] practices of those before you and to accept your repentance. And Allah is Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 4\n        },\n        \"text\" : \"Allah wants to accept your repentance, but those who follow [their] passions want you to digress [into] a great deviation.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 4\n        },\n        \"text\" : \"And Allah wants to lighten for you [your difficulties]; and mankind was created weak.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who have believed, do not consume one another's wealth unjustly but only [in lawful] business by mutual consent. And do not kill yourselves [or one another]. Indeed, Allah is to you ever Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whoever does that in aggression and injustice -  then We will drive him into a Fire. And that, for Allah, is [always] easy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 4\n        },\n        \"text\" : \"And do not wish for that by which Allah has made some of you exceed others. For men is a share of what they have earned, and for women is a share of what they have earned. And ask Allah of his bounty. Indeed Allah is ever, of all things, Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 4\n        },\n        \"text\" : \"And for all, We have made heirs to what is left by parents and relatives. And to those whom your oaths have bound [to you] -  give them their share. Indeed Allah is ever, over all things, a Witness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 4\n        },\n        \"text\" : \"Men are in charge of women by [right of] what Allah has given one over the other and what they spend [for maintenance] from their wealth. So righteous women are devoutly obedient, guarding in [the husband's] absence what Allah would have them guard. But those [wives] from whom you fear arrogance -  [first] advise them; [then if they persist], forsake them in bed; and [finally], strike them. But if they obey you [once more], seek no means against them. Indeed, Allah is ever Exalted and Grand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 4\n        },\n        \"text\" : \"And if you fear dissension between the two, send an arbitrator from his people and an arbitrator from her people. If they both desire reconciliation, Allah will cause it between them. Indeed, Allah is ever Knowing and Acquainted [with all things].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 4\n        },\n        \"text\" : \"Worship Allah and associate nothing with Him, and to parents do good, and to relatives, orphans, the needy, the near neighbor, the neighbor farther away, the companion at your side, the traveler, and those whom your right hands possess. Indeed, Allah does not like those who are self-deluding and boastful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 4\n        },\n        \"text\" : \"Who are stingy and enjoin upon [other] people stinginess and conceal what Allah has given them of His bounty -  and We have prepared for the disbelievers a humiliating punishment -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 4\n        },\n        \"text\" : \"And [also] those who spend of their wealth to be seen by the people and believe not in Allah nor in the Last Day. And he to whom Satan is a companion -  then evil is he as a companion.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 4\n        },\n        \"text\" : \"And what [harm would come] upon them if they believed in Allah and the Last Day and spent out of what Allah provided for them? And Allah is ever, about them, Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 4\n        },\n        \"text\" : \"Indeed, Allah does not do injustice, [even] as much as an atom's weight; while if there is a good deed, He multiplies it and gives from Himself a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 4\n        },\n        \"text\" : \"That Day, those who disbelieved and disobeyed the Messenger will wish they could be covered by the earth. And they will not conceal from Allah a [single] statement.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who have believed, do not approach prayer while you are intoxicated until you know what you are saying or in a state of janabah, except those passing through [a place of prayer], until you have washed [your whole body]. And if you are ill or on a journey or one of you comes from the place of relieving himself or you have contacted women and find no water, then seek clean earth and wipe over your faces and your hands [with it]. Indeed, Allah is ever Pardoning and Forgiving.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 4\n        },\n        \"text\" : \"And Allah is most knowing of your enemies; and sufficient is Allah as an ally, and sufficient is Allah as a helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 4\n        },\n        \"text\" : \"Among the Jews are those who distort words from their [proper] usages and say, \\\"We hear and disobey\\\" and \\\"Hear but be not heard\\\" and \\\"Ra'ina,\\\" twisting their tongues and defaming the religion. And if they had said [instead], \\\"We hear and obey\\\" and \\\"Wait for us [to understand],\\\" it would have been better for them and more suitable. But Allah has cursed them for their disbelief, so they believe not, except for a few.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who were given the Scripture, believe in what We have sent down [to Muhammad], confirming that which is with you, before We obliterate faces and turn them toward their backs or curse them as We cursed the sabbath-breakers. And ever is the decree of Allah accomplished.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 4\n        },\n        \"text\" : \"Indeed, Allah does not forgive association with Him, but He forgives what is less than that for whom He wills. And he who associates others with Allah has certainly fabricated a tremendous sin.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 4\n        },\n        \"text\" : \"Have you not seen those who claim themselves to be pure? Rather, Allah purifies whom He wills, and injustice is not done to them, [even] as much as a thread [inside a date seed].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 4\n        },\n        \"text\" : \"Look how they invent about Allah untruth, and sufficient is that as a manifest sin.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 4\n        },\n        \"text\" : \"Those are the ones whom Allah has cursed; and he whom Allah curses -  never will you find for him a helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 4\n        },\n        \"text\" : \"Or do they envy people for what Allah has given them of His bounty? But we had already given the family of Abraham the Scripture and wisdom and conferred upon them a great kingdom.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 4\n        },\n        \"text\" : \"Indeed, those who disbelieve in Our verses -  We will drive them into a Fire. Every time their skins are roasted through We will replace them with other skins so they may taste the punishment. Indeed, Allah is ever Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 4\n        },\n        \"text\" : \"Indeed, Allah commands you to render trusts to whom they are due and when you judge between people to judge with justice. Excellent is that which Allah instructs you. Indeed, Allah is ever Hearing and Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who have believed, obey Allah and obey the Messenger and those in authority among you. And if you disagree over anything, refer it to Allah and the Messenger, if you should believe in Allah and the Last Day. That is the best [way] and best in result.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 4\n        },\n        \"text\" : \"And when it is said to them, \\\"Come to what Allah has revealed and to the Messenger,\\\" you see the hypocrites turning away from you in aversion.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 4\n        },\n        \"text\" : \"So how [will it be] when disaster strikes them because of what their hands have put forth and then they come to you swearing by Allah, \\\"We intended nothing but good conduct and accommodation.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 4\n        },\n        \"text\" : \"Those are the ones of whom Allah knows what is in their hearts, so turn away from them but admonish them and speak to them a far-reaching word.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 4\n        },\n        \"text\" : \"And We did not send any messenger except to be obeyed by permission of Allah . And if, when they wronged themselves, they had come to you, [O Muhammad], and asked forgiveness of Allah and the Messenger had asked forgiveness for them, they would have found Allah Accepting of repentance and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whoever obeys Allah and the Messenger -  those will be with the ones upon whom Allah has bestowed favor of the prophets, the steadfast affirmers of truth, the martyrs and the righteous. And excellent are those as companions.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 4\n        },\n        \"text\" : \"That is the bounty from Allah, and sufficient is Allah as Knower.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who have believed, take your precaution and [either] go forth in companies or go forth all together.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 4\n        },\n        \"text\" : \"And indeed, there is among you he who lingers behind; and if disaster strikes you, he says, \\\" Allah has favored me in that I was not present with them.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 4\n        },\n        \"text\" : \"But if bounty comes to you from Allah, he will surely say, as if there had never been between you and him any affection. \\\"Oh, I wish I had been with them so I could have attained a great attainment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 4\n        },\n        \"text\" : \"So let those fight in the cause of Allah who sell the life of this world for the Hereafter. And he who fights in the cause of Allah and is killed or achieves victory -  We will bestow upon him a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 4\n        },\n        \"text\" : \"And what is [the matter] with you that you fight not in the cause of Allah and [for] the oppressed among men, women, and children who say, \\\"Our Lord, take us out of this city of oppressive people and appoint for us from Yourself a protector and appoint for us from Yourself a helper?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 4\n        },\n        \"text\" : \"Those who believe fight in the cause of Allah, and those who disbelieve fight in the cause of Taghut. So fight against the allies of Satan. Indeed, the plot of Satan has ever been weak.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 4\n        },\n        \"text\" : \"Have you not seen those who were told, \\\"Restrain your hands [from fighting] and establish prayer and give zakah\\\"? But then when fighting was ordained for them, at once a party of them feared men as they fear Allah or with [even] greater fear. They said, \\\"Our Lord, why have You decreed upon us fighting? If only You had postponed [it for] us for a short time.\\\" Say, The enjoyment of this world is little, and the Hereafter is better for he who fears Allah . And injustice will not be done to you, [even] as much as a thread [inside a date seed].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 4\n        },\n        \"text\" : \"Wherever you may be, death will overtake you, even if you should be within towers of lofty construction. But if good comes to them, they say, \\\"This is from Allah \\\"; and if evil befalls them, they say, \\\"This is from you.\\\" Say, \\\"All [things] are from Allah .\\\" So what is [the matter] with those people that they can hardly understand any statement?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 4\n        },\n        \"text\" : \"What comes to you of good is from Allah, but what comes to you of evil, [O man], is from yourself. And We have sent you, [O Muhammad], to the people as a messenger, and sufficient is Allah as Witness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 4\n        },\n        \"text\" : \"He who obeys the Messenger has obeyed Allah ; but those who turn away -  We have not sent you over them as a guardian.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 4\n        },\n        \"text\" : \"And they say, \\\"[We pledge] obedience.\\\" But when they leave you, a group of them spend the night determining to do other than what you say. But Allah records what they plan by night. So leave them alone and rely upon Allah . And sufficient is Allah as Disposer of affairs.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 4\n        },\n        \"text\" : \"Then do they not reflect upon the Qur'an? If it had been from [any] other than Allah, they would have found within it much contradiction.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 4\n        },\n        \"text\" : \"And when there comes to them information about [public] security or fear, they spread it around. But if they had referred it back to the Messenger or to those of authority among them, then the ones who [can] draw correct conclusions from it would have known about it. And if not for the favor of Allah upon you and His mercy, you would have followed Satan, except for a few.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 4\n        },\n        \"text\" : \"So fight, [O Muhammad], in the cause of Allah ; you are not held responsible except for yourself. And encourage the believers [to join you] that perhaps Allah will restrain the [military] might of those who disbelieve. And Allah is greater in might and stronger in [exemplary] punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 4\n        },\n        \"text\" : \"Whoever intercedes for a good cause will have a reward therefrom; and whoever intercedes for an evil cause will have a burden therefrom. And ever is Allah, over all things, a Keeper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 4\n        },\n        \"text\" : \"And when you are greeted with a greeting, greet [in return] with one better than it or [at least] return it [in a like manner]. Indeed, Allah is ever, over all things, an Accountant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 4\n        },\n        \"text\" : \"Allah -  there is no deity except Him. He will surely assemble you for [account on] the Day of Resurrection, about which there is no doubt. And who is more truthful than Allah in statement.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 4\n        },\n        \"text\" : \"What is [the matter] with you [that you are] two groups concerning the hypocrites, while Allah has made them fall back [into error and disbelief] for what they earned. Do you wish to guide those whom Allah has sent astray? And he whom Allah sends astray -  never will you find for him a way [of guidance].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 4\n        },\n        \"text\" : \"They wish you would disbelieve as they disbelieved so you would be alike. So do not take from among them allies until they emigrate for the cause of Allah . But if they turn away, then seize them and kill them wherever you find them and take not from among them any ally or helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 4\n        },\n        \"text\" : \"Except for those who take refuge with a people between yourselves and whom is a treaty or those who come to you, their hearts strained at [the prospect of] fighting you or fighting their own people. And if Allah had willed, He could have given them power over you, and they would have fought you. So if they remove themselves from you and do not fight you and offer you peace, then Allah has not made for you a cause [for fighting] against them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 4\n        },\n        \"text\" : \"You will find others who wish to obtain security from you and [to] obtain security from their people. Every time they are returned to [the influence of] disbelief, they fall back into it. So if they do not withdraw from you or offer you peace or restrain their hands, then seize them and kill them wherever you overtake them. And those - We have made for you against them a clear authorization.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 4\n        },\n        \"text\" : \"And never is it for a believer to kill a believer except by mistake. And whoever kills a believer by mistake -  then the freeing of a believing slave and a compensation payment presented to the deceased's family [is required] unless they give [up their right as] charity. But if the deceased was from a people at war with you and he was a believer - then [only] the freeing of a believing slave; and if he was from a people with whom you have a treaty -  then a compensation payment presented to his family and the freeing of a believing slave. And whoever does not find [one or cannot afford to buy one] -  then [instead], a fast for two months consecutively, [seeking] acceptance of repentance from Allah . And Allah is ever Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 4\n        },\n        \"text\" : \"But whoever kills a believer intentionally -  his recompense is Hell, wherein he will abide eternally, and Allah has become angry with him and has cursed him and has prepared for him a great punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who have believed, when you go forth [to fight] in the cause of Allah, investigate; and do not say to one who gives you [a greeting of] peace \\\"You are not a believer,\\\" aspiring for the goods of worldly life; for with Allah are many acquisitions. You [yourselves] were like that before; then Allah conferred His favor upon you, so investigate. Indeed Allah is ever, with what you do, Acquainted.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 4\n        },\n        \"text\" : \"Not equal are those believers remaining [at home] -  other than the disabled -  and the mujahideen, [who strive and fight] in the cause of Allah with their wealth and their lives. Allah has preferred the mujahideen through their wealth and their lives over those who remain [behind], by degrees. And to both Allah has promised the best [reward]. But Allah has preferred the mujahideen over those who remain [behind] with a great reward -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 4\n        },\n        \"text\" : \"Degrees [of high position] from Him and forgiveness and mercy. And Allah is ever Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 4\n        },\n        \"text\" : \"Indeed, those whom the angels take [in death] while wronging themselves -  [the angels] will say, \\\"In what [condition] were you?\\\" They will say, \\\"We were oppressed in the land.\\\" The angels will say, \\\"Was not the earth of Allah spacious [enough] for you to emigrate therein?\\\" For those, their refuge is Hell -  and evil it is as a destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 4\n        },\n        \"text\" : \"For those it is expected that Allah will pardon them, and Allah is ever Pardoning and Forgiving.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 100,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whoever emigrates for the cause of Allah will find on the earth many [alternative] locations and abundance. And whoever leaves his home as an emigrant to Allah and His Messenger and then death overtakes him -  his reward has already become incumbent upon Allah . And Allah is ever Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 4\n        },\n        \"text\" : \"And when you travel throughout the land, there is no blame upon you for shortening the prayer, [especially] if you fear that those who disbelieve may disrupt [or attack] you. Indeed, the disbelievers are ever to you a clear enemy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 4\n        },\n        \"text\" : \"And when you are among them and lead them in prayer, let a group of them stand [in prayer] with you and let them carry their arms. And when they have prostrated, let them be [in position] behind you and have the other group come forward which has not [yet] prayed and let them pray with you, taking precaution and carrying their arms. Those who disbelieve wish that you would neglect your weapons and your baggage so they could come down upon you in one [single] attack. But there is no blame upon you, if you are troubled by rain or are ill, for putting down your arms, but take precaution. Indeed, Allah has prepared for the disbelievers a humiliating punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 4\n        },\n        \"text\" : \"And when you have completed the prayer, remember Allah standing, sitting, or [lying] on your sides. But when you become secure, re-establish [regular] prayer. Indeed, prayer has been decreed upon the believers a decree of specified times.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 4\n        },\n        \"text\" : \"And do not weaken in pursuit of the enemy. If you should be suffering -  so are they suffering as you are suffering, but you expect from Allah that which they expect not. And Allah is ever Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 4\n        },\n        \"text\" : \"Indeed, We have revealed to you, [O Muhammad], the Book in truth so you may judge between the people by that which Allah has shown you. And do not be for the deceitful an advocate.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 4\n        },\n        \"text\" : \"And seek forgiveness of Allah . Indeed, Allah is ever Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 4\n        },\n        \"text\" : \"And do not argue on behalf of those who deceive themselves. Indeed, Allah loves not one who is a habitually sinful deceiver.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 4\n        },\n        \"text\" : \"They conceal [their evil intentions and deeds] from the people, but they cannot conceal [them] from Allah, and He is with them [in His knowledge] when they spend the night in such as He does not accept of speech. And ever is Allah, of what they do, encompassing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 4\n        },\n        \"text\" : \"Here you are -  those who argue on their behalf in [this] worldly life -  but who will argue with Allah for them on the Day of Resurrection, or who will [then] be their representative?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whoever does a wrong or wrongs himself but then seeks forgiveness of Allah will find Allah Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 4\n        },\n        \"text\" : \"And whoever commits a sin only earns it against himself. And Allah is ever Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 113,\n          \"sura\" : 4\n        },\n        \"text\" : \"And if it was not for the favor of Allah upon you, [O Muhammad], and His mercy, a group of them would have determined to mislead you. But they do not mislead except themselves, and they will not harm you at all. And Allah has revealed to you the Book and wisdom and has taught you that which you did not know. And ever has the favor of Allah upon you been great.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 4\n        },\n        \"text\" : \"No good is there in much of their private conversation, except for those who enjoin charity or that which is right or conciliation between people. And whoever does that seeking means to the approval of Allah -  then We are going to give him a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 4\n        },\n        \"text\" : \"Indeed, Allah does not forgive association with Him, but He forgives what is less than that for whom He wills. And he who associates others with Allah has certainly gone far astray.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 117,\n          \"sura\" : 4\n        },\n        \"text\" : \"They call upon instead of Him none but female [deities], and they [actually] call upon none but a rebellious Satan.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 118,\n          \"sura\" : 4\n        },\n        \"text\" : \"Whom Allah has cursed. For he had said, \\\"I will surely take from among Your servants a specific portion.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 119,\n          \"sura\" : 4\n        },\n        \"text\" : \"And I will mislead them, and I will arouse in them [sinful] desires, and I will command them so they will slit the ears of cattle, and I will command them so they will change the creation of Allah .\\\" And whoever takes Satan as an ally instead of Allah has certainly sustained a clear loss.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 122,\n          \"sura\" : 4\n        },\n        \"text\" : \"But the ones who believe and do righteous deeds -  We will admit them to gardens beneath which rivers flow, wherein they will abide forever. [It is] the promise of Allah, [which is] truth, and who is more truthful than Allah in statement.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 123,\n          \"sura\" : 4\n        },\n        \"text\" : \"Paradise is not [obtained] by your wishful thinking nor by that of the People of the Scripture. Whoever does a wrong will be recompensed for it, and he will not find besides Allah a protector or a helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 125,\n          \"sura\" : 4\n        },\n        \"text\" : \"And who is better in religion than one who submits himself to Allah while being a doer of good and follows the religion of Abraham, inclining toward truth? And Allah took Abraham as an intimate friend.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 126,\n          \"sura\" : 4\n        },\n        \"text\" : \"And to Allah belongs whatever is in the heavens and whatever is on the earth. And ever is Allah, of all things, encompassing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 127,\n          \"sura\" : 4\n        },\n        \"text\" : \"And they request from you, [O Muhammad], a [legal] ruling concerning women. Say, \\\" Allah gives you a ruling about them and [about] what has been recited to you in the Book concerning the orphan girls to whom you do not give what is decreed for them - and [yet] you desire to marry them -  and concerning the oppressed among children and that you maintain for orphans [their rights] in justice.\\\" And whatever you do of good -  indeed, Allah is ever Knowing of it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 128,\n          \"sura\" : 4\n        },\n        \"text\" : \"And if a woman fears from her husband contempt or evasion, there is no sin upon them if they make terms of settlement between them -  and settlement is best. And present in [human] souls is stinginess. But if you do good and fear Allah -  then indeed Allah is ever, with what you do, Acquainted.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 129,\n          \"sura\" : 4\n        },\n        \"text\" : \"And you will never be able to be equal [in feeling] between wives, even if you should strive [to do so]. So do not incline completely [toward one] and leave another hanging. And if you amend [your affairs] and fear Allah -  then indeed, Allah is ever Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 130,\n          \"sura\" : 4\n        },\n        \"text\" : \"But if they separate [by divorce], Allah will enrich each [of them] from His abundance. And ever is Allah Encompassing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 131,\n          \"sura\" : 4\n        },\n        \"text\" : \"And to Allah belongs whatever is in the heavens and whatever is on the earth. And We have instructed those who were given the Scripture before you and yourselves to fear Allah . But if you disbelieve -  then to Allah belongs whatever is in the heavens and whatever is on the earth. And ever is Allah Free of need and Praiseworthy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 132,\n          \"sura\" : 4\n        },\n        \"text\" : \"And to Allah belongs whatever is in the heavens and whatever is on the earth. And sufficient is Allah as Disposer of affairs.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 133,\n          \"sura\" : 4\n        },\n        \"text\" : \"If He wills, He can do away with you, O people, and bring others [in your place]. And ever is Allah competent to do that.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 134,\n          \"sura\" : 4\n        },\n        \"text\" : \"Whoever desires the reward of this world -  then with Allah is the reward of this world and the Hereafter. And ever is Allah Hearing and Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 135,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who have believed, be persistently standing firm in justice, witnesses for Allah, even if it be against yourselves or parents and relatives. Whether one is rich or poor, Allah is more worthy of both. So follow not [personal] inclination, lest you not be just. And if you distort [your testimony] or refuse [to give it], then indeed Allah is ever, with what you do, Acquainted.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 136,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who have believed, believe in Allah and His Messenger and the Book that He sent down upon His Messenger and the Scripture which He sent down before. And whoever disbelieves in Allah, His angels, His books, His messengers, and the Last Day has certainly gone far astray.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 137,\n          \"sura\" : 4\n        },\n        \"text\" : \"Indeed, those who have believed then disbelieved, then believed, then disbelieved, and then increased in disbelief -  never will Allah forgive them, nor will He guide them to a way.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 139,\n          \"sura\" : 4\n        },\n        \"text\" : \"Those who take disbelievers as allies instead of the believers. Do they seek with them honor [through power]? But indeed, honor belongs to Allah entirely.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 140,\n          \"sura\" : 4\n        },\n        \"text\" : \"And it has already come down to you in the Book that when you hear the verses of Allah [recited], they are denied [by them] and ridiculed; so do not sit with them until they enter into another conversation. Indeed, you would then be like them. Indeed Allah will gather the hypocrites and disbelievers in Hell all together -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 141,\n          \"sura\" : 4\n        },\n        \"text\" : \"Those who wait [and watch] you. Then if you gain a victory from Allah, they say, \\\"Were we not with you?\\\" But if the disbelievers have a success, they say [to them], \\\"Did we not gain the advantage over you, but we protected you from the believers?\\\" Allah will judge between [all of] you on the Day of Resurrection, and never will Allah give the disbelievers over the believers a way [to overcome them].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 142,\n          \"sura\" : 4\n        },\n        \"text\" : \"Indeed, the hypocrites [think to] deceive Allah, but He is deceiving them. And when they stand for prayer, they stand lazily, showing [themselves to] the people and not remembering Allah except a little,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 143,\n          \"sura\" : 4\n        },\n        \"text\" : \"Wavering between them, [belonging] neither to the believers nor to the disbelievers. And whoever Allah leaves astray -  never will you find for him a way.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 144,\n          \"sura\" : 4\n        },\n        \"text\" : \"O you who have believed, do not take the disbelievers as allies instead of the believers. Do you wish to give Allah against yourselves a clear case?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 146,\n          \"sura\" : 4\n        },\n        \"text\" : \"Except for those who repent, correct themselves, hold fast to Allah, and are sincere in their religion for Allah, for those will be with the believers. And Allah is going to give the believers a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 147,\n          \"sura\" : 4\n        },\n        \"text\" : \"What would Allah do with your punishment if you are grateful and believe? And ever is Allah Appreciative and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 148,\n          \"sura\" : 4\n        },\n        \"text\" : \"Allah does not like the public mention of evil except by one who has been wronged. And ever is Allah Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 149,\n          \"sura\" : 4\n        },\n        \"text\" : \"If [instead] you show [some] good or conceal it or pardon an offense -  indeed, Allah is ever Pardoning and Competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 150,\n          \"sura\" : 4\n        },\n        \"text\" : \"Indeed, those who disbelieve in Allah and His messengers and wish to discriminate between Allah and His messengers and say, \\\"We believe in some and disbelieve in others,\\\" and wish to adopt a way in between -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 152,\n          \"sura\" : 4\n        },\n        \"text\" : \"But they who believe in Allah and His messengers and do not discriminate between any of them -  to those He is going to give their rewards. And ever is Allah Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 153,\n          \"sura\" : 4\n        },\n        \"text\" : \"The People of the Scripture ask you to bring down to them a book from the heaven. But they had asked of Moses [even] greater than that and said, \\\"Show us Allah outright,\\\" so the thunderbolt struck them for their wrongdoing. Then they took the calf [for worship] after clear evidences had come to them, and We pardoned that. And We gave Moses a clear authority.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 155,\n          \"sura\" : 4\n        },\n        \"text\" : \"And [We cursed them] for their breaking of the covenant and their disbelief in the signs of Allah and their killing of the prophets without right and their saying, \\\"Our hearts are wrapped\\\". Rather, Allah has sealed them because of their disbelief, so they believe not, except for a few.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 157,\n          \"sura\" : 4\n        },\n        \"text\" : \"And [for] their saying, \\\"Indeed, we have killed the Messiah, Jesus, the son of Mary, the messenger of Allah .\\\" And they did not kill him, nor did they crucify him; but [another] was made to resemble him to them. And indeed, those who differ over it are in doubt about it. They have no knowledge of it except the following of assumption. And they did not kill him, for certain.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 158,\n          \"sura\" : 4\n        },\n        \"text\" : \"Rather, Allah raised him to Himself. And ever is Allah Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 160,\n          \"sura\" : 4\n        },\n        \"text\" : \"For wrongdoing on the part of the Jews, We made unlawful for them [certain] good foods which had been lawful to them, and for their averting from the way of Allah many [people],\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 162,\n          \"sura\" : 4\n        },\n        \"text\" : \"But those firm in knowledge among them and the believers believe in what has been revealed to you, [O Muhammad], and what was revealed before you. And the establishers of prayer [especially] and the givers of zakah and the believers in Allah and the Last Day -  those We will give a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 164,\n          \"sura\" : 4\n        },\n        \"text\" : \"And [We sent] messengers about whom We have related [their stories] to you before and messengers about whom We have not related to you. And Allah spoke to Moses with [direct] speech.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 165,\n          \"sura\" : 4\n        },\n        \"text\" : \"[We sent] messengers as bringers of good tidings and warners so that mankind will have no argument against Allah after the messengers. And ever is Allah Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 166,\n          \"sura\" : 4\n        },\n        \"text\" : \"But Allah bears witness to that which He has revealed to you. He has sent it down with His knowledge, and the angels bear witness [as well]. And sufficient is Allah as Witness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 167,\n          \"sura\" : 4\n        },\n        \"text\" : \"Indeed, those who disbelieve and avert [people] from the way of Allah have certainly gone far astray.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 168,\n          \"sura\" : 4\n        },\n        \"text\" : \"Indeed, those who disbelieve and commit wrong [or injustice] -  never will Allah forgive them, nor will He guide them to a path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 169,\n          \"sura\" : 4\n        },\n        \"text\" : \"Except the path of Hell; they will abide therein forever. And that, for Allah, is [always] easy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 170,\n          \"sura\" : 4\n        },\n        \"text\" : \"O Mankind, the Messenger has come to you with the truth from your Lord, so believe; it is better for you. But if you disbelieve -  then indeed, to Allah belongs whatever is in the heavens and earth. And ever is Allah Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 171,\n          \"sura\" : 4\n        },\n        \"text\" : \"O People of the Scripture, do not commit excess in your religion or say about Allah except the truth. The Messiah, Jesus, the son of Mary, was but a messenger of Allah and His word which He directed to Mary and a soul [created at a command] from Him. So believe in Allah and His messengers. And do not say, \\\"Three\\\"; desist -  it is better for you. Indeed, Allah is but one God. Exalted is He above having a son. To Him belongs whatever is in the heavens and whatever is on the earth. And sufficient is Allah as Disposer of affairs.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 172,\n          \"sura\" : 4\n        },\n        \"text\" : \"Never would the Messiah disdain to be a servant of Allah, nor would the angels near [to Him]. And whoever disdains His worship and is arrogant -  He will gather them to Himself all together.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 173,\n          \"sura\" : 4\n        },\n        \"text\" : \"And as for those who believed and did righteous deeds, He will give them in full their rewards and grant them extra from His bounty. But as for those who disdained and were arrogant, He will punish them with a painful punishment, and they will not find for themselves besides Allah any protector or helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 175,\n          \"sura\" : 4\n        },\n        \"text\" : \"So those who believe in Allah and hold fast to Him -  He will admit them to mercy from Himself and bounty and guide them to Himself on a straight path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 176,\n          \"sura\" : 4\n        },\n        \"text\" : \"They request from you a [legal] ruling. Say, \\\" Allah gives you a ruling concerning one having neither descendants nor ascendants [as heirs].\\\" If a man dies, leaving no child but [only] a sister, she will have half of what he left. And he inherits from her if she [dies and] has no child. But if there are two sisters [or more], they will have two-thirds of what he left. If there are both brothers and sisters, the male will have the share of two females. Allah makes clear to you [His law], lest you go astray. And Allah is Knowing of all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, fulfill [all] contracts. Lawful for you are the animals of grazing livestock except for that which is recited to you [in this Qur'an] -  hunting not being permitted while you are in the state of ihram. Indeed, Allah ordains what He intends.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, do not violate the rites of Allah or [the sanctity of] the sacred month or [neglect the marking of] the sacrificial animals and garlanding [them] or [violate the safety of] those coming to the Sacred House seeking bounty from their Lord and [His] approval. But when you come out of ihram, then [you may] hunt. And do not let the hatred of a people for having obstructed you from al-Masjid al-Haram lead you to transgress. And cooperate in righteousness and piety, but do not cooperate in sin and aggression. And fear Allah ; indeed, Allah is severe in penalty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 5\n        },\n        \"text\" : \"Prohibited to you are dead animals, blood, the flesh of swine, and that which has been dedicated to other than Allah, and [those animals] killed by strangling or by a violent blow or by a head-long fall or by the goring of horns, and those from which a wild animal has eaten, except what you [are able to] slaughter [before its death], and those which are sacrificed on stone altars, and [prohibited is] that you seek decision through divining arrows. That is grave disobedience. This day those who disbelieve have despaired of [defeating] your religion; so fear them not, but fear Me. This day I have perfected for you your religion and completed My favor upon you and have approved for you Islam as religion. But whoever is forced by severe hunger with no inclination to sin -  then indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 5\n        },\n        \"text\" : \"They ask you, [O Muhammad], what has been made lawful for them. Say, \\\"Lawful for you are [all] good foods and [game caught by] what you have trained of hunting animals which you train as Allah has taught you. So eat of what they catch for you, and mention the name of Allah upon it, and fear Allah .\\\" Indeed, Allah is swift in account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 5\n        },\n        \"text\" : \"This day [all] good foods have been made lawful, and the food of those who were given the Scripture is lawful for you and your food is lawful for them. And [lawful in marriage are] chaste women from among the believers and chaste women from among those who were given the Scripture before you, when you have given them their due compensation, desiring chastity, not unlawful sexual intercourse or taking [secret] lovers. And whoever denies the faith -  his work has become worthless, and he, in the Hereafter, will be among the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, when you rise to [perform] prayer, wash your faces and your forearms to the elbows and wipe over your heads and wash your feet to the ankles. And if you are in a state of janabah, then purify yourselves. But if you are ill or on a journey or one of you comes from the place of relieving himself or you have contacted women and do not find water, then seek clean earth and wipe over your faces and hands with it. Allah does not intend to make difficulty for you, but He intends to purify you and complete His favor upon you that you may be grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 5\n        },\n        \"text\" : \"And remember the favor of Allah upon you and His covenant with which He bound you when you said, \\\"We hear and we obey\\\"; and fear Allah . Indeed, Allah is Knowing of that within the breasts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, be persistently standing firm for Allah, witnesses in justice, and do not let the hatred of a people prevent you from being just. Be just; that is nearer to righteousness. And fear Allah ; indeed, Allah is Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 5\n        },\n        \"text\" : \"Allah has promised those who believe and do righteous deeds [that] for them there is forgiveness and great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, remember the favor of Allah upon you when a people determined to extend their hands [in aggression] against you, but He withheld their hands from you; and fear Allah . And upon Allah let the believers rely.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 5\n        },\n        \"text\" : \"And Allah had already taken a covenant from the Children of Israel, and We delegated from among them twelve leaders. And Allah said, \\\"I am with you. If you establish prayer and give zakah and believe in My messengers and support them and loan Allah a goodly loan, I will surely remove from you your misdeeds and admit you to gardens beneath which rivers flow. But whoever of you disbelieves after that has certainly strayed from the soundness of the way.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 5\n        },\n        \"text\" : \"So for their breaking of the covenant We cursed them and made their hearts hard. They distort words from their [proper] usages and have forgotten a portion of that of which they were reminded. And you will still observe deceit among them, except a few of them. But pardon them and overlook [their misdeeds]. Indeed, Allah loves the doers of good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 5\n        },\n        \"text\" : \"And from those who say, \\\"We are Christians\\\" We took their covenant; but they forgot a portion of that of which they were reminded. So We caused among them animosity and hatred until the Day of Resurrection. And Allah is going to inform them about what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 5\n        },\n        \"text\" : \"O People of the Scripture, there has come to you Our Messenger making clear to you much of what you used to conceal of the Scripture and overlooking much. There has come to you from Allah a light and a clear Book.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 5\n        },\n        \"text\" : \"By which Allah guides those who pursue His pleasure to the ways of peace and brings them out from darknesses into the light, by His permission, and guides them to a straight path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 5\n        },\n        \"text\" : \"They have certainly disbelieved who say that Allah is Christ, the son of Mary. Say, \\\"Then who could prevent Allah at all if He had intended to destroy Christ, the son of Mary, or his mother or everyone on the earth?\\\" And to Allah belongs the dominion of the heavens and the earth and whatever is between them. He creates what He wills, and Allah is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 5\n        },\n        \"text\" : \"But the Jews and the Christians say, \\\"We are the children of Allah and His beloved.\\\" Say, \\\"Then why does He punish you for your sins?\\\" Rather, you are human beings from among those He has created. He forgives whom He wills, and He punishes whom He wills. And to Allah belongs the dominion of the heavens and the earth and whatever is between them, and to Him is the [final] destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 5\n        },\n        \"text\" : \"O People of the Scripture, there has come to you Our Messenger to make clear to you [the religion] after a period [of suspension] of messengers, lest you say, \\\"There came not to us any bringer of good tidings or a warner.\\\" But there has come to you a bringer of good tidings and a warner. And Allah is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 5\n        },\n        \"text\" : \"And [mention, O Muhammad], when Moses said to his people, \\\"O my people, remember the favor of Allah upon you when He appointed among you prophets and made you possessors and gave you that which He had not given anyone among the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 5\n        },\n        \"text\" : \"O my people, enter the Holy Land which Allah has assigned to you and do not turn back [from fighting in Allah 's cause] and [thus] become losers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 5\n        },\n        \"text\" : \"Said two men from those who feared [to disobey] upon whom Allah had bestowed favor, \\\"Enter upon them through the gate, for when you have entered it, you will be predominant. And upon Allah rely, if you should be believers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 5\n        },\n        \"text\" : \"[ Allah ] said, \\\"Then indeed, it is forbidden to them for forty years [in which] they will wander throughout the land. So do not grieve over the defiantly disobedient people.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 5\n        },\n        \"text\" : \"And recite to them the story of Adam's two sons, in truth, when they both offered a sacrifice [to Allah ], and it was accepted from one of them but was not accepted from the other. Said [the latter], \\\"I will surely kill you.\\\" Said [the former], \\\"Indeed, Allah only accepts from the righteous [who fear Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 5\n        },\n        \"text\" : \"If you should raise your hand against me to kill me -  I shall not raise my hand against you to kill you. Indeed, I fear Allah, Lord of the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 5\n        },\n        \"text\" : \"Then Allah sent a crow searching in the ground to show him how to hide the disgrace of his brother. He said, \\\"O woe to me! Have I failed to be like this crow and hide the body of my brother?\\\" And he became of the regretful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 5\n        },\n        \"text\" : \"Indeed, the penalty for those who wage war against Allah and His Messenger and strive upon earth [to cause] corruption is none but that they be killed or crucified or that their hands and feet be cut off from opposite sides or that they be exiled from the land. That is for them a disgrace in this world; and for them in the Hereafter is a great punishment,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 5\n        },\n        \"text\" : \"Except for those who return [repenting] before you apprehend them. And know that Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, fear Allah and seek the means [of nearness] to Him and strive in His cause that you may succeed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 5\n        },\n        \"text\" : \"Indeed, those who disbelieve -  if they should have all that is in the earth and the like of it with it by which to ransom themselves from the punishment of the Day of Resurrection, it will not be accepted from them, and for them is a painful punishment\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 5\n        },\n        \"text\" : \"[As for] the thief, the male and the female, amputate their hands in recompense for what they committed as a deterrent [punishment] from Allah . And Allah is Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 5\n        },\n        \"text\" : \"But whoever repents after his wrongdoing and reforms, indeed, Allah will turn to him in forgiveness. Indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 5\n        },\n        \"text\" : \"Do you not know that to Allah belongs the dominion of the heavens and the earth? He punishes whom He wills and forgives whom He wills, and Allah is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 5\n        },\n        \"text\" : \"O Messenger, let them not grieve you who hasten into disbelief of those who say, \\\"We believe\\\" with their mouths, but their hearts believe not, and from among the Jews. [They are] avid listeners to falsehood, listening to another people who have not come to you. They distort words beyond their [proper] usages, saying \\\"If you are given this, take it; but if you are not given it, then beware.\\\" But he for whom Allah intends fitnah -  never will you possess [power to do] for him a thing against Allah . Those are the ones for whom Allah does not intend to purify their hearts. For them in this world is disgrace, and for them in the Hereafter is a great punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 5\n        },\n        \"text\" : \"[They are] avid listeners to falsehood, devourers of [what is] unlawful. So if they come to you, [O Muhammad], judge between them or turn away from them. And if you turn away from them -  never will they harm you at all. And if you judge, judge between them with justice. Indeed, Allah loves those who act justly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 5\n        },\n        \"text\" : \"But how is it that they come to you for judgement while they have the Torah, in which is the judgement of Allah ? Then they turn away, [even] after that; but those are not [in fact] believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 5\n        },\n        \"text\" : \"Indeed, We sent down the Torah, in which was guidance and light. The prophets who submitted [to Allah ] judged by it for the Jews, as did the rabbis and scholars by that with which they were entrusted of the Scripture of Allah, and they were witnesses thereto. So do not fear the people but fear Me, and do not exchange My verses for a small price. And whoever does not judge by what Allah has revealed -  then it is those who are the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 5\n        },\n        \"text\" : \"And We ordained for them therein a life for a life, an eye for an eye, a nose for a nose, an ear for an ear, a tooth for a tooth, and for wounds is legal retribution. But whoever gives [up his right as] charity, it is an expiation for him. And whoever does not judge by what Allah has revealed -  then it is those who are the wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 5\n        },\n        \"text\" : \"And let the People of the Gospel judge by what Allah has revealed therein. And whoever does not judge by what Allah has revealed -  then it is those who are the defiantly disobedient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 5\n        },\n        \"text\" : \"And We have revealed to you, [O Muhammad], the Book in truth, confirming that which preceded it of the Scripture and as a criterion over it. So judge between them by what Allah has revealed and do not follow their inclinations away from what has come to you of the truth. To each of you We prescribed a law and a method. Had Allah willed, He would have made you one nation [united in religion], but [He intended] to test you in what He has given you; so race to [all that is] good. To Allah is your return all together, and He will [then] inform you concerning that over which you used to differ.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 5\n        },\n        \"text\" : \"And judge, [O Muhammad], between them by what Allah has revealed and do not follow their inclinations and beware of them, lest they tempt you away from some of what Allah has revealed to you. And if they turn away -  then know that Allah only intends to afflict them with some of their [own] sins. And indeed, many among the people are defiantly disobedient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 5\n        },\n        \"text\" : \"Then is it the judgement of [the time of] ignorance they desire? But who is better than Allah in judgement for a people who are certain [in faith].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, do not take the Jews and the Christians as allies. They are [in fact] allies of one another. And whoever is an ally to them among you -  then indeed, he is [one] of them. Indeed, Allah guides not the wrongdoing people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 5\n        },\n        \"text\" : \"So you see those in whose hearts is disease hastening into [association with] them, saying, \\\"We are afraid a misfortune may strike us.\\\" But perhaps Allah will bring conquest or a decision from Him, and they will become, over what they have been concealing within themselves, regretful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 5\n        },\n        \"text\" : \"And those who believe will say, \\\"Are these the ones who swore by Allah their strongest oaths that indeed they were with you?\\\" Their deeds have become worthless, and they have become losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, whoever of you should revert from his religion - Allah will bring forth [in place of them] a people He will love and who will love Him [who are] humble toward the believers, powerful against the disbelievers; they strive in the cause of Allah and do not fear the blame of a critic. That is the favor of Allah ; He bestows it upon whom He wills. And Allah is all-Encompassing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 5\n        },\n        \"text\" : \"Your ally is none but Allah and [therefore] His Messenger and those who have believed -  those who establish prayer and give zakah, and they bow [in worship].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 5\n        },\n        \"text\" : \"And whoever is an ally of Allah and His Messenger and those who have believed - indeed, the party of Allah -  they will be the predominant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, take not those who have taken your religion in ridicule and amusement among the ones who were given the Scripture before you nor the disbelievers as allies. And fear Allah, if you should [truly] be believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 5\n        },\n        \"text\" : \"And when you call to prayer, they take it in ridicule and amusement. That is because they are a people who do not use reason.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 5\n        },\n        \"text\" : \"Say, \\\"O People of the Scripture, do you resent us except [for the fact] that we have believed in Allah and what was revealed to us and what was revealed before and because most of you are defiantly disobedient?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 5\n        },\n        \"text\" : \"Say, \\\"Shall I inform you of [what is] worse than that as penalty from Allah ? [It is that of] those whom Allah has cursed and with whom He became angry and made of them apes and pigs and slaves of Taghut. Those are worse in position and further astray from the sound way.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 5\n        },\n        \"text\" : \"And when they come to you, they say, \\\"We believe.\\\" But they have entered with disbelief [in their hearts], and they have certainly left with it. And Allah is most knowing of what they were concealing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 5\n        },\n        \"text\" : \"And the Jews say, \\\"The hand of Allah is chained.\\\" Chained are their hands, and cursed are they for what they say. Rather, both His hands are extended; He spends however He wills. And that which has been revealed to you from your Lord will surely increase many of them in transgression and disbelief. And We have cast among them animosity and hatred until the Day of Resurrection. Every time they kindled the fire of war [against you], Allah extinguished it. And they strive throughout the land [causing] corruption, and Allah does not like corrupters.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 5\n        },\n        \"text\" : \"And if only the People of the Scripture had believed and feared Allah, We would have removed from them their misdeeds and admitted them to Gardens of Pleasure.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 5\n        },\n        \"text\" : \"O Messenger, announce that which has been revealed to you from your Lord, and if you do not, then you have not conveyed His message. And Allah will protect you from the people. Indeed, Allah does not guide the disbelieving people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 5\n        },\n        \"text\" : \"Indeed, those who have believed [in Prophet Muhammad] and those [before Him] who were Jews or Sabeans or Christians -  those [among them] who believed in Allah and the Last Day and did righteousness -  no fear will there be concerning them, nor will they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 5\n        },\n        \"text\" : \"And they thought there would be no [resulting] punishment, so they became blind and deaf. Then Allah turned to them in forgiveness; then [again] many of them became blind and deaf. And Allah is Seeing of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 5\n        },\n        \"text\" : \"They have certainly disbelieved who say, \\\" Allah is the Messiah, the son of Mary\\\" while the Messiah has said, \\\"O Children of Israel, worship Allah, my Lord and your Lord.\\\" Indeed, he who associates others with Allah - Allah has forbidden him Paradise, and his refuge is the Fire. And there are not for the wrongdoers any helpers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 5\n        },\n        \"text\" : \"They have certainly disbelieved who say, \\\" Allah is the third of three.\\\" And there is no god except one God. And if they do not desist from what they are saying, there will surely afflict the disbelievers among them a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 5\n        },\n        \"text\" : \"So will they not repent to Allah and seek His forgiveness? And Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 5\n        },\n        \"text\" : \"Say, \\\"Do you worship besides Allah that which holds for you no [power of] harm or benefit while it is Allah who is the Hearing, the Knowing?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 5\n        },\n        \"text\" : \"Cursed were those who disbelieved among the Children of Israel by the tongue of David and of Jesus, the son of Mary. That was because they disobeyed and [habitually] transgressed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 5\n        },\n        \"text\" : \"You see many of them becoming allies of those who disbelieved. How wretched is that which they have put forth for themselves in that Allah has become angry with them, and in the punishment they will abide eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 5\n        },\n        \"text\" : \"And if they had believed in Allah and the Prophet and in what was revealed to him, they would not have taken them as allies; but many of them are defiantly disobedient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 5\n        },\n        \"text\" : \"You will surely find the most intense of the people in animosity toward the believers [to be] the Jews and those who associate others with Allah ; and you will find the nearest of them in affection to the believers those who say, \\\"We are Christians.\\\" That is because among them are priests and monks and because they are not arrogant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 5\n        },\n        \"text\" : \"And why should we not believe in Allah and what has come to us of the truth? And we aspire that our Lord will admit us [to Paradise] with the righteous people.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 5\n        },\n        \"text\" : \"So Allah rewarded them for what they said with gardens [in Paradise] beneath which rivers flow, wherein they abide eternally. And that is the reward of doers of good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, do not prohibit the good things which Allah has made lawful to you and do not transgress. Indeed, Allah does not like transgressors.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 5\n        },\n        \"text\" : \"And eat of what Allah has provided for you [which is] lawful and good. And fear Allah, in whom you are believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 5\n        },\n        \"text\" : \"Allah will not impose blame upon you for what is meaningless in your oaths, but He will impose blame upon you for [breaking] what you intended of oaths. So its expiation is the feeding of ten needy people from the average of that which you feed your [own] families or clothing them or the freeing of a slave. But whoever cannot find [or afford it] -  then a fast of three days [is required]. That is the expiation for oaths when you have sworn. But guard your oaths. Thus does Allah make clear to you His verses that you may be grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, indeed, intoxicants, gambling, [sacrificing on] stone altars [to other than Allah ], and divining arrows are but defilement from the work of Satan, so avoid it that you may be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 5\n        },\n        \"text\" : \"Satan only wants to cause between you animosity and hatred through intoxicants and gambling and to avert you from the remembrance of Allah and from prayer. So will you not desist?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 5\n        },\n        \"text\" : \"And obey Allah and obey the Messenger and beware. And if you turn away -  then know that upon Our Messenger is only [the responsibility for] clear notification.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 5\n        },\n        \"text\" : \"There is not upon those who believe and do righteousness [any] blame concerning what they have eaten [in the past] if they [now] fear Allah and believe and do righteous deeds, and then fear Allah and believe, and then fear Allah and do good; and Allah loves the doers of good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, Allah will surely test you through something of the game that your hands and spears [can] reach, that Allah may make evident those who fear Him unseen. And whoever transgresses after that -  for him is a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, do not kill game while you are in the state of ihram. And whoever of you kills it intentionally -  the penalty is an equivalent from sacrificial animals to what he killed, as judged by two just men among you as an offering [to Allah ] delivered to the Ka'bah, or an expiation: the feeding of needy people or the equivalent of that in fasting, that he may taste the consequence of his deed. Allah has pardoned what is past; but whoever returns [to violation], then Allah will take retribution from him. And Allah is Exalted in Might and Owner of Retribution.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 5\n        },\n        \"text\" : \"Lawful to you is game from the sea and its food as provision for you and the travelers, but forbidden to you is game from the land as long as you are in the state of ihram. And fear Allah to whom you will be gathered.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 5\n        },\n        \"text\" : \"Allah has made the Ka'bah, the Sacred House, standing for the people and [has sanctified] the sacred months and the sacrificial animals and the garlands [by which they are identified]. That is so you may know that Allah knows what is in the heavens and what is in the earth and that Allah is Knowing of all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 5\n        },\n        \"text\" : \"Know that Allah is severe in penalty and that Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 5\n        },\n        \"text\" : \"Not upon the Messenger is [responsibility] except [for] notification. And Allah knows whatever you reveal and whatever you conceal.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 100,\n          \"sura\" : 5\n        },\n        \"text\" : \"Say, \\\"Not equal are the evil and the good, although the abundance of evil might impress you.\\\" So fear Allah, O you of understanding, that you may be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, do not ask about things which, if they are shown to you, will distress you. But if you ask about them while the Qur'an is being revealed, they will be shown to you. Allah has pardoned that which is past; and Allah is Forgiving and Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 5\n        },\n        \"text\" : \"Allah has not appointed [such innovations as] bahirah or sa'ibah or wasilah or ham. But those who disbelieve invent falsehood about Allah, and most of them do not reason.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 5\n        },\n        \"text\" : \"And when it is said to them, \\\"Come to what Allah has revealed and to the Messenger,\\\" they say, \\\"Sufficient for us is that upon which we found our fathers.\\\" Even though their fathers knew nothing, nor were they guided?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, upon you is [responsibility for] yourselves. Those who have gone astray will not harm you when you have been guided. To Allah is your return all together; then He will inform you of what you used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 5\n        },\n        \"text\" : \"O you who have believed, testimony [should be taken] among you when death approaches one of you at the time of bequest -  [that of] two just men from among you or two others from outside if you are traveling through the land and the disaster of death should strike you. Detain them after the prayer and let them both swear by Allah if you doubt [their testimony, saying], \\\"We will not exchange our oath for a price, even if he should be a near relative, and we will not withhold the testimony of Allah . Indeed, we would then be of the sinful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 5\n        },\n        \"text\" : \"But if it is found that those two were guilty of perjury, let two others stand in their place [who are] foremost [in claim] from those who have a lawful right. And let them swear by Allah, \\\"Our testimony is truer than their testimony, and we have not transgressed. Indeed, we would then be of the wrongdoers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 5\n        },\n        \"text\" : \"That is more likely that they will give testimony according to its [true] objective, or [at least] they would fear that [other] oaths might be taken after their oaths. And fear Allah and listen; and Allah does not guide the defiantly disobedient people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 5\n        },\n        \"text\" : \"[Be warned of] the Day when Allah will assemble the messengers and say, \\\"What was the response you received?\\\" They will say, \\\"We have no knowledge. Indeed, it is You who is Knower of the unseen\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 5\n        },\n        \"text\" : \"[The Day] when Allah will say, \\\"O Jesus, Son of Mary, remember My favor upon you and upon your mother when I supported you with the Pure Spirit and you spoke to the people in the cradle and in maturity; and [remember] when I taught you writing and wisdom and the Torah and the Gospel; and when you designed from clay [what was] like the form of a bird with My permission, then you breathed into it, and it became a bird with My permission; and you healed the blind and the leper with My permission; and when you brought forth the dead with My permission; and when I restrained the Children of Israel from [killing] you when you came to them with clear proofs and those who disbelieved among them said, \\\"This is not but obvious magic.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 5\n        },\n        \"text\" : \"And [remember] when I inspired to the disciples, \\\"Believe in Me and in My messenger Jesus.\\\" They said, \\\"We have believed, so bear witness that indeed we are Muslims [in submission to Allah ].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 5\n        },\n        \"text\" : \"[And remember] when the disciples said, \\\"O Jesus, Son of Mary, can your Lord send down to us a table [spread with food] from the heaven? [Jesus] said,\\\" Fear Allah, if you should be believers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 5\n        },\n        \"text\" : \"Said Jesus, the son of Mary, \\\"O Allah, our Lord, send down to us a table [spread with food] from the heaven to be for us a festival for the first of us and the last of us and a sign from You. And provide for us, and You are the best of providers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 115,\n          \"sura\" : 5\n        },\n        \"text\" : \"Allah said, \\\"Indeed, I will sent it down to you, but whoever disbelieves afterwards from among you -  then indeed will I punish him with a punishment by which I have not punished anyone among the worlds.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 5\n        },\n        \"text\" : \"And [beware the Day] when Allah will say, \\\"O Jesus, Son of Mary, did you say to the people, 'Take me and my mother as deities besides Allah ?'\\\" He will say, \\\"Exalted are You! It was not for me to say that to which I have no right. If I had said it, You would have known it. You know what is within myself, and I do not know what is within Yourself. Indeed, it is You who is Knower of the unseen.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 117,\n          \"sura\" : 5\n        },\n        \"text\" : \"I said not to them except what You commanded me -  to worship Allah, my Lord and your Lord. And I was a witness over them as long as I was among them; but when You took me up, You were the Observer over them, and You are, over all things, Witness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 119,\n          \"sura\" : 5\n        },\n        \"text\" : \"Allah will say, \\\"This is the Day when the truthful will benefit from their truthfulness.\\\" For them are gardens [in Paradise] beneath which rivers flow, wherein they will abide forever, Allah being pleased with them, and they with Him. That is the great attainment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 120,\n          \"sura\" : 5\n        },\n        \"text\" : \"To Allah belongs the dominion of the heavens and the earth and whatever is within them. And He is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 6\n        },\n        \"text\" : \"[All] praise is [due] to Allah, who created the heavens and the earth and made the darkness and the light. Then those who disbelieve equate [others] with their Lord.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 6\n        },\n        \"text\" : \"And He is Allah, [the only deity] in the heavens and the earth. He knows your secret and what you make public, and He knows that which you earn.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"To whom belongs whatever is in the heavens and earth?\\\" Say, \\\"To Allah .\\\" He has decreed upon Himself mercy. He will surely assemble you for the Day of Resurrection, about which there is no doubt. Those who will lose themselves [that Day] do not believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"Is it other than Allah I should take as a protector, Creator of the heavens and the earth, while it is He who feeds and is not fed?\\\" Say, [O Muhammad], \\\"Indeed, I have been commanded to be the first [among you] who submit [to Allah ] and [was commanded], 'Do not ever be of the polytheists.' \\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 6\n        },\n        \"text\" : \"He from whom it is averted that Day -  [ Allah ] has granted him mercy. And that is the clear attainment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 6\n        },\n        \"text\" : \"And if Allah should touch you with adversity, there is no remover of it except Him. And if He touches you with good -  then He is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 6\n        },\n        \"text\" : \"And He is the subjugator over His servants. And He is the Wise, the Acquainted [with all].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"What thing is greatest in testimony?\\\" Say, \\\" Allah is witness between me and you. And this Qur'an was revealed to me that I may warn you thereby and whomever it reaches. Do you [truly] testify that with Allah there are other deities?\\\" Say, \\\"I will not testify [with you].\\\" Say, \\\"Indeed, He is but one God, and indeed, I am free of what you associate [with Him].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 6\n        },\n        \"text\" : \"And who is more unjust than one who invents about Allah a lie or denies His verses? Indeed, the wrongdoers will not succeed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 6\n        },\n        \"text\" : \"And [mention, O Muhammad], the Day We will gather them all together; then We will say to those who associated others with Allah, \\\"Where are your 'partners' that you used to claim [with Him]?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 6\n        },\n        \"text\" : \"Then there will be no [excuse upon] examination except they will say, \\\"By Allah, our Lord, we were not those who associated.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 6\n        },\n        \"text\" : \"Those will have lost who deny the meeting with Allah, until when the Hour [of resurrection] comes upon them unexpectedly, they will say, \\\"Oh, [how great is] our regret over what we neglected concerning it,\\\" while they bear their burdens on their backs. Unquestionably, evil is that which they bear.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 6\n        },\n        \"text\" : \"And the worldly life is not but amusement and diversion; but the home of the Hereafter is best for those who fear Allah, so will you not reason?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 6\n        },\n        \"text\" : \"We know that you, [O Muhammad], are saddened by what they say. And indeed, they do not call you untruthful, but it is the verses of Allah that the wrongdoers reject.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 6\n        },\n        \"text\" : \"And certainly were messengers denied before you, but they were patient over [the effects of] denial, and they were harmed until Our victory came to them. And none can alter the words of Allah . And there has certainly come to you some information about the [previous] messengers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 6\n        },\n        \"text\" : \"And if their evasion is difficult for you, then if you are able to seek a tunnel into the earth or a stairway into the sky to bring them a sign, [then do so]. But if Allah had willed, He would have united them upon guidance. So never be of the ignorant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 6\n        },\n        \"text\" : \"Only those who hear will respond. But the dead - Allah will resurrect them; then to Him they will be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 6\n        },\n        \"text\" : \"And they say, \\\"Why has a sign not been sent down to him from his Lord?\\\" Say, \\\"Indeed, Allah is Able to send down a sign, but most of them do not know.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 6\n        },\n        \"text\" : \"But those who deny Our verses are deaf and dumb within darknesses. Whomever Allah wills -  He leaves astray; and whomever He wills -  He puts him on a straight path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"Have you considered: if there came to you the punishment of Allah or there came to you the Hour -  is it other than Allah you would invoke, if you should be truthful?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 6\n        },\n        \"text\" : \"So the people that committed wrong were eliminated. And praise to Allah, Lord of the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"Have you considered: if Allah should take away your hearing and your sight and set a seal upon your hearts, which deity other than Allah could bring them [back] to you?\\\" Look how we diversify the verses; then they [still] turn away.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"Have you considered: if the punishment of Allah should come to you unexpectedly or manifestly, will any be destroyed but the wrongdoing people?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"I do not tell you that I have the depositories [containing the provision] of Allah or that I know the unseen, nor do I tell you that I am an angel. I only follow what is revealed to me.\\\" Say, \\\"Is the blind equivalent to the seeing? Then will you not give thought?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 6\n        },\n        \"text\" : \"And do not send away those who call upon their Lord morning and afternoon, seeking His countenance. Not upon you is anything of their account and not upon them is anything of your account. So were you to send them away, you would [then] be of the wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 6\n        },\n        \"text\" : \"And thus We have tried some of them through others that the disbelievers might say, \\\"Is it these whom Allah has favored among us?\\\" Is not Allah most knowing of those who are grateful?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"Indeed, I have been forbidden to worship those you invoke besides Allah .\\\" Say, \\\"I will not follow your desires, for I would then have gone astray, and I would not be of the [rightly] guided.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"Indeed, I am on clear evidence from my Lord, and you have denied it. I do not have that for which you are impatient. The decision is only for Allah . He relates the truth, and He is the best of deciders.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"If I had that for which you are impatient, the matter would have been decided between me and you, but Allah is most knowing of the wrongdoers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 6\n        },\n        \"text\" : \"And with Him are the keys of the unseen; none knows them except Him. And He knows what is on the land and in the sea. Not a leaf falls but that He knows it. And no grain is there within the darknesses of the earth and no moist or dry [thing] but that it is [written] in a clear record.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 6\n        },\n        \"text\" : \"Then they His servants are returned to Allah, their true Lord. Unquestionably, His is the judgement, and He is the swiftest of accountants.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"Who rescues you from the darknesses of the land and sea [when] you call upon Him imploring [aloud] and privately, 'If He should save us from this [crisis], we will surely be among the thankful.' \\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"It is Allah who saves you from it and from every distress; then you [still] associate others with Him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 6\n        },\n        \"text\" : \"And those who fear Allah are not held accountable for the disbelievers at all, but [only for] a reminder - that perhaps they will fear Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 6\n        },\n        \"text\" : \"And leave those who take their religion as amusement and diversion and whom the worldly life has deluded. But remind with the Qur'an, lest a soul be given up to destruction for what it earned; it will have other than Allah no protector and no intercessor. And if it should offer every compensation, it would not be taken from it. Those are the ones who are given to destruction for what they have earned. For them will be a drink of scalding water and a painful punishment because they used to disbelieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"Shall we invoke instead of Allah that which neither benefits us nor harms us and be turned back on our heels after Allah has guided us? [We would then be] like one whom the devils enticed [to wander] upon the earth confused, [while] he has companions inviting him to guidance, [calling], 'Come to us.' \\\" Say, \\\"Indeed, the guidance of Allah is the [only] guidance; and we have been commanded to submit to the Lord of the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 6\n        },\n        \"text\" : \"And when he saw the sun rising, he said, \\\"This is my lord; this is greater.\\\" But when it set, he said, \\\"O my people, indeed I am free from what you associate with Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 6\n        },\n        \"text\" : \"Indeed, I have turned my face toward He who created the heavens and the earth, inclining toward truth, and I am not of those who associate others with Allah .\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 6\n        },\n        \"text\" : \"And his people argued with him. He said, \\\"Do you argue with me concerning Allah while He has guided me? And I fear not what you associate with Him [and will not be harmed] unless my Lord should will something. My Lord encompasses all things in knowledge; then will you not remember?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 6\n        },\n        \"text\" : \"And how should I fear what you associate while you do not fear that you have associated with Allah that for which He has not sent down to you any authority? So which of the two parties has more right to security, if you should know?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 6\n        },\n        \"text\" : \"And We gave to Abraham, Isaac and Jacob - all [of them] We guided. And Noah, We guided before; and among his descendants, David and Solomon and Job and Joseph and Moses and Aaron. Thus do We reward the doers of good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 6\n        },\n        \"text\" : \"And Zechariah and John and Jesus and Elias -  and all were of the righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 6\n        },\n        \"text\" : \"And Ishmael and Elisha and Jonah and Lot - and all [of them] We preferred over the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 6\n        },\n        \"text\" : \"That is the guidance of Allah by which He guides whomever He wills of His servants. But if they had associated others with Allah, then worthless for them would be whatever they were doing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 6\n        },\n        \"text\" : \"Those are the ones whom Allah has guided, so from their guidance take an example. Say, \\\"I ask of you for this message no payment. It is not but a reminder for the worlds.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 6\n        },\n        \"text\" : \"And they did not appraise Allah with true appraisal when they said, \\\" Allah did not reveal to a human being anything.\\\" Say, \\\"Who revealed the Scripture that Moses brought as light and guidance to the people? You [Jews] make it into pages, disclosing [some of] it and concealing much. And you were taught that which you knew not - neither you nor your fathers.\\\" Say, \\\" Allah [revealed it].\\\" Then leave them in their [empty] discourse, amusing themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 6\n        },\n        \"text\" : \"And who is more unjust than one who invents a lie about Allah or says, \\\"It has been inspired to me,\\\" while nothing has been inspired to him, and one who says, \\\"I will reveal [something] like what Allah revealed.\\\" And if you could but see when the wrongdoers are in the overwhelming pangs of death while the angels extend their hands, [saying], \\\"Discharge your souls! Today you will be awarded the punishment of [extreme] humiliation for what you used to say against Allah other than the truth and [that] you were, toward His verses, being arrogant.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 6\n        },\n        \"text\" : \"[It will be said to them], \\\"And you have certainly come to Us alone as We created you the first time, and you have left whatever We bestowed upon you behind you. And We do not see with you your 'intercessors' which you claimed that they were among you associates [of Allah ]. It has [all] been severed between you, and lost from you is what you used to claim.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 6\n        },\n        \"text\" : \"Indeed, Allah is the cleaver of grain and date seeds. He brings the living out of the dead and brings the dead out of the living. That is Allah ; so how are you deluded?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 6\n        },\n        \"text\" : \"And it is He who sends down rain from the sky, and We produce thereby the growth of all things. We produce from it greenery from which We produce grains arranged in layers. And from the palm trees - of its emerging fruit are clusters hanging low. And [We produce] gardens of grapevines and olives and pomegranates, similar yet varied. Look at [each of] its fruit when it yields and [at] its ripening. Indeed in that are signs for a people who believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 100,\n          \"sura\" : 6\n        },\n        \"text\" : \"But they have attributed to Allah partners - the jinn, while He has created them - and have fabricated for Him sons and daughters. Exalted is He and high above what they describe\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 6\n        },\n        \"text\" : \"[He is] Originator of the heavens and the earth. How could He have a son when He does not have a companion and He created all things? And He is, of all things, Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 6\n        },\n        \"text\" : \"That is Allah, your Lord; there is no deity except Him, the Creator of all things, so worship Him. And He is Disposer of all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 6\n        },\n        \"text\" : \"Vision perceives Him not, but He perceives [all] vision; and He is the Subtle, the Acquainted.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 6\n        },\n        \"text\" : \"Follow, [O Muhammad], what has been revealed to you from your Lord - there is no deity except Him - and turn away from those who associate others with Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 6\n        },\n        \"text\" : \"But if Allah had willed, they would not have associated. And We have not appointed you over them as a guardian, nor are you a manager over them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 6\n        },\n        \"text\" : \"And do not insult those they invoke other than Allah, lest they insult Allah in enmity without knowledge. Thus We have made pleasing to every community their deeds. Then to their Lord is their return, and He will inform them about what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 6\n        },\n        \"text\" : \"And they swear by Allah their strongest oaths that if a sign came to them, they would surely believe in it. Say, \\\"The signs are only with Allah .\\\" And what will make you perceive that even if a sign came, they would not believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 6\n        },\n        \"text\" : \"And even if We had sent down to them the angels [with the message] and the dead spoke to them [of it] and We gathered together every [created] thing in front of them, they would not believe unless Allah should will. But most of them, [of that], are ignorant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 6\n        },\n        \"text\" : \"[Say], \\\"Then is it other than Allah I should seek as judge while it is He who has revealed to you the Book explained in detail?\\\" And those to whom We [previously] gave the Scripture know that it is sent down from your Lord in truth, so never be among the doubters.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 6\n        },\n        \"text\" : \"And if you obey most of those upon the earth, they will mislead you from the way of Allah . They follow not except assumption, and they are not but falsifying.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 118,\n          \"sura\" : 6\n        },\n        \"text\" : \"So eat of that [meat] upon which the name of Allah has been mentioned, if you are believers in His verses.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 119,\n          \"sura\" : 6\n        },\n        \"text\" : \"And why should you not eat of that upon which the name of Allah has been mentioned while He has explained in detail to you what He has forbidden you, excepting that to which you are compelled. And indeed do many lead [others] astray through their [own] inclinations without knowledge. Indeed, your Lord - He is most knowing of the transgressors.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 121,\n          \"sura\" : 6\n        },\n        \"text\" : \"And do not eat of that upon which the name of Allah has not been mentioned, for indeed, it is grave disobedience. And indeed do the devils inspire their allies [among men] to dispute with you. And if you were to obey them, indeed, you would be associators [of others with Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 124,\n          \"sura\" : 6\n        },\n        \"text\" : \"And when a sign comes to them, they say, \\\"Never will we believe until we are given like that which was given to the messengers of Allah .\\\" Allah is most knowing of where He places His message. There will afflict those who committed crimes debasement before Allah and severe punishment for what they used to conspire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 125,\n          \"sura\" : 6\n        },\n        \"text\" : \"So whoever Allah wants to guide - He expands his breast to [contain] Islam; and whoever He wants to misguide - He makes his breast tight and constricted as though he were climbing into the sky. Thus does Allah place defilement upon those who do not believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 128,\n          \"sura\" : 6\n        },\n        \"text\" : \"And [mention, O Muhammad], the Day when He will gather them together [and say], \\\"O company of jinn, you have [misled] many of mankind.\\\" And their allies among mankind will say, \\\"Our Lord, some of us made use of others, and we have [now] reached our term, which you appointed for us.\\\" He will say, \\\"The Fire is your residence, wherein you will abide eternally, except for what Allah wills. Indeed, your Lord is Wise and Knowing.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 129,\n          \"sura\" : 6\n        },\n        \"text\" : \"And thus will We make some of the wrongdoers allies of others for what they used to earn.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 132,\n          \"sura\" : 6\n        },\n        \"text\" : \"And for all are degrees from what they have done. And your Lord is not unaware of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 134,\n          \"sura\" : 6\n        },\n        \"text\" : \"Indeed, what you are promised is coming, and you will not cause failure [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 136,\n          \"sura\" : 6\n        },\n        \"text\" : \"And the polytheists assign to Allah from that which He created of crops and livestock a share and say, \\\"This is for Allah,\\\" by their claim, \\\" and this is for our partners [associated with Him].\\\" But what is for their \\\"partners\\\" does not reach Allah, while what is for Allah - this reaches their \\\"partners.\\\" Evil is that which they rule.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 137,\n          \"sura\" : 6\n        },\n        \"text\" : \"And likewise, to many of the polytheists their partners have made [to seem] pleasing the killing of their children in order to bring about their destruction and to cover them with confusion in their religion. And if Allah had willed, they would not have done so. So leave them and that which they invent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 138,\n          \"sura\" : 6\n        },\n        \"text\" : \"And they say, \\\"These animals and crops are forbidden; no one may eat from them except whom we will,\\\" by their claim. And there are those [camels] whose backs are forbidden [by them] and those upon which the name of Allah is not mentioned - [all of this] an invention of untruth about Him. He will punish them for what they were inventing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 139,\n          \"sura\" : 6\n        },\n        \"text\" : \"And they say, \\\"What is in the bellies of these animals is exclusively for our males and forbidden to our females. But if it is [born] dead, then all of them have shares therein.\\\" He will punish them for their description. Indeed, He is Wise and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 140,\n          \"sura\" : 6\n        },\n        \"text\" : \"Those will have lost who killed their children in foolishness without knowledge and prohibited what Allah had provided for them, inventing untruth about Allah . They have gone astray and were not [rightly] guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 142,\n          \"sura\" : 6\n        },\n        \"text\" : \"And of the grazing livestock are carriers [of burdens] and those [too] small. Eat of what Allah has provided for you and do not follow the footsteps of Satan. Indeed, he is to you a clear enemy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 144,\n          \"sura\" : 6\n        },\n        \"text\" : \"And of the camels, two and of the cattle, two. Say, \\\"Is it the two males He has forbidden or the two females or that which the wombs of the two females contain? Or were you witnesses when Allah charged you with this? Then who is more unjust than one who invents a lie about Allah to mislead the people by [something] other than knowledge? Indeed, Allah does not guide the wrongdoing people.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 145,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"I do not find within that which was revealed to me [anything] forbidden to one who would eat it unless it be a dead animal or blood spilled out or the flesh of swine - for indeed, it is impure -  or it be [that slaughtered in] disobedience, dedicated to other than Allah . But whoever is forced [by necessity], neither desiring [it] nor transgressing [its limit], then indeed, your Lord is Forgiving and Merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 148,\n          \"sura\" : 6\n        },\n        \"text\" : \"Those who associated with Allah will say, \\\"If Allah had willed, we would not have associated [anything] and neither would our fathers, nor would we have prohibited anything.\\\" Likewise did those before deny until they tasted Our punishment. Say, \\\"Do you have any knowledge that you can produce for us? You follow not except assumption, and you are not but falsifying.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 149,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"With Allah is the far-reaching argument. If He had willed, He would have guided you all.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 150,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"Bring forward your witnesses who will testify that Allah has prohibited this.\\\" And if they testify, do not testify with them. And do not follow the desires of those who deny Our verses and those who do not believe in the Hereafter, while they equate [others] with their Lord.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 151,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"Come, I will recite what your Lord has prohibited to you. [He commands] that you not associate anything with Him, and to parents, good treatment, and do not kill your children out of poverty; We will provide for you and them. And do not approach immoralities -  what is apparent of them and what is concealed. And do not kill the soul which Allah has forbidden [to be killed] except by [legal] right. This has He instructed you that you may use reason.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 152,\n          \"sura\" : 6\n        },\n        \"text\" : \"And do not approach the orphan's property except in a way that is best until he reaches maturity. And give full measure and weight in justice. We do not charge any soul except [with that within] its capacity. And when you testify, be just, even if [it concerns] a near relative. And the covenant of Allah fulfill. This has He instructed you that you may remember.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 154,\n          \"sura\" : 6\n        },\n        \"text\" : \"Then We gave Moses the Scripture, making complete [Our favor] upon the one who did good and as a detailed explanation of all things and as guidance and mercy that perhaps in [the matter of] the meeting with their Lord they would believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 155,\n          \"sura\" : 6\n        },\n        \"text\" : \"And this [Qur'an] is a Book We have revealed [which is] blessed, so follow it and fear Allah that you may receive mercy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 157,\n          \"sura\" : 6\n        },\n        \"text\" : \"Or lest you say, \\\"If only the Scripture had been revealed to us, we would have been better guided than they.\\\" So there has [now] come to you a clear evidence from your Lord and a guidance and mercy. Then who is more unjust than one who denies the verses of Allah and turns away from them? We will recompense those who turn away from Our verses with the worst of punishment for their having turned away.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 159,\n          \"sura\" : 6\n        },\n        \"text\" : \"Indeed, those who have divided their religion and become sects -  you, [O Muhammad], are not [associated] with them in anything. Their affair is only [left] to Allah ; then He will inform them about what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 161,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"Indeed, my Lord has guided me to a straight path -  a correct religion -  the way of Abraham, inclining toward truth. And he was not among those who associated others with Allah .\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 162,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"Indeed, my prayer, my rites of sacrifice, my living and my dying are for Allah, Lord of the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 164,\n          \"sura\" : 6\n        },\n        \"text\" : \"Say, \\\"Is it other than Allah I should desire as a lord while He is the Lord of all things? And every soul earns not [blame] except against itself, and no bearer of burdens will bear the burden of another. Then to your Lord is your return, and He will inform you concerning that over which you used to differ.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 7\n        },\n        \"text\" : \"Follow, [O mankind], what has been revealed to you from your Lord and do not follow other than Him any allies. Little do you remember.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 7\n        },\n        \"text\" : \"Then We will surely relate [their deeds] to them with knowledge, and We were not [at all] absent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 7\n        },\n        \"text\" : \"[ Allah ] said, \\\"What prevented you from prostrating when I commanded you?\\\" [Satan] said, \\\"I am better than him. You created me from fire and created him from clay.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 7\n        },\n        \"text\" : \"[ Allah ] said, \\\"Descend from Paradise, for it is not for you to be arrogant therein. So get out; indeed, you are of the debased.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 7\n        },\n        \"text\" : \"[ Allah ] said, \\\"Indeed, you are of those reprieved.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 7\n        },\n        \"text\" : \"[ Allah ] said, \\\"Get out of Paradise, reproached and expelled. Whoever follows you among them -  I will surely fill Hell with you, all together.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 7\n        },\n        \"text\" : \"And he swore [by Allah ] to them, \\\"Indeed, I am to you from among the sincere advisors.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 7\n        },\n        \"text\" : \"So he made them fall, through deception. And when they tasted of the tree, their private parts became apparent to them, and they began to fasten together over themselves from the leaves of Paradise. And their Lord called to them, \\\"Did I not forbid you from that tree and tell you that Satan is to you a clear enemy?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 7\n        },\n        \"text\" : \"[ Allah ] said, \\\"Descend, being to one another enemies. And for you on the earth is a place of settlement and enjoyment for a time.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 7\n        },\n        \"text\" : \"O children of Adam, We have bestowed upon you clothing to conceal your private parts and as adornment. But the clothing of righteousness -  that is best. That is from the signs of Allah that perhaps they will remember.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 7\n        },\n        \"text\" : \"O children of Adam, let not Satan tempt you as he removed your parents from Paradise, stripping them of their clothing to show them their private parts. Indeed, he sees you, he and his tribe, from where you do not see them. Indeed, We have made the devils allies to those who do not believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 7\n        },\n        \"text\" : \"And when they commit an immorality, they say, \\\"We found our fathers doing it, and Allah has ordered us to do it.\\\" Say, \\\"Indeed, Allah does not order immorality. Do you say about Allah that which you do not know?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 7\n        },\n        \"text\" : \"A group [of you] He guided, and a group deserved [to be in] error. Indeed, they had taken the devils as allies instead of Allah while they thought that they were guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 7\n        },\n        \"text\" : \"Say, \\\"Who has forbidden the adornment of Allah which He has produced for His servants and the good [lawful] things of provision?\\\" Say, \\\"They are for those who believe during the worldly life [but] exclusively for them on the Day of Resurrection.\\\" Thus do We detail the verses for a people who know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 7\n        },\n        \"text\" : \"Say, \\\"My Lord has only forbidden immoralities -  what is apparent of them and what is concealed -  and sin, and oppression without right, and that you associate with Allah that for which He has not sent down authority, and that you say about Allah that which you do not know.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 7\n        },\n        \"text\" : \"O children of Adam, if there come to you messengers from among you relating to you My verses, then whoever fears Allah and reforms -  there will be no fear concerning them, nor will they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 7\n        },\n        \"text\" : \"But the ones who deny Our verses and are arrogant toward them -  those are the companions of the Fire; they will abide therein eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 7\n        },\n        \"text\" : \"And who is more unjust than one who invents about Allah a lie or denies His verses? Those will attain their portion of the decree until when Our messengers come to them to take them in death, they will say, \\\"Where are those you used to invoke besides Allah ?\\\" They will say, \\\"They have departed from us,\\\" and will bear witness against themselves that they were disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 7\n        },\n        \"text\" : \"[ Allah ] will say, \\\"Enter among nations which had passed on before you of jinn and mankind into the Fire.\\\" Every time a nation enters, it will curse its sister until, when they have all overtaken one another therein, the last of them will say about the first of them \\\"Our Lord, these had misled us, so give them a double punishment of the Fire. He will say, \\\"For each is double, but you do not know.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 7\n        },\n        \"text\" : \"But those who believed and did righteous deeds -  We charge no soul except [within] its capacity. Those are the companions of Paradise; they will abide therein eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 7\n        },\n        \"text\" : \"And We will have removed whatever is within their breasts of resentment, [while] flowing beneath them are rivers. And they will say, \\\"Praise to Allah, who has guided us to this; and we would never have been guided if Allah had not guided us. Certainly the messengers of our Lord had come with the truth.\\\" And they will be called, \\\"This is Paradise, which you have been made to inherit for what you used to do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 7\n        },\n        \"text\" : \"And the companions of Paradise will call out to the companions of the Fire, \\\"We have already found what our Lord promised us to be true. Have you found what your Lord promised to be true?\\\" They will say, \\\"Yes.\\\" Then an announcer will announce among them, \\\"The curse of Allah shall be upon the wrongdoers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 7\n        },\n        \"text\" : \"Who averted [people] from the way of Allah and sought to make it [seem] deviant while they were, concerning the Hereafter, disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 7\n        },\n        \"text\" : \"And between them will be a partition, and on [its] elevations are men who recognize all by their mark. And they call out to the companions of Paradise, \\\"Peace be upon you.\\\" They have not [yet] entered it, but they long intensely.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 7\n        },\n        \"text\" : \"And the companions of the Elevations will call to men [within Hell] whom they recognize by their mark, saying, \\\"Of no avail to you was your gathering and [the fact] that you were arrogant.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 7\n        },\n        \"text\" : \"[ Allah will say], \\\"Are these the ones whom you [inhabitants of Hell] swore that Allah would never offer them mercy? Enter Paradise, [O People of the Elevations]. No fear will there be concerning you, nor will you grieve.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 7\n        },\n        \"text\" : \"And the companions of the Fire will call to the companions of Paradise, \\\"Pour upon us some water or from whatever Allah has provided you.\\\" They will say, \\\"Indeed, Allah has forbidden them both to the disbelievers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 7\n        },\n        \"text\" : \"Indeed, your Lord is Allah, who created the heavens and earth in six days and then established Himself above the Throne. He covers the night with the day, [another night] chasing it rapidly; and [He created] the sun, the moon, and the stars, subjected by His command. Unquestionably, His is the creation and the command; blessed is Allah, Lord of the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 7\n        },\n        \"text\" : \"Call upon your Lord in humility and privately; indeed, He does not like transgressors.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 7\n        },\n        \"text\" : \"And cause not corruption upon the earth after its reformation. And invoke Him in fear and aspiration. Indeed, the mercy of Allah is near to the doers of good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 7\n        },\n        \"text\" : \"And it is He who sends the winds as good tidings before His mercy until, when they have carried heavy rainclouds, We drive them to a dead land and We send down rain therein and bring forth thereby [some] of all the fruits. Thus will We bring forth the dead; perhaps you may be reminded.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 7\n        },\n        \"text\" : \"We had certainly sent Noah to his people, and he said, \\\"O my people, worship Allah ; you have no deity other than Him. Indeed, I fear for you the punishment of a tremendous Day.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 7\n        },\n        \"text\" : \"I convey to you the messages of my Lord and advise you; and I know from Allah what you do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 7\n        },\n        \"text\" : \"Then do you wonder that there has come to you a reminder from your Lord through a man from among you, that he may warn you and that you may fear Allah so you might receive mercy.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 7\n        },\n        \"text\" : \"And to the 'Aad [We sent] their brother Hud. He said, \\\"O my people, worship Allah ; you have no deity other than Him. Then will you not fear Him?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 7\n        },\n        \"text\" : \"Then do you wonder that there has come to you a reminder from your Lord through a man from among you, that he may warn you? And remember when He made you successors after the people of Noah and increased you in stature extensively. So remember the favors of Allah that you might succeed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 7\n        },\n        \"text\" : \"They said, \\\"Have you come to us that we should worship Allah alone and leave what our fathers have worshipped? Then bring us what you promise us, if you should be of the truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 7\n        },\n        \"text\" : \"[Hud] said, \\\"Already have defilement and anger fallen upon you from your Lord. Do you dispute with me concerning [mere] names you have named them, you and your fathers, for which Allah has not sent down any authority? Then wait; indeed, I am with you among those who wait.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 7\n        },\n        \"text\" : \"So We saved him and those with him by mercy from Us. And We eliminated those who denied Our signs, and they were not [at all] believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 7\n        },\n        \"text\" : \"And to the Thamud [We sent] their brother Salih. He said, \\\"O my people, worship Allah ; you have no deity other than Him. There has come to you clear evidence from your Lord. This is the she-camel of Allah [sent] to you as a sign. So leave her to eat within Allah 's land and do not touch her with harm, lest there seize you a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 7\n        },\n        \"text\" : \"And remember when He made you successors after the 'Aad and settled you in the land, [and] you take for yourselves palaces from its plains and carve from the mountains, homes. Then remember the favors of Allah and do not commit abuse on the earth, spreading corruption.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 7\n        },\n        \"text\" : \"Said the eminent ones who were arrogant among his people to those who were oppressed -  to those who believed among them, \\\"Do you [actually] know that Salih is sent from his Lord?\\\" They said, \\\"Indeed we, in that with which he was sent, are believers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 7\n        },\n        \"text\" : \"So the earthquake seized them, and they became within their home [corpses] fallen prone.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 7\n        },\n        \"text\" : \"And to [the people of] Madyan [We sent] their brother Shu'ayb. He said, \\\"O my people, worship Allah ; you have no deity other than Him. There has come to you clear evidence from your Lord. So fulfill the measure and weight and do not deprive people of their due and cause not corruption upon the earth after its reformation. That is better for you, if you should be believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 7\n        },\n        \"text\" : \"And do not sit on every path, threatening and averting from the way of Allah those who believe in Him, seeking to make it [seem] deviant. And remember when you were few and He increased you. And see how was the end of the corrupters.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 7\n        },\n        \"text\" : \"And if there should be a group among you who has believed in that with which I have been sent and a group that has not believed, then be patient until Allah judges between us. And He is the best of judges.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 7\n        },\n        \"text\" : \"We would have invented against Allah a lie if we returned to your religion after Allah had saved us from it. And it is not for us to return to it except that Allah, our Lord, should will. Our Lord has encompassed all things in knowledge. Upon Allah we have relied. Our Lord, decide between us and our people in truth, and You are the best of those who give decision.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 7\n        },\n        \"text\" : \"So the earthquake seized them, and they became within their home [corpses] fallen prone.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 7\n        },\n        \"text\" : \"And We sent to no city a prophet [who was denied] except that We seized its people with poverty and hardship that they might humble themselves [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 7\n        },\n        \"text\" : \"And if only the people of the cities had believed and feared Allah, We would have opened upon them blessings from the heaven and the earth; but they denied [the messengers], so We seized them for what they were earning.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 7\n        },\n        \"text\" : \"Then did they feel secure from the plan of Allah ? But no one feels secure from the plan of Allah except the losing people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 7\n        },\n        \"text\" : \"Those cities -  We relate to you, [O Muhammad], some of their news. And certainly did their messengers come to them with clear proofs, but they were not to believe in that which they had denied before. Thus does Allah seal over the hearts of the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 7\n        },\n        \"text\" : \"[Who is] obligated not to say about Allah except the truth. I have come to you with clear evidence from your Lord, so send with me the Children of Israel.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 120,\n          \"sura\" : 7\n        },\n        \"text\" : \"And the magicians fell down in prostration [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 124,\n          \"sura\" : 7\n        },\n        \"text\" : \"I will surely cut off your hands and your feet on opposite sides; then I will surely crucify you all.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 128,\n          \"sura\" : 7\n        },\n        \"text\" : \"Said Moses to his people, \\\"Seek help through Allah and be patient. Indeed, the earth belongs to Allah . He causes to inherit it whom He wills of His servants. And the [best] outcome is for the righteous.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 131,\n          \"sura\" : 7\n        },\n        \"text\" : \"But when good came to them, they said, \\\"This is ours [by right].\\\" And if a bad [condition] struck them, they saw an evil omen in Moses and those with him. Unquestionably, their fortune is with Allah, but most of them do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 137,\n          \"sura\" : 7\n        },\n        \"text\" : \"And We caused the people who had been oppressed to inherit the eastern regions of the land and the western ones, which We had blessed. And the good word of your Lord was fulfilled for the Children of Israel because of what they had patiently endured. And We destroyed [all] that Pharaoh and his people were producing and what they had been building.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 140,\n          \"sura\" : 7\n        },\n        \"text\" : \"He said, \\\"Is it other than Allah I should desire for you as a god while He has preferred you over the worlds?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 141,\n          \"sura\" : 7\n        },\n        \"text\" : \"And [recall, O Children of Israel], when We saved you from the people of Pharaoh, [who were] afflicting you with the worst torment -  killing your sons and keeping your women alive. And in that was a great trial from your Lord.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 143,\n          \"sura\" : 7\n        },\n        \"text\" : \"And when Moses arrived at Our appointed time and his Lord spoke to him, he said, \\\"My Lord, show me [Yourself] that I may look at You.\\\" [ Allah ] said, \\\"You will not see Me, but look at the mountain; if it should remain in place, then you will see Me.\\\" But when his Lord appeared to the mountain, He rendered it level, and Moses fell unconscious. And when he awoke, he said, \\\"Exalted are You! I have repented to You, and I am the first of the believers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 144,\n          \"sura\" : 7\n        },\n        \"text\" : \"[ Allah ] said, \\\"O Moses, I have chosen you over the people with My messages and My words [to you]. So take what I have given you and be among the grateful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 145,\n          \"sura\" : 7\n        },\n        \"text\" : \"And We wrote for him on the tablets [something] of all things -  instruction and explanation for all things, [saying], \\\"Take them with determination and order your people to take the best of it. I will show you the home of the defiantly disobedient.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 156,\n          \"sura\" : 7\n        },\n        \"text\" : \"And decree for us in this world [that which is] good and [also] in the Hereafter; indeed, we have turned back to You.\\\" [ Allah ] said, \\\"My punishment -  I afflict with it whom I will, but My mercy encompasses all things.\\\" So I will decree it [especially] for those who fear Me and give zakah and those who believe in Our verses -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 158,\n          \"sura\" : 7\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"O mankind, indeed I am the Messenger of Allah to you all, [from Him] to whom belongs the dominion of the heavens and the earth. There is no deity except Him; He gives life and causes death.\\\" So believe in Allah and His Messenger, the unlettered prophet, who believes in Allah and His words, and follow him that you may be guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 164,\n          \"sura\" : 7\n        },\n        \"text\" : \"And when a community among them said, \\\"Why do you advise [or warn] a people whom Allah is [about] to destroy or to punish with a severe punishment?\\\" they [the advisors] said, \\\"To be absolved before your Lord and perhaps they may fear Him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 169,\n          \"sura\" : 7\n        },\n        \"text\" : \"And there followed them successors who inherited the Scripture [while] taking the commodities of this lower life and saying, \\\"It will be forgiven for us.\\\" And if an offer like it comes to them, they will [again] take it. Was not the covenant of the Scripture taken from them that they would not say about Allah except the truth, and they studied what was in it? And the home of the Hereafter is better for those who fear Allah, so will you not use reason?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 170,\n          \"sura\" : 7\n        },\n        \"text\" : \"But those who hold fast to the Book and establish prayer -  indeed, We will not allow to be lost the reward of the reformers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 171,\n          \"sura\" : 7\n        },\n        \"text\" : \"And [mention] when We raised the mountain above them as if it was a dark cloud and they were certain that it would fall upon them, [and Allah said], \\\"Take what We have given you with determination and remember what is in it that you might fear Allah .\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 173,\n          \"sura\" : 7\n        },\n        \"text\" : \"Or [lest] you say, \\\"It was only that our fathers associated [others in worship] with Allah before, and we were but descendants after them. Then would You destroy us for what the falsifiers have done?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 178,\n          \"sura\" : 7\n        },\n        \"text\" : \"Whoever Allah guides -  he is the [rightly] guided; and whoever He sends astray -  it is those who are the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 180,\n          \"sura\" : 7\n        },\n        \"text\" : \"And to Allah belong the best names, so invoke Him by them. And leave [the company of] those who practice deviation concerning His names. They will be recompensed for what they have been doing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 185,\n          \"sura\" : 7\n        },\n        \"text\" : \"Do they not look into the realm of the heavens and the earth and everything that Allah has created and [think] that perhaps their appointed time has come near? So in what statement hereafter will they believe?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 186,\n          \"sura\" : 7\n        },\n        \"text\" : \"Whoever Allah sends astray -  there is no guide for him. And He leaves them in their transgression, wandering blindly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 187,\n          \"sura\" : 7\n        },\n        \"text\" : \"They ask you, [O Muhammad], about the Hour: when is its arrival? Say, \\\"Its knowledge is only with my Lord. None will reveal its time except Him. It lays heavily upon the heavens and the earth. It will not come upon you except unexpectedly.\\\" They ask you as if you are familiar with it. Say, \\\"Its knowledge is only with Allah, but most of the people do not know.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 188,\n          \"sura\" : 7\n        },\n        \"text\" : \"Say, \\\"I hold not for myself [the power of] benefit or harm, except what Allah has willed. And if I knew the unseen, I could have acquired much wealth, and no harm would have touched me. I am not except a warner and a bringer of good tidings to a people who believe.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 189,\n          \"sura\" : 7\n        },\n        \"text\" : \"It is He who created you from one soul and created from it its mate that he might dwell in security with her. And when he covers her, she carries a light burden and continues therein. And when it becomes heavy, they both invoke Allah, their Lord, \\\"If You should give us a good [child], we will surely be among the grateful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 190,\n          \"sura\" : 7\n        },\n        \"text\" : \"But when He gives them a good [child], they ascribe partners to Him concerning that which He has given them. Exalted is Allah above what they associate with Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 193,\n          \"sura\" : 7\n        },\n        \"text\" : \"And if you [believers] invite them to guidance, they will not follow you. It is all the same for you whether you invite them or you are silent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 194,\n          \"sura\" : 7\n        },\n        \"text\" : \"Indeed, those you [polytheists] call upon besides Allah are servants like you. So call upon them and let them respond to you, if you should be truthful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 195,\n          \"sura\" : 7\n        },\n        \"text\" : \"Do they have feet by which they walk? Or do they have hands by which they strike? Or do they have eyes by which they see? Or do they have ears by which they hear? Say, [O Muhammad], \\\"Call your 'partners' and then conspire against me and give me no respite.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 196,\n          \"sura\" : 7\n        },\n        \"text\" : \"Indeed, my protector is Allah, who has sent down the Book; and He is an ally to the righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 197,\n          \"sura\" : 7\n        },\n        \"text\" : \"And those you call upon besides Him are unable to help you, nor can they help themselves.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 200,\n          \"sura\" : 7\n        },\n        \"text\" : \"And if an evil suggestion comes to you from Satan, then seek refuge in Allah . Indeed, He is Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 201,\n          \"sura\" : 7\n        },\n        \"text\" : \"Indeed, those who fear Allah -  when an impulse touches them from Satan, they remember [Him] and at once they have insight.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 8\n        },\n        \"text\" : \"They ask you, [O Muhammad], about the bounties [of war]. Say, \\\"The [decision concerning] bounties is for Allah and the Messenger.\\\"  So fear Allah and amend that which is between you and obey Allah and His Messenger, if you should be believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 8\n        },\n        \"text\" : \"The believers are only those who, when Allah is mentioned, their hearts become fearful, and when His verses are recited to them, it increases them in faith; and upon their Lord they rely -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 8\n        },\n        \"text\" : \"[Remember, O believers], when Allah promised you one of the two groups -  that it would be yours -  and you wished that the unarmed one would be yours.  But Allah intended to establish the truth by His words and to eliminate the disbelievers\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 8\n        },\n        \"text\" : \"And Allah made it not but good tidings and so that your hearts would be assured thereby.  And victory is not but from Allah . Indeed, Allah is Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 8\n        },\n        \"text\" : \"That is because they opposed Allah and His Messenger. And whoever opposes Allah and His Messenger -  indeed, Allah is severe in penalty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 8\n        },\n        \"text\" : \"And whoever turns his back to them on such a day, unless swerving [as a strategy] for war or joining [another] company, has certainly returned with anger [upon him] from Allah, and his refuge is Hell -  and wretched is the destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 8\n        },\n        \"text\" : \"And you did not kill them, but it was Allah who killed them. And you threw not, [O Muhammad], when you threw, but it was Allah who threw that He might test the believers with a good test. Indeed, Allah is Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 8\n        },\n        \"text\" : \"That [is so], and [also] that Allah will weaken the plot of the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 8\n        },\n        \"text\" : \"If you [disbelievers] seek the victory -  the defeat has come to you. And if you desist [from hostilities], it is best for you; but if you return [to war], We will return, and never will you be availed by your [large] company at all, even if it should increase; and [that is] because Allah is with the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 8\n        },\n        \"text\" : \"O you who have believed, obey Allah and His Messenger and do not turn from him while you hear [his order].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 8\n        },\n        \"text\" : \"Indeed, the worst of living creatures in the sight of Allah are the deaf and dumb who do not use reason.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 8\n        },\n        \"text\" : \"Had Allah known any good in them, He would have made them hear. And if He had made them hear, they would [still] have turned away, while they were refusing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 8\n        },\n        \"text\" : \"O you who have believed, respond to Allah and to the Messenger when he calls you to that which gives you life. And know that Allah intervenes between a man and his heart and that to Him you will be gathered.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 8\n        },\n        \"text\" : \"And fear a trial which will not strike those who have wronged among you exclusively, and know that Allah is severe in penalty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 8\n        },\n        \"text\" : \"O you who have believed, do not betray Allah and the Messenger or betray your trusts while you know [the consequence].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 8\n        },\n        \"text\" : \"And know that your properties and your children are but a trial and that Allah has with Him a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 8\n        },\n        \"text\" : \"O you who have believed, if you fear Allah, He will grant you a criterion and will remove from you your misdeeds and forgive you. And Allah is the possessor of great bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 8\n        },\n        \"text\" : \"And [remember, O Muhammad], when those who disbelieved plotted against you to restrain you or kill you or evict you [from Makkah]. But they plan, and Allah plans. And Allah is the best of planners.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 8\n        },\n        \"text\" : \"And [remember] when they said, \\\"O Allah, if this should be the truth from You, then rain down upon us stones from the sky or bring us a painful punishment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 8\n        },\n        \"text\" : \"But Allah would not punish them while you, [O Muhammad], are among them, and Allah would not punish them while they seek forgiveness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 8\n        },\n        \"text\" : \"But why should Allah not punish them while they obstruct [people] from al-Masjid al- Haram and they were not [fit to be] its guardians? Its [true] guardians are not but the righteous, but most of them do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 8\n        },\n        \"text\" : \"Indeed, those who disbelieve spend their wealth to avert [people] from the way of Allah . So they will spend it; then it will be for them a [source of] regret; then they will be overcome. And those who have disbelieved -  unto Hell they will be gathered.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 8\n        },\n        \"text\" : \"[This is] so that Allah may distinguish the wicked from the good and place the wicked some of them upon others and heap them all together and put them into Hell. It is those who are the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 8\n        },\n        \"text\" : \"And fight them until there is no fitnah and [until] the religion, all of it, is for Allah . And if they cease -  then indeed, Allah is Seeing of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 8\n        },\n        \"text\" : \"But if they turn away -  then know that Allah is your protector. Excellent is the protector, and Excellent is the helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 8\n        },\n        \"text\" : \"And know that anything you obtain of war booty -  then indeed, for Allah is one fifth of it and for the Messenger and for [his] near relatives and the orphans, the needy, and the [stranded] traveler, if you have believed in Allah and in that which We sent down to Our Servant on the day of criterion  -  the day when the two armies met. And Allah, over all things, is competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 8\n        },\n        \"text\" : \"[Remember] when you were on the near side of the valley, and they were on the farther side, and the caravan was lower [in position] than you. If you had made an appointment [to meet], you would have missed the appointment.  But [it was] so that Allah might accomplish a matter already destined -  that those who perished [through disbelief] would perish upon evidence and those who lived [in faith] would live upon evidence; and indeed, Allah is Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 8\n        },\n        \"text\" : \"[Remember, O Muhammad], when Allah showed them to you in your dream as few; and if He had shown them to you as many, you [believers] would have lost courage and would have disputed in the matter [of whether to fight], but Allah saved [you from that]. Indeed, He is Knowing of that within the breasts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 8\n        },\n        \"text\" : \"And [remember] when He showed them to you, when you met, as few in your eyes, and He made you [appear] as few in their eyes so that Allah might accomplish a matter already destined.  And to Allah are [all] matters returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 8\n        },\n        \"text\" : \"O you who have believed, when you encounter a company [from the enemy forces], stand firm and remember Allah much that you may be successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 8\n        },\n        \"text\" : \"And obey Allah and His Messenger, and do not dispute and [thus] lose courage and [then] your strength would depart; and be patient.  Indeed, Allah is with the patient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 8\n        },\n        \"text\" : \"And do not be like those who came forth from their homes insolently and to be seen by people and avert [them] from the way of Allah . And Allah is encompassing of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 8\n        },\n        \"text\" : \"And [remember] when Satan made their deeds pleasing to them and said, \\\"No one can overcome you today from among the people, and indeed, I am your protector.\\\" But when the two armies sighted each other, he turned on his heels and said, \\\"Indeed, I am disassociated from you.  Indeed, I see what you do not see; indeed I fear Allah . And Allah is severe in penalty.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 8\n        },\n        \"text\" : \"[Remember] when the hypocrites and those in whose hearts was disease said, \\\"Their religion has deluded those [Muslims].\\\" But whoever relies upon Allah -  then indeed, Allah is Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 8\n        },\n        \"text\" : \"That is for what your hands have put forth [of evil] and because Allah is not ever unjust to His servants.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 8\n        },\n        \"text\" : \"[Theirs is] like the custom of the people of Pharaoh and of those before them.  They disbelieved in the signs of Allah, so Allah seized them for their sins.  Indeed, Allah is Powerful and severe in penalty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 8\n        },\n        \"text\" : \"That is because Allah would not change a favor which He had bestowed upon a people until they change what is within themselves. And indeed, Allah is Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 8\n        },\n        \"text\" : \"[Theirs is] like the custom of the people of Pharaoh and of those before them.  They denied the signs of their Lord, so We destroyed them for their sins, and We drowned the people of Pharaoh. And all [of them] were wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 8\n        },\n        \"text\" : \"Indeed, the worst of living creatures in the sight of Allah are those who have disbelieved, and they will not [ever] believe -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 8\n        },\n        \"text\" : \"The ones with whom you made a treaty but then they break their pledge every time, and they do not fear Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 8\n        },\n        \"text\" : \"If you [have reason to] fear from a people betrayal, throw [their treaty] back to them, [putting you] on equal terms. Indeed, Allah does not like traitors.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 8\n        },\n        \"text\" : \"And let not those who disbelieve think they will escape. Indeed, they will not cause failure [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 8\n        },\n        \"text\" : \"And prepare against them whatever you are able of power and of steeds of war by which you may terrify the enemy of Allah and your enemy and others besides them whom you do not know [but] whom Allah knows. And whatever you spend in the cause of Allah will be fully repaid to you, and you will not be wronged.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 8\n        },\n        \"text\" : \"And if they incline to peace, then incline to it [also] and rely upon Allah . Indeed, it is He who is the Hearing, the Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 8\n        },\n        \"text\" : \"But if they intend to deceive you -  then sufficient for you is Allah . It is He who supported you with His help and with the believers\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 8\n        },\n        \"text\" : \"And brought together their hearts. If you had spent all that is in the earth, you could not have brought their hearts together; but Allah brought them together.  Indeed, He is Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 8\n        },\n        \"text\" : \"O Prophet, sufficient for you is Allah and for whoever follows you of the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 8\n        },\n        \"text\" : \"Now, Allah has lightened [the hardship] for you, and He knows that among you is weakness. So if there are from you one hundred [who are] steadfast, they will overcome two hundred.  And if there are among you a thousand, they will overcome two thousand by permission of Allah . And Allah is with the steadfast.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 8\n        },\n        \"text\" : \"It is not for a prophet to have captives [of war] until he inflicts a massacre [upon Allah 's enemies] in the land. Some Muslims desire the commodities of this world, but Allah desires [for you] the Hereafter. And Allah is Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 8\n        },\n        \"text\" : \"If not for a decree from Allah that preceded, you would have been touched for what you took by a great punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 8\n        },\n        \"text\" : \"So consume what you have taken of war booty [as being] lawful and good, and fear Allah . Indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 8\n        },\n        \"text\" : \"O Prophet, say to whoever is in your hands of the captives, \\\"If Allah knows [any] good in your hearts, He will give you [something] better than what was taken from you, and He will forgive you; and Allah is Forgiving and Merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 8\n        },\n        \"text\" : \"But if they intend to betray you -  then they have already betrayed Allah before, and He empowered [you] over them. And Allah is Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 8\n        },\n        \"text\" : \"Indeed, those who have believed and emigrated and fought with their wealth and lives in the cause of Allah and those who gave shelter and aided -  they are allies of one another. But those who believed and did not emigrate -  for you there is no guardianship of them until they emigrate. And if they seek help of you for the religion, then you must help, except against a people between yourselves and whom is a treaty. And Allah is Seeing of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 8\n        },\n        \"text\" : \"And those who disbelieved are allies of one another. If you do not do so, there will be fitnah on earth and great corruption.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 8\n        },\n        \"text\" : \"But those who have believed and emigrated and fought in the cause of Allah and those who gave shelter and aided -  it is they who are the believers, truly.  For them is forgiveness and noble provision.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 8\n        },\n        \"text\" : \"And those who believed after [the initial emigration] and emigrated and fought with you -  they are of you. But those of [blood] relationship are more entitled [to inheritance] in the decree of Allah . Indeed, Allah is Knowing of all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 9\n        },\n        \"text\" : \"[This is a declaration of] disassociation, from Allah and His Messenger, to those with whom you had made a treaty among the polytheists.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 9\n        },\n        \"text\" : \"So travel freely, [O disbelievers], throughout the land [during] four months but know that you cannot cause failure to Allah and that Allah will disgrace the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 9\n        },\n        \"text\" : \"And [it is] an announcement from Allah and His Messenger to the people on the day of the greater pilgrimage that Allah is disassociated from the disbelievers, and [so is] His Messenger. So if you repent, that is best for you; but if you turn away -  then know that you will not cause failure to Allah . And give tidings to those who disbelieve of a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 9\n        },\n        \"text\" : \"Excepted are those with whom you made a treaty among the polytheists and then they have not been deficient toward you in anything or supported anyone against you; so complete for them their treaty until their term [has ended]. Indeed, Allah loves the righteous [who fear Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 9\n        },\n        \"text\" : \"And when the sacred months have passed, then kill the polytheists wherever you find them and capture them and besiege them and sit in wait for them at every place of ambush. But if they should repent, establish prayer, and give zakah, let them [go] on their way. Indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 9\n        },\n        \"text\" : \"And if any one of the polytheists seeks your protection, then grant him protection so that he may hear the words of Allah . Then deliver him to his place of safety. That is because they are a people who do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 9\n        },\n        \"text\" : \"How can there be for the polytheists a treaty in the sight of Allah and with His Messenger, except for those with whom you made a treaty at al-Masjid al-Haram? So as long as they are upright toward you, be upright toward them. Indeed, Allah loves the righteous [who fear Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 9\n        },\n        \"text\" : \"They have exchanged the signs of Allah for a small price and averted [people] from His way. Indeed, it was evil that they were doing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 9\n        },\n        \"text\" : \"Would you not fight a people who broke their oaths and determined to expel the Messenger, and they had begun [the attack upon] you the first time? Do you fear them? But Allah has more right that you should fear Him, if you are [truly] believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 9\n        },\n        \"text\" : \"Fight them; Allah will punish them by your hands and will disgrace them and give you victory over them and satisfy the breasts of a believing people\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 9\n        },\n        \"text\" : \"And remove the fury in the believers' hearts. And Allah turns in forgiveness to whom He wills; and Allah is Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 9\n        },\n        \"text\" : \"Do you think that you will be left [as you are] while Allah has not yet made evident those among you who strive [for His cause] and do not take other than Allah, His Messenger and the believers as intimates?  And Allah is Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 9\n        },\n        \"text\" : \"It is not for the polytheists to maintain the mosques of Allah [while] witnessing against themselves with disbelief. [For] those, their deeds have become worthless, and in the Fire they will abide eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 9\n        },\n        \"text\" : \"The mosques of Allah are only to be maintained by those who believe in Allah and the Last Day and establish prayer and give zakah and do not fear except Allah, for it is expected that those will be of the [rightly] guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 9\n        },\n        \"text\" : \"Have you made the providing of water for the pilgrim and the maintenance of al-Masjid al-Haram equal to [the deeds of] one who believes in Allah and the Last Day and strives in the cause of Allah ? They are not equal in the sight of Allah . And Allah does not guide the wrongdoing people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 9\n        },\n        \"text\" : \"The ones who have believed, emigrated and striven in the cause of Allah with their wealth and their lives are greater in rank in the sight of Allah . And it is those who are the attainers [of success].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 9\n        },\n        \"text\" : \"[They will be] abiding therein forever. Indeed, Allah has with Him a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 9\n        },\n        \"text\" : \"O you who have believed, do not take your fathers or your brothers as allies if they have preferred disbelief over belief. And whoever does so among you -  then it is those who are the wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 9\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"If your fathers, your sons, your brothers, your wives, your relatives, wealth which you have obtained, commerce wherein you fear decline, and dwellings with which you are pleased are more beloved to you than Allah and His Messenger and jihad in His cause, then wait until Allah executes His command. And Allah does not guide the defiantly disobedient people.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 9\n        },\n        \"text\" : \"Allah has already given you victory in many regions and [even] on the day of Hunayn, when your great number pleased you, but it did not avail you at all, and the earth was confining for you with its vastness; then you turned back, fleeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 9\n        },\n        \"text\" : \"Then Allah sent down His tranquillity upon His Messenger and upon the believers and sent down soldiers angels whom you did not see and punished those who disbelieved. And that is the recompense of the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 9\n        },\n        \"text\" : \"Then Allah will accept repentance after that for whom He wills; and Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 9\n        },\n        \"text\" : \"O you who have believed, indeed the polytheists are unclean, so let them not approach al-Masjid al-Haram after this, their [final] year. And if you fear privation, Allah will enrich you from His bounty if He wills. Indeed, Allah is Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 9\n        },\n        \"text\" : \"Fight those who do not believe in Allah or in the Last Day and who do not consider unlawful what Allah and His Messenger have made unlawful and who do not adopt the religion of truth from those who were given the Scripture -  [fight] until they give the jizyah willingly while they are humbled.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 9\n        },\n        \"text\" : \"The Jews say, \\\"Ezra is the son of Allah \\\"; and the Christians say, \\\"The Messiah is the son of Allah .\\\" That is their statement from their mouths; they imitate the saying of those who disbelieved [before them]. May Allah destroy them; how are they deluded?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 9\n        },\n        \"text\" : \"They have taken their scholars and monks as lords besides Allah, and [also] the Messiah, the son of Mary. And they were not commanded except to worship one God; there is no deity except Him. Exalted is He above whatever they associate with Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 9\n        },\n        \"text\" : \"They want to extinguish the light of Allah with their mouths, but Allah refuses except to perfect His light, although the disbelievers dislike it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 9\n        },\n        \"text\" : \"It is He who has sent His Messenger with guidance and the religion of truth to manifest it over all religion, although they who associate others with Allah dislike it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 9\n        },\n        \"text\" : \"O you who have believed, indeed many of the scholars and the monks devour the wealth of people unjustly and avert [them] from the way of Allah . And those who hoard gold and silver and spend it not in the way of Allah -  give them tidings of a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 9\n        },\n        \"text\" : \"Indeed, the number of months with Allah is twelve [lunar] months in the register of Allah [from] the day He created the heavens and the earth; of these, four are sacred. That is the correct religion, so do not wrong yourselves during them. And fight against the disbelievers collectively as they fight against you collectively. And know that Allah is with the righteous [who fear Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 9\n        },\n        \"text\" : \"Indeed, the postponing [of restriction within sacred months] is an increase in disbelief by which those who have disbelieved are led [further] astray. They make it lawful one year and unlawful another year to correspond to the number made unlawful by Allah and [thus] make lawful what Allah has made unlawful.  Made pleasing to them is the evil of their deeds; and Allah does not guide the disbelieving people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 9\n        },\n        \"text\" : \"O you who have believed, what is [the matter] with you that, when you are told to go forth in the cause of Allah, you adhere heavily to the earth?  Are you satisfied with the life of this world rather than the Hereafter? But what is the enjoyment of worldly life compared to the Hereafter except a [very] little.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 9\n        },\n        \"text\" : \"If you do not go forth, He will punish you with a painful punishment and will replace you with another people, and you will not harm Him at all. And Allah is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 9\n        },\n        \"text\" : \"If you do not aid the Prophet - Allah has already aided him when those who disbelieved had driven him out [of Makkah] as one of two, when they were in the cave and he said to his companion, \\\"Do not grieve; indeed Allah is with us.\\\" And Allah sent down his tranquillity upon him and supported him with angels you did not see and made the word of those who disbelieved the lowest, while the word of Allah -  that is the highest. And Allah is Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 9\n        },\n        \"text\" : \"Go forth, whether light or heavy, and strive with your wealth and your lives in the cause of Allah . That is better for you, if you only knew.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 9\n        },\n        \"text\" : \"Had it been an easy gain and a moderate trip, the hypocrites would have followed you, but distant to them was the journey. And they will swear by Allah, \\\"If we were able, we would have gone forth with you,\\\" destroying themselves [through false oaths], and Allah knows that indeed they are liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 9\n        },\n        \"text\" : \"May Allah pardon you, [O Muhammad]; why did you give them permission [to remain behind]?  [You should not have] until it was evident to you who were truthful and you knew [who were] the liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 9\n        },\n        \"text\" : \"Those who believe in Allah and the Last Day would not ask permission of you to be excused from striving with their wealth and their lives. And Allah is Knowing of those who fear Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 9\n        },\n        \"text\" : \"Only those would ask permission of you who do not believe in Allah and the Last Day and whose hearts have doubted, and they, in their doubt, are hesitating.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 9\n        },\n        \"text\" : \"And if they had intended to go forth, they would have prepared for it [some] preparation. But Allah disliked their being sent, so He kept them back, and they were told, \\\"Remain [behind] with those who remain.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 9\n        },\n        \"text\" : \"Had they gone forth with you, they would not have increased you except in confusion, and they would have been active among you, seeking [to cause] you fitnah. And among you are avid listeners to them. And Allah is Knowing of the wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 9\n        },\n        \"text\" : \"They had already desired dissension before and had upset matters for you until the truth came and the ordinance of Allah appeared, while they were averse.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 9\n        },\n        \"text\" : \"And among them is he who says, \\\"Permit me [to remain at home] and do not put me to trial.\\\" Unquestionably, into trial they have fallen. And indeed, Hell will encompass the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 9\n        },\n        \"text\" : \"If good befalls you, it distresses them; but if disaster strikes you, they say, \\\"We took our matter [in hand] before,\\\" and turn away while they are rejoicing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 9\n        },\n        \"text\" : \"Say, \\\"Never will we be struck except by what Allah has decreed for us; He is our protector.\\\" And upon Allah let the believers rely.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 9\n        },\n        \"text\" : \"Say, \\\"Do you await for us except one of the two best things while we await for you that Allah will afflict you with punishment from Himself or at our hands? So wait; indeed we, along with you, are waiting.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 9\n        },\n        \"text\" : \"And what prevents their expenditures from being accepted from them but that they have disbelieved in Allah and in His Messenger and that they come not to prayer except while they are lazy and that they do not spend except while they are unwilling.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 9\n        },\n        \"text\" : \"So let not their wealth or their children impress you. Allah only intends to punish them through them in worldly life and that their souls should depart [at death] while they are disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 9\n        },\n        \"text\" : \"And they swear by Allah that they are from among you while they are not from among you; but they are a people who are afraid.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 9\n        },\n        \"text\" : \"If only they had been satisfied with what Allah and His Messenger gave them and said, \\\"Sufficient for us is Allah ; Allah will give us of His bounty, and [so will] His Messenger; indeed, we are desirous toward Allah,\\\" [it would have been better for them].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 9\n        },\n        \"text\" : \"Zakah expenditures are only for the poor and for the needy and for those employed to collect [zakah] and for bringing hearts together [for Islam] and for freeing captives [or slaves] and for those in debt and for the cause of Allah and for the [stranded] traveler - an obligation [imposed] by Allah . And Allah is Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 9\n        },\n        \"text\" : \"And among them are those who abuse the Prophet and say, \\\"He is an ear.\\\" Say, \\\"[It is] an ear of goodness for you that believes in Allah and believes the believers and [is] a mercy to those who believe among you.\\\" And those who abuse the Messenger of Allah - for them is a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 9\n        },\n        \"text\" : \"They swear by Allah to you [Muslims] to satisfy you. But Allah and His Messenger are more worthy for them to satisfy, if they should be believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 9\n        },\n        \"text\" : \"Do they not know that whoever opposes Allah and His Messenger -  that for him is the fire of Hell, wherein he will abide eternally? That is the great disgrace.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 9\n        },\n        \"text\" : \"They hypocrites are apprehensive lest a surah be revealed about them, informing them of what is in their hearts. Say, \\\"Mock [as you wish]; indeed, Allah will expose that which you fear.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 9\n        },\n        \"text\" : \"And if you ask them, they will surely say, \\\"We were only conversing and playing.\\\" Say, \\\"Is it Allah and His verses and His Messenger that you were mocking?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 9\n        },\n        \"text\" : \"The hypocrite men and hypocrite women are of one another. They enjoin what is wrong and forbid what is right and close their hands. They have forgotten Allah, so He has forgotten them [accordingly]. Indeed, the hypocrites -  it is they who are the defiantly disobedient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 9\n        },\n        \"text\" : \"Allah has promised the hypocrite men and hypocrite women and the disbelievers the fire of Hell, wherein they will abide eternally. It is sufficient for them. And Allah has cursed them, and for them is an enduring punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 9\n        },\n        \"text\" : \"Has there not reached them the news of those before them -  the people of Noah and [the tribes of] 'Aad and Thamud and the people of Abraham and the companions of Madyan and the towns overturned? Their messengers came to them with clear proofs. And Allah would never have wronged them, but they were wronging themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 9\n        },\n        \"text\" : \"The believing men and believing women are allies of one another. They enjoin what is right and forbid what is wrong and establish prayer and give zakah and obey Allah and His Messenger. Those - Allah will have mercy upon them. Indeed, Allah is Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 9\n        },\n        \"text\" : \"Allah has promised the believing men and believing women gardens beneath which rivers flow, wherein they abide eternally, and pleasant dwellings in gardens of perpetual residence; but approval from Allah is greater. It is that which is the great attainment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 9\n        },\n        \"text\" : \"They swear by Allah that they did not say [anything against the Prophet] while they had said the word of disbelief and disbelieved after their [pretense of] Islam and planned that which they were not to attain. And they were not resentful except [for the fact] that Allah and His Messenger had enriched them of His bounty. So if they repent, it is better for them; but if they turn away, Allah will punish them with a painful punishment in this world and the Hereafter. And there will not be for them on earth any protector or helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 9\n        },\n        \"text\" : \"And among them are those who made a covenant with Allah, [saying], \\\"If He should give us from His bounty, we will surely spend in charity, and we will surely be among the righteous.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 9\n        },\n        \"text\" : \"So He penalized them with hypocrisy in their hearts until the Day they will meet Him - because they failed Allah in what they promised Him and because they [habitually] used to lie.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 9\n        },\n        \"text\" : \"Did they not know that Allah knows their secrets and their private conversations and that Allah is the Knower of the unseen?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 9\n        },\n        \"text\" : \"Those who criticize the contributors among the believers concerning [their] charities and [criticize] the ones who find nothing [to spend] except their effort, so they ridicule them - Allah will ridicule them, and they will have a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 9\n        },\n        \"text\" : \"Ask forgiveness for them, [O Muhammad], or do not ask forgiveness for them. If you should ask forgiveness for them seventy times -  never will Allah forgive them. That is because they disbelieved in Allah and His Messenger, and Allah does not guide the defiantly disobedient people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 9\n        },\n        \"text\" : \"Those who remained behind rejoiced in their staying [at home] after [the departure of] the Messenger of Allah and disliked to strive with their wealth and their lives in the cause of Allah and said, 'Do not go forth in the heat.\\\" Say, \\\"The fire of Hell is more intensive in heat\\\" -  if they would but understand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 9\n        },\n        \"text\" : \"If Allah should return you to a faction of them [after the expedition] and then they ask your permission to go out [to battle], say, \\\"You will not go out with me, ever, and you will never fight with me an enemy. Indeed, you were satisfied with sitting [at home] the first time, so sit [now] with those who stay behind.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 9\n        },\n        \"text\" : \"And do not pray [the funeral prayer, O Muhammad], over any of them who has died - ever -  or stand at his grave. Indeed, they disbelieved in Allah and His Messenger and died while they were defiantly disobedient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 9\n        },\n        \"text\" : \"And let not their wealth and their children impress you. Allah only intends to punish them through them in this world and that their souls should depart [at death] while they are disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 9\n        },\n        \"text\" : \"And when a surah was revealed [enjoining them] to believe in Allah and to fight with His Messenger, those of wealth among them asked your permission [to stay back] and said, \\\"Leave us to be with them who sit [at home].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 9\n        },\n        \"text\" : \"But the Messenger and those who believed with him fought with their wealth and their lives. Those will have [all that is] good, and it is those who are the successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 9\n        },\n        \"text\" : \"Allah has prepared for them gardens beneath which rivers flow, wherein they will abide eternally. That is the great attainment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 9\n        },\n        \"text\" : \"And those with excuses among the bedouins came to be permitted [to remain], and they who had lied to Allah and His Messenger sat [at home]. There will strike those who disbelieved among them a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 9\n        },\n        \"text\" : \"There is not upon the weak or upon the ill or upon those who do not find anything to spend any discomfort when they are sincere to Allah and His Messenger. There is not upon the doers of good any cause [for blame]. And Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 9\n        },\n        \"text\" : \"Nor [is there blame] upon those who, when they came to you that you might give them mounts, you said, \\\"I can find nothing for you to ride upon.\\\" They turned back while their eyes overflowed with tears out of grief that they could not find something to spend [for the cause of Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 9\n        },\n        \"text\" : \"The cause [for blame] is only upon those who ask permission of you while they are rich. They are satisfied to be with those who stay behind, and Allah has sealed over their hearts, so they do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 9\n        },\n        \"text\" : \"They will make excuses to you when you have returned to them. Say, \\\"Make no excuse -  never will we believe you. Allah has already informed us of your news. And Allah will observe your deeds, and [so will] His Messenger; then you will be taken back to the Knower of the unseen and the witnessed, and He will inform you of what you used to do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 9\n        },\n        \"text\" : \"They will swear by Allah to you when you return to them that you would leave them alone. So leave them alone; indeed they are evil; and their refuge is Hell as recompense for what they had been earning.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 9\n        },\n        \"text\" : \"They swear to you so that you might be satisfied with them. But if you should be satisfied with them -  indeed, Allah is not satisfied with a defiantly disobedient people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 9\n        },\n        \"text\" : \"The bedouins are stronger in disbelief and hypocrisy and more likely not to know the limits of what [laws] Allah has revealed to His Messenger. And Allah is Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 9\n        },\n        \"text\" : \"And among the bedouins are some who consider what they spend as a loss and await for you turns of misfortune. Upon them will be a misfortune of evil. And Allah is Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 9\n        },\n        \"text\" : \"But among the bedouins are some who believe in Allah and the Last Day and consider what they spend as means of nearness to Allah and of [obtaining] invocations of the Messenger. Unquestionably, it is a means of nearness for them. Allah will admit them to His mercy. Indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 100,\n          \"sura\" : 9\n        },\n        \"text\" : \"And the first forerunners [in the faith] among the Muhajireen and the Ansar and those who followed them with good conduct - Allah is pleased with them and they are pleased with Him, and He has prepared for them gardens beneath which rivers flow, wherein they will abide forever. That is the great attainment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 9\n        },\n        \"text\" : \"And [there are] others who have acknowledged their sins. They had mixed a righteous deed with another that was bad. Perhaps Allah will turn to them in forgiveness. Indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 9\n        },\n        \"text\" : \"Take, [O, Muhammad], from their wealth a charity by which you purify them and cause them increase, and invoke [ Allah 's blessings] upon them. Indeed, your invocations are reassurance for them. And Allah is Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 9\n        },\n        \"text\" : \"Do they not know that it is Allah who accepts repentance from His servants and receives charities and that it is Allah who is the Accepting of repentance, the Merciful?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 9\n        },\n        \"text\" : \"And say, \\\"Do [as you will], for Allah will see your deeds, and [so, will] His Messenger and the believers. And you will be returned to the Knower of the unseen and the witnessed, and He will inform you of what you used to do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 9\n        },\n        \"text\" : \"And [there are] others deferred until the command of Allah -  whether He will punish them or whether He will forgive them. And Allah is Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 9\n        },\n        \"text\" : \"And [there are] those [hypocrites] who took for themselves a mosque for causing harm and disbelief and division among the believers and as a station for whoever had warred against Allah and His Messenger before. And they will surely swear, \\\"We intended only the best.\\\" And Allah testifies that indeed they are liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 9\n        },\n        \"text\" : \"Do not stand [for prayer] within it -  ever. A mosque founded on righteousness from the first day is more worthy for you to stand in. Within it are men who love to purify themselves; and Allah loves those who purify themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 9\n        },\n        \"text\" : \"Then is one who laid the foundation of his building on righteousness [with fear] from Allah and [seeking] His approval better or one who laid the foundation of his building on the edge of a bank about to collapse, so it collapsed with him into the fire of Hell? And Allah does not guide the wrongdoing people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 9\n        },\n        \"text\" : \"Their building which they built will not cease to be a [cause of] skepticism in their hearts until their hearts are stopped. And Allah is Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 9\n        },\n        \"text\" : \"Indeed, Allah has purchased from the believers their lives and their properties [in exchange] for that they will have Paradise. They fight in the cause of Allah, so they kill and are killed. [It is] a true promise [binding] upon Him in the Torah and the Gospel and the Qur'an. And who is truer to his covenant than Allah ? So rejoice in your transaction which you have contracted. And it is that which is the great attainment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 9\n        },\n        \"text\" : \"[Such believers are] the repentant, the worshippers, the praisers [of Allah ], the travelers [for His cause], those who bow and prostrate [in prayer], those who enjoin what is right and forbid what is wrong, and those who observe the limits [set by] Allah . And give good tidings to the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 9\n        },\n        \"text\" : \"And the request of forgiveness of Abraham for his father was only because of a promise he had made to him. But when it became apparent to Abraham that his father was an enemy to Allah, he disassociated himself from him. Indeed was Abraham compassionate and patient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 115,\n          \"sura\" : 9\n        },\n        \"text\" : \"And Allah would not let a people stray after He has guided them until He makes clear to them what they should avoid. Indeed, Allah is Knowing of all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 9\n        },\n        \"text\" : \"Indeed, to Allah belongs the dominion of the heavens and the earth; He gives life and causes death. And you have not besides Allah any protector or any helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 117,\n          \"sura\" : 9\n        },\n        \"text\" : \"Allah has already forgiven the Prophet and the Muhajireen and the Ansar who followed him in the hour of difficulty after the hearts of a party of them had almost inclined [to doubt], and then He forgave them. Indeed, He was to them Kind and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 118,\n          \"sura\" : 9\n        },\n        \"text\" : \"And [He also forgave] the three who were left behind [and regretted their error] to the point that the earth closed in on them in spite of its vastness and their souls confined them and they were certain that there is no refuge from Allah except in Him. Then He turned to them so they could repent. Indeed, Allah is the Accepting of repentance, the Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 119,\n          \"sura\" : 9\n        },\n        \"text\" : \"O you who have believed, fear Allah and be with those who are true.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 120,\n          \"sura\" : 9\n        },\n        \"text\" : \"It was not [proper] for the people of Madinah and those surrounding them of the bedouins that they remain behind after [the departure of] the Messenger of Allah or that they prefer themselves over his self. That is because they are not afflicted by thirst or fatigue or hunger in the cause of Allah, nor do they tread on any ground that enrages the disbelievers, nor do they inflict upon an enemy any infliction but that is registered for them as a righteous deed. Indeed, Allah does not allow to be lost the reward of the doers of good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 121,\n          \"sura\" : 9\n        },\n        \"text\" : \"Nor do they spend an expenditure, small or large, or cross a valley but that it is registered for them that Allah may reward them for the best of what they were doing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 122,\n          \"sura\" : 9\n        },\n        \"text\" : \"And it is not for the believers to go forth [to battle] all at once. For there should separate from every division of them a group [remaining] to obtain understanding in the religion and warn their people when they return to them that they might be cautious.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 123,\n          \"sura\" : 9\n        },\n        \"text\" : \"O you who have believed, fight those adjacent to you of the disbelievers and let them find in you harshness. And know that Allah is with the righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 127,\n          \"sura\" : 9\n        },\n        \"text\" : \"And whenever a surah is revealed, they look at each other, [saying], \\\"Does anyone see you?\\\" and then they dismiss themselves. Allah has dismissed their hearts because they are a people who do not understand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 129,\n          \"sura\" : 9\n        },\n        \"text\" : \"But if they turn away, [O Muhammad], say, \\\"Sufficient for me is Allah ; there is no deity except Him. On Him I have relied, and He is the Lord of the Great Throne.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 10\n        },\n        \"text\" : \"Indeed, your Lord is Allah, who created the heavens and the earth in six days and then established Himself above the Throne, arranging the matter [of His creation]. There is no intercessor except after His permission. That is Allah, your Lord, so worship Him. Then will you not remember?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 10\n        },\n        \"text\" : \"To Him is your return all together. [It is] the promise of Allah [which is] truth. Indeed, He begins the [process of] creation and then repeats it that He may reward those who have believed and done righteous deeds, in justice. But those who disbelieved will have a drink of scalding water and a painful punishment for what they used to deny.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 10\n        },\n        \"text\" : \"It is He who made the sun a shining light and the moon a derived light and determined for it phases - that you may know the number of years and account [of time]. Allah has not created this except in truth. He details the signs for a people who know\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 10\n        },\n        \"text\" : \"Indeed, in the alternation of the night and the day and [in] what Allah has created in the heavens and the earth are signs for a people who fear Allah\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 10\n        },\n        \"text\" : \"Their call therein will be, \\\"Exalted are You, O Allah,\\\" and their greeting therein will be, \\\"Peace.\\\" And the last of their call will be, \\\"Praise to Allah, Lord of the worlds!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 10\n        },\n        \"text\" : \"And if Allah was to hasten for the people the evil [they invoke] as He hastens for them the good, their term would have been ended for them. But We leave the ones who do not expect the meeting with Us, in their transgression, wandering blindly\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 10\n        },\n        \"text\" : \"And when affliction touches man, he calls upon Us, whether lying on his side or sitting or standing; but when We remove from him his affliction, he continues [in disobedience] as if he had never called upon Us to [remove] an affliction that touched him. Thus is made pleasing to the transgressors that which they have been doing\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say, \\\"If Allah had willed, I would not have recited it to you, nor would He have made it known to you, for I had remained among you a lifetime before it. Then will you not reason?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 10\n        },\n        \"text\" : \"So who is more unjust than he who invents a lie about Allah or denies His signs? Indeed, the criminals will not succeed\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 10\n        },\n        \"text\" : \"And they worship other than Allah that which neither harms them nor benefits them, and they say, \\\"These are our intercessors with Allah \\\" Say, \\\"Do you inform Allah of something He does not know in the heavens or on the earth?\\\" Exalted is He and high above what they associate with Him\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 10\n        },\n        \"text\" : \"And they say, \\\"Why is a sign not sent down to him from his Lord?\\\" So say, \\\"The unseen is only for Allah [to administer], so wait; indeed, I am with you among those who wait.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 10\n        },\n        \"text\" : \"And when We give the people a taste of mercy after adversity has touched them, at once they conspire against Our verses. Say, \\\" Allah is swifter in strategy.\\\" Indeed, Our messengers record that which you conspire\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 10\n        },\n        \"text\" : \"It is He who enables you to travel on land and sea until, when you are in ships and they sail with them by a good wind and they rejoice therein, there comes a storm wind and the waves come upon them from everywhere and they assume that they are surrounded, supplicating Allah, sincere to Him in religion, \\\"If You should save us from this, we will surely be among the thankful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 10\n        },\n        \"text\" : \"And Allah invites to the Home of Peace and guides whom He wills to a straight path\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 10\n        },\n        \"text\" : \"For them who have done good is the best [reward] and extra. No darkness will cover their faces, nor humiliation. Those are companions of Paradise; they will abide therein eternally\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 10\n        },\n        \"text\" : \"But they who have earned [blame for] evil doings - the recompense of an evil deed is its equivalent, and humiliation will cover them. They will have from Allah no protector. It will be as if their faces are covered with pieces of the night -  so dark [are they]. Those are the companions of the Fire; they will abide therein eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 10\n        },\n        \"text\" : \"And [mention, O Muhammad], the Day We will gather them all together -  then We will say to those who associated others with Allah, \\\"[Remain in] your place, you and your 'partners.' \\\" Then We will separate them, and their \\\"partners\\\" will say, \\\"You did not used to worship us,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 10\n        },\n        \"text\" : \"And sufficient is Allah as a witness between us and you that we were of your worship unaware.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 10\n        },\n        \"text\" : \"There, [on that Day], every soul will be put to trial for what it did previously, and they will be returned to Allah, their master, the Truth, and lost from them is whatever they used to invent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say, \\\"Who provides for you from the heaven and the earth? Or who controls hearing and sight and who brings the living out of the dead and brings the dead out of the living and who arranges [every] matter?\\\" They will say, \\\" Allah,\\\" so say, \\\"Then will you not fear Him?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 10\n        },\n        \"text\" : \"For that is Allah, your Lord, the Truth. And what can be beyond truth except error? So how are you averted?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say, \\\"Are there of your 'partners' any who begins creation and then repeats it?\\\" Say, \\\" Allah begins creation and then repeats it, so how are you deluded?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say, \\\"Are there of your 'partners' any who guides to the truth?\\\" Say, \\\" Allah guides to the truth. So is He who guides to the truth more worthy to be followed or he who guides not unless he is guided? Then what is [wrong] with you -  how do you judge?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 10\n        },\n        \"text\" : \"And most of them follow not except assumption. Indeed, assumption avails not against the truth at all. Indeed, Allah is Knowing of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 10\n        },\n        \"text\" : \"And it was not [possible] for this Qur'an to be produced by other than Allah, but [it is] a confirmation of what was before it and a detailed explanation of the [former] Scripture, about which there is no doubt, from the Lord of the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 10\n        },\n        \"text\" : \"Or do they say [about the Prophet], \\\"He invented it?\\\" Say, \\\"Then bring forth a surah like it and call upon [for assistance] whomever you can besides Allah, if you should be truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 10\n        },\n        \"text\" : \"Indeed, Allah does not wrong the people at all, but it is the people who are wronging themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 10\n        },\n        \"text\" : \"And on the Day when He will gather them, [it will be] as if they had not remained [in the world] but an hour of the day, [and] they will know each other. Those will have lost who denied the meeting with Allah and were not guided\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 10\n        },\n        \"text\" : \"And whether We show you some of what We promise them, [O Muhammad], or We take you in death, to Us is their return; then, [either way], Allah is a witness concerning what they are doing\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say, \\\"I possess not for myself any harm or benefit except what Allah should will. For every nation is a [specified] term. When their time has come, then they will not remain behind an hour, nor will they precede [it].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 10\n        },\n        \"text\" : \"Then is it that when it has [actually] occurred you will believe in it? Now? And you were [once] for it impatient\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 10\n        },\n        \"text\" : \"And they ask information of you, [O Muhammad], \\\"Is it true?\\\" Say, \\\"Yes, by my Lord. Indeed, it is truth; and you will not cause failure [to Allah ].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 10\n        },\n        \"text\" : \"Unquestionably, to Allah belongs whatever is in the heavens and the earth. Unquestionably, the promise of Allah is truth, but most of them do not know\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say, \\\"In the bounty of Allah and in His mercy - in that let them rejoice; it is better than what they accumulate.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say, \\\"Have you seen what Allah has sent down to you of provision of which you have made [some] lawful and [some] unlawful?\\\" Say, \\\"Has Allah permitted you [to do so], or do you invent [something] about Allah ?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 10\n        },\n        \"text\" : \"And what will be the supposition of those who invent falsehood about Allah on the Day of Resurrection? Indeed, Allah is full of bounty to the people, but most of them are not grateful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 10\n        },\n        \"text\" : \"And, [O Muhammad], you are not [engaged] in any matter or recite any of the Qur'an and you [people] do not do any deed except that We are witness over you when you are involved in it. And not absent from your Lord is any [part] of an atom's weight within the earth or within the heaven or [anything] smaller than that or greater but that it is in a clear register.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 10\n        },\n        \"text\" : \"Unquestionably, [for] the allies of Allah there will be no fear concerning them, nor will they grieve\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 10\n        },\n        \"text\" : \"Those who believed and were fearing Allah\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 10\n        },\n        \"text\" : \"For them are good tidings in the worldly life and in the Hereafter. No change is there in the words of Allah . That is what is the great attainment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 10\n        },\n        \"text\" : \"And let not their speech grieve you. Indeed, honor [due to power] belongs to Allah entirely. He is the Hearing, the Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 10\n        },\n        \"text\" : \"Unquestionably, to Allah belongs whoever is in the heavens and whoever is on the earth. And those who invoke other than Allah do not [actually] follow [His] \\\"partners.\\\" They follow not except assumption, and they are not but falsifying\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 10\n        },\n        \"text\" : \"They have said, \\\" Allah has taken a son.\\\" Exalted is He; He is the [one] Free of need. To Him belongs whatever is in the heavens and whatever is in the earth. You have no authority for this [claim]. Do you say about Allah that which you do not know?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say, \\\"Indeed, those who invent falsehood about Allah will not succeed.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 10\n        },\n        \"text\" : \"And recite to them the news of Noah, when he said to his people, \\\"O my people, if my residence and my reminding of the signs of Allah has become burdensome upon you - then I have relied upon Allah . So resolve upon your plan and [call upon] your associates. Then let not your plan be obscure to you. Then carry it out upon me and do not give me respite.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 10\n        },\n        \"text\" : \"And if you turn away [from my advice] then no payment have I asked of you. My reward is only from Allah, and I have been commanded to be of the Muslims.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 10\n        },\n        \"text\" : \"And when they had thrown, Moses said, \\\"What you have brought is [only] magic. Indeed, Allah will expose its worthlessness. Indeed, Allah does not amend the work of corrupters.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 10\n        },\n        \"text\" : \"And Allah will establish the truth by His words, even if the criminals dislike it.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 10\n        },\n        \"text\" : \"And Moses said, \\\"O my people, if you have believed in Allah, then rely upon Him, if you should be Muslims.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 10\n        },\n        \"text\" : \"So they said, \\\"Upon Allah do we rely. Our Lord, make us not [objects of] trial for the wrongdoing people\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 10\n        },\n        \"text\" : \"[ Allah ] said, \\\"Your supplication has been answered.\\\" So remain on a right course and follow not the way of those who do not know.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 10\n        },\n        \"text\" : \"And never be of those who deny the signs of Allah and [thus] be among the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 10\n        },\n        \"text\" : \"And had your Lord willed, those on earth would have believed -  all of them entirely. Then, [O Muhammad], would you compel the people in order that they become believers?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 100,\n          \"sura\" : 10\n        },\n        \"text\" : \"And it is not for a soul to believe except by permission of Allah, and He will place defilement upon those who will not use reason.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 10\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"O people, if you are in doubt as to my religion -  then I do not worship those which you worship besides Allah ; but I worship Allah, who causes your death. And I have been commanded to be of the believers\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 10\n        },\n        \"text\" : \"And [commanded], 'Direct your face toward the religion, inclining to truth, and never be of those who associate others with Allah ;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 10\n        },\n        \"text\" : \"And do not invoke besides Allah that which neither benefits you nor harms you, for if you did, then indeed you would be of the wrongdoers.'\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 10\n        },\n        \"text\" : \"And if Allah should touch you with adversity, there is no remover of it except Him; and if He intends for you good, then there is no repeller of His bounty. He causes it to reach whom He wills of His servants. And He is the Forgiving, the Merciful\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 10\n        },\n        \"text\" : \"And follow what is revealed to you, [O Muhammad], and be patient until Allah will judge. And He is the best of judges.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 11\n        },\n        \"text\" : \"[Through a messenger, saying], \\\"Do not worship except Allah . Indeed, I am to you from Him a warner and a bringer of good tidings,\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 11\n        },\n        \"text\" : \"To Allah is your return, and He is over all things competent.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 11\n        },\n        \"text\" : \"Unquestionably, they the disbelievers turn away their breasts to hide themselves from Him. Unquestionably, [even] when they cover themselves in their clothing, Allah knows what they conceal and what they declare. Indeed, He is Knowing of that within the breasts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 11\n        },\n        \"text\" : \"And there is no creature on earth but that upon Allah is its provision, and He knows its place of dwelling and place of storage. All is in a clear register.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 11\n        },\n        \"text\" : \"Then would you possibly leave [out] some of what is revealed to you, or is your breast constrained by it because they say, \\\"Why has there not been sent down to him a treasure or come with him an angel?\\\" But you are only a warner. And Allah is Disposer of all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 11\n        },\n        \"text\" : \"Or do they say, \\\"He invented it\\\"? Say, \\\"Then bring ten surahs like it that have been invented and call upon [for assistance] whomever you can besides Allah, if you should be truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 11\n        },\n        \"text\" : \"And if they do not respond to you -  then know that the Qur'an was revealed with the knowledge of Allah and that there is no deity except Him. Then, would you [not] be Muslims?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 11\n        },\n        \"text\" : \"And who is more unjust than he who invents a lie about Allah ? Those will be presented before their Lord, and the witnesses will say, \\\"These are the ones who lied against their Lord.\\\" Unquestionably, the curse of Allah is upon the wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 11\n        },\n        \"text\" : \"Who averted [people] from the way of Allah and sought to make it [seem] deviant while they, concerning the Hereafter, were disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 11\n        },\n        \"text\" : \"Those were not causing failure [to Allah ] on earth, nor did they have besides Allah any protectors. For them the punishment will be multiplied. They were not able to hear, nor did they see.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 11\n        },\n        \"text\" : \"Indeed, they who have believed and done righteous deeds and humbled themselves to their Lord -  those are the companions of Paradise; they will abide eternally therein.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 11\n        },\n        \"text\" : \"That you not worship except Allah . Indeed, I fear for you the punishment of a painful day.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 11\n        },\n        \"text\" : \"And O my people, I ask not of you for it any wealth. My reward is not but from Allah . And I am not one to drive away those who have believed. Indeed, they will meet their Lord, but I see that you are a people behaving ignorantly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 11\n        },\n        \"text\" : \"And O my people, who would protect me from Allah if I drove them away? Then will you not be reminded?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 11\n        },\n        \"text\" : \"And I do not tell you that I have the depositories [containing the provision] of Allah or that I know the unseen, nor do I tell you that I am an angel, nor do I say of those upon whom your eyes look down that Allah will never grant them any good. Allah is most knowing of what is within their souls. Indeed, I would then be among the wrongdoers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 11\n        },\n        \"text\" : \"He said, \\\" Allah will only bring it to you if He wills, and you will not cause [Him] failure.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 11\n        },\n        \"text\" : \"And my advice will not benefit you -  although I wished to advise you -  If Allah should intend to put you in error. He is your Lord, and to Him you will be returned.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 11\n        },\n        \"text\" : \"And [Noah] said, \\\"Embark therein; in the name of Allah is its course and its anchorage. Indeed, my Lord is Forgiving and Merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 11\n        },\n        \"text\" : \"And it sailed with them through waves like mountains, and Noah called to his son who was apart [from them], \\\"O my son, come aboard with us and be not with the disbelievers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 11\n        },\n        \"text\" : \"[But] he said, \\\"I will take refuge on a mountain to protect me from the water.\\\" [Noah] said, \\\"There is no protector today from the decree of Allah, except for whom He gives mercy.\\\" And the waves came between them, and he was among the drowned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 11\n        },\n        \"text\" : \"And it was said, \\\"O earth, swallow your water, and O sky, withhold [your rain].\\\" And the water subsided, and the matter was accomplished, and the ship came to rest on the [mountain of] Judiyy. And it was said, \\\"Away with the wrongdoing people.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 11\n        },\n        \"text\" : \"And Noah called to his Lord and said, \\\"My Lord, indeed my son is of my family; and indeed, Your promise is true; and You are the most just of judges!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 11\n        },\n        \"text\" : \"And to 'Aad [We sent] their brother Hud. He said, \\\"O my people, worship Allah ; you have no deity other than Him. You are not but inventors [of falsehood].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 11\n        },\n        \"text\" : \"We only say that some of our gods have possessed you with evil.\\\" He said, \\\"Indeed, I call Allah to witness, and witness [yourselves] that I am free from whatever you associate with Allah\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 11\n        },\n        \"text\" : \"Other than Him. So plot against me all together; then do not give me respite.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 11\n        },\n        \"text\" : \"Indeed, I have relied upon Allah, my Lord and your Lord. There is no creature but that He holds its forelock. Indeed, my Lord is on a path [that is] straight.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 11\n        },\n        \"text\" : \"But if they turn away, [say], \\\"I have already conveyed that with which I was sent to you. My Lord will give succession to a people other than you, and you will not harm Him at all. Indeed my Lord is, over all things, Guardian.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 11\n        },\n        \"text\" : \"And to Thamud [We sent] their brother Salih. He said, \\\"O my people, worship Allah ; you have no deity other than Him. He has produced you from the earth and settled you in it, so ask forgiveness of Him and then repent to Him. Indeed, my Lord is near and responsive.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 11\n        },\n        \"text\" : \"He said, \\\"O my people, have you considered: if I should be upon clear evidence from my Lord and He has given me mercy from Himself, who would protect me from Allah if I disobeyed Him? So you would not increase me except in loss.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 11\n        },\n        \"text\" : \"And O my people, this is the she-camel of Allah -  [she is] to you a sign. So let her feed upon Allah 's earth and do not touch her with harm, or you will be taken by an impending punishment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 11\n        },\n        \"text\" : \"And the shriek seized those who had wronged, and they became within their homes [corpses] fallen prone\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 11\n        },\n        \"text\" : \"She said, \\\"Woe to me! Shall I give birth while I am an old woman and this, my husband, is an old man? Indeed, this is an amazing thing!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 11\n        },\n        \"text\" : \"They said, \\\"Are you amazed at the decree of Allah ? May the mercy of Allah and His blessings be upon you, people of the house. Indeed, He is Praiseworthy and Honorable.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 11\n        },\n        \"text\" : \"Indeed, Abraham was forbearing, grieving and [frequently] returning [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 11\n        },\n        \"text\" : \"And his people came hastening to him, and before [this] they had been doing evil deeds. He said, \\\"O my people, these are my daughters; they are purer for you. So fear Allah and do not disgrace me concerning my guests. Is there not among you a man of reason?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 11\n        },\n        \"text\" : \"Marked from your Lord. And Allah 's punishment is not from the wrongdoers [very] far.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 11\n        },\n        \"text\" : \"And to Madyan [We sent] their brother Shu'ayb. He said, \\\"O my people, worship Allah ; you have no deity other than Him. And do not decrease from the measure and the scale. Indeed, I see you in prosperity, but indeed, I fear for you the punishment of an all-encompassing Day.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 11\n        },\n        \"text\" : \"What remains [lawful] from Allah is best for you, if you would be believers. But I am not a guardian over you.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 11\n        },\n        \"text\" : \"He said, \\\"O my people, have you considered: if I am upon clear evidence from my Lord and He has provided me with a good provision from Him... ? And I do not intend to differ from you in that which I have forbidden you; I only intend reform as much as I am able. And my success is not but through Allah . Upon him I have relied, and to Him I return.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 11\n        },\n        \"text\" : \"He said, \\\"O my people, is my family more respected for power by you than Allah ? But you put Him behind your backs [in neglect]. Indeed, my Lord is encompassing of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 11\n        },\n        \"text\" : \"And when Our command came, We saved Shu'ayb and those who believed with him, by mercy from Us. And the shriek seized those who had wronged, and they became within their homes [corpses] fallen prone\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 11\n        },\n        \"text\" : \"To Pharaoh and his establishment, but they followed the command of Pharaoh, and the command of Pharaoh was not [at all] discerning.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 11\n        },\n        \"text\" : \"And We did not wrong them, but they wronged themselves. And they were not availed at all by their gods which they invoked other than Allah when there came the command of your Lord. And they did not increase them in other than ruin.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 11\n        },\n        \"text\" : \"So remain on a right course as you have been commanded, [you] and those who have turned back with you [to Allah ], and do not transgress. Indeed, He is Seeing of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 113,\n          \"sura\" : 11\n        },\n        \"text\" : \"And do not incline toward those who do wrong, lest you be touched by the Fire, and you would not have other than Allah any protectors; then you would not be helped.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 115,\n          \"sura\" : 11\n        },\n        \"text\" : \"And be patient, for indeed, Allah does not allow to be lost the reward of those who do good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 119,\n          \"sura\" : 11\n        },\n        \"text\" : \"Except whom your Lord has given mercy, and for that He created them. But the word of your Lord is to be fulfilled that, \\\"I will surely fill Hell with jinn and men all together.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 123,\n          \"sura\" : 11\n        },\n        \"text\" : \"And to Allah belong the unseen [aspects] of the heavens and the earth and to Him will be returned the matter, all of it, so worship Him and rely upon Him. And your Lord is not unaware of that which you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 12\n        },\n        \"text\" : \"And they brought upon his shirt false blood. [Jacob] said, \\\"Rather, your souls have enticed you to something, so patience is most fitting. And Allah is the one sought for help against that which you describe.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 12\n        },\n        \"text\" : \"And there came a company of travelers; then they sent their water drawer, and he let down his bucket. He said, \\\"Good news! Here is a boy.\\\" And they concealed him, [taking him] as merchandise; and Allah was knowing of what they did.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 12\n        },\n        \"text\" : \"And the one from Egypt who bought him said to his wife, \\\"Make his residence comfortable. Perhaps he will benefit us, or we will adopt him as a son.\\\" And thus, We established Joseph in the land that We might teach him the interpretation of events. And Allah is predominant over His affair, but most of the people do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 12\n        },\n        \"text\" : \"And she, in whose house he was, sought to seduce him. She closed the doors and said, \\\"Come, you.\\\" He said, \\\"[I seek] the refuge of Allah . Indeed, he is my master, who has made good my residence. Indeed, wrongdoers will not succeed.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 12\n        },\n        \"text\" : \"So when she heard of their scheming, she sent for them and prepared for them a banquet and gave each one of them a knife and said [to Joseph], \\\"Come out before them.\\\" And when they saw him, they greatly admired him and cut their hands and said, \\\"Perfect is Allah ! This is not a man; this is none but a noble angel.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 12\n        },\n        \"text\" : \"He said, \\\"You will not receive food that is provided to you except that I will inform you of its interpretation before it comes to you. That is from what my Lord has taught me. Indeed, I have left the religion of a people who do not believe in Allah, and they, in the Hereafter, are disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 12\n        },\n        \"text\" : \"And I have followed the religion of my fathers, Abraham, Isaac and Jacob. And it was not for us to associate anything with Allah . That is from the favor of Allah upon us and upon the people, but most of the people are not grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 12\n        },\n        \"text\" : \"O [my] two companions of prison, are separate lords better or Allah, the One, the Prevailing?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 12\n        },\n        \"text\" : \"You worship not besides Him except [mere] names you have named them, you and your fathers, for which Allah has sent down no authority. Legislation is not but for Allah . He has commanded that you worship not except Him. That is the correct religion, but most of the people do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 12\n        },\n        \"text\" : \"Said [the king to the women], \\\"What was your condition when you sought to seduce Joseph?\\\" They said, \\\"Perfect is Allah ! We know about him no evil.\\\" The wife of al-'Azeez said, \\\"Now the truth has become evident. It was I who sought to seduce him, and indeed, he is of the truthful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 12\n        },\n        \"text\" : \"That is so al-'Azeez will know that I did not betray him in [his] absence and that Allah does not guide the plan of betrayers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 12\n        },\n        \"text\" : \"And thus We established Joseph in the land to settle therein wherever he willed. We touch with Our mercy whom We will, and We do not allow to be lost the reward of those who do good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 12\n        },\n        \"text\" : \"And the reward of the Hereafter is better for those who believed and were fearing Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 12\n        },\n        \"text\" : \"He said, \\\"Should I entrust you with him except [under coercion] as I entrusted you with his brother before? But Allah is the best guardian, and He is the most merciful of the merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 12\n        },\n        \"text\" : \"[Jacob] said, \\\"Never will I send him with you until you give me a promise by Allah that you will bring him [back] to me, unless you should be surrounded by enemies.\\\" And when they had given their promise, he said, \\\" Allah, over what we say, is Witness.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 12\n        },\n        \"text\" : \"And he said, \\\"O my sons, do not enter from one gate but enter from different gates; and I cannot avail you against [the decree of] Allah at all. The decision is only for Allah ; upon Him I have relied, and upon Him let those who would rely [indeed] rely.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 12\n        },\n        \"text\" : \"And when they entered from where their father had ordered them, it did not avail them against Allah at all except [it was] a need within the soul of Jacob, which he satisfied. And indeed, he was a possessor of knowledge because of what We had taught him, but most of the people do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 12\n        },\n        \"text\" : \"So when he had furnished them with their supplies, he put the [gold measuring] bowl into the bag of his brother. Then an announcer called out, \\\"O caravan, indeed you are thieves.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said, \\\"By Allah, you have certainly known that we did not come to cause corruption in the land, and we have not been thieves.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 12\n        },\n        \"text\" : \"So he began [the search] with their bags before the bag of his brother; then he extracted it from the bag of his brother. Thus did We plan for Joseph. He could not have taken his brother within the religion of the king except that Allah willed. We raise in degrees whom We will, but over every possessor of knowledge is one [more] knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said, \\\"If he steals -  a brother of his has stolen before.\\\" But Joseph kept it within himself and did not reveal it to them. He said, \\\"You are worse in position, and Allah is most knowing of what you describe.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 12\n        },\n        \"text\" : \"He said, \\\"[I seek] the refuge of Allah [to prevent] that we take except him with whom we found our possession. Indeed, we would then be unjust.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 12\n        },\n        \"text\" : \"So when they had despaired of him, they secluded themselves in private consultation. The eldest of them said, \\\"Do you not know that your father has taken upon you an oath by Allah and [that] before you failed in [your duty to] Joseph? So I will never leave [this] land until my father permits me or Allah decides for me, and He is the best of judges.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 12\n        },\n        \"text\" : \"[Jacob] said, \\\"Rather, your souls have enticed you to something, so patience is most fitting. Perhaps Allah will bring them to me all together. Indeed it is He who is the Knowing, the Wise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said, \\\"By Allah, you will not cease remembering Joseph until you become fatally ill or become of those who perish.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 12\n        },\n        \"text\" : \"He said, \\\"I only complain of my suffering and my grief to Allah, and I know from Allah that which you do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 12\n        },\n        \"text\" : \"O my sons, go and find out about Joseph and his brother and despair not of relief from Allah . Indeed, no one despairs of relief from Allah except the disbelieving people.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 12\n        },\n        \"text\" : \"So when they entered upon Joseph, they said, \\\"O 'Azeez, adversity has touched us and our family, and we have come with goods poor in quality, but give us full measure and be charitable to us. Indeed, Allah rewards the charitable.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said, \\\"Are you indeed Joseph?\\\" He said \\\"I am Joseph, and this is my brother. Allah has certainly favored us. Indeed, he who fears Allah and is patient, then indeed, Allah does not allow to be lost the reward of those who do good.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said, \\\"By Allah, certainly has Allah preferred you over us, and indeed, we have been sinners.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 12\n        },\n        \"text\" : \"He said, \\\"No blame will there be upon you today. Allah will forgive you; and He is the most merciful of the merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 12\n        },\n        \"text\" : \"Take this, my shirt, and cast it over the face of my father; he will become seeing. And bring me your family, all together.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 12\n        },\n        \"text\" : \"They said, \\\"By Allah, indeed you are in your [same] old error.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 12\n        },\n        \"text\" : \"And when the bearer of good tidings arrived, he cast it over his face, and he returned [once again] seeing. He said, \\\"Did I not tell you that I know from Allah that which you do not know?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 12\n        },\n        \"text\" : \"And when they entered upon Joseph, he took his parents to himself and said, \\\"Enter Egypt, Allah willing, safe [and secure].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 12\n        },\n        \"text\" : \"And most of them believe not in Allah except while they associate others with Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 12\n        },\n        \"text\" : \"Then do they feel secure that there will not come to them an overwhelming [aspect] of the punishment of Allah or that the Hour will not come upon them suddenly while they do not perceive?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 12\n        },\n        \"text\" : \"Say, \\\"This is my way; I invite to Allah with insight, I and those who follow me. And exalted is Allah ; and I am not of those who associate others with Him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 12\n        },\n        \"text\" : \"And We sent not before you [as messengers] except men to whom We revealed from among the people of cities. So have they not traveled through the earth and observed how was the end of those before them? And the home of the Hereafter is best for those who fear Allah ; then will you not reason?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 12\n        },\n        \"text\" : \"There was certainly in their stories a lesson for those of understanding. Never was the Qur'an a narration invented, but a confirmation of what was before it and a detailed explanation of all things and guidance and mercy for a people who believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 13\n        },\n        \"text\" : \"It is Allah who erected the heavens without pillars that you [can] see; then He established Himself above the Throne and made subject the sun and the moon, each running [its course] for a specified term.  He arranges [each] matter; He details the signs that you may, of the meeting with your Lord, be certain.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 13\n        },\n        \"text\" : \"And it is He who spread the earth and placed therein firmly set mountains and rivers; and from all of the fruits He made therein two mates; He causes the night to cover the day.  Indeed in that are signs for a people who give thought.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 13\n        },\n        \"text\" : \"And if you are astonished, [O Muhammad] -  then astonishing is their saying, \\\"When we are dust, will we indeed be [brought] into a new creation?\\\"  Those are the ones who have disbelieved in their Lord, and those will have shackles upon their necks, and those are the companions of the Fire; they will abide therein eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 13\n        },\n        \"text\" : \"Allah knows what every female carries and what the wombs lose [prematurely] or exceed. And everything with Him is by due measure.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 13\n        },\n        \"text\" : \"For each one are successive [angels] before and behind him who protect him by the decree of Allah .  Indeed, Allah will not change the condition of a people until they change what is in themselves. And when Allah intends for a people ill, there is no repelling it.  And there is not for them besides Him any patron.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 13\n        },\n        \"text\" : \"And the thunder exalts [ Allah ] with praise of Him -  and the angels [as well] from fear of Him -  and He sends thunderbolts and strikes therewith whom He wills while they dispute about Allah ; and He is severe in assault.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 13\n        },\n        \"text\" : \"To Him [alone] is the supplication of truth.  And those they call upon besides Him do not respond to them with a thing, except as one who stretches his hands toward water [from afar, calling it] to reach his mouth, but it will not reach it [thus]. And the supplication of the disbelievers is not but in error [i.e. futility].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 13\n        },\n        \"text\" : \"And to Allah prostrates whoever is within the heavens and the earth, willingly or by compulsion, and their shadows [as well] in the mornings and the afternoons.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 13\n        },\n        \"text\" : \"Say, \\\"Who is Lord of the heavens and earth?\\\" Say, \\\" Allah .\\\" Say, \\\"Have you then taken besides Him allies not possessing [even] for themselves any benefit or any harm?\\\" Say, \\\"Is the blind equivalent to the seeing? Or is darkness equivalent to light? Or have they attributed to Allah partners who created like His creation so that the creation [of each] seemed similar to them?\\\" Say, \\\" Allah is the Creator of all things, and He is the One, the Prevailing.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 13\n        },\n        \"text\" : \"He sends down from the sky, rain, and valleys flow according to their capacity, and the torrent carries a rising foam. And from that [ore] which they heat in the fire, desiring adornments and utensils, is a foam like it. Thus Allah presents [the example of] truth and falsehood. As for the foam, it vanishes, [being] cast off; but as for that which benefits the people, it remains on the earth. Thus does Allah present examples.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 13\n        },\n        \"text\" : \"For those who have responded to their Lord is the best [reward], but those who did not respond to Him -  if they had all that is in the earth entirely and the like of it with it, they would [attempt to] ransom themselves thereby. Those will have the worst account, and their refuge is Hell, and wretched is the resting place.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 13\n        },\n        \"text\" : \"Those who fulfill the covenant of Allah and do not break the contract,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 13\n        },\n        \"text\" : \"And those who join that which Allah has ordered to be joined and fear their Lord and are afraid of the evil of [their] account,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 13\n        },\n        \"text\" : \"But those who break the covenant of Allah after contracting it and sever that which Allah has ordered to be joined and spread corruption on earth -  for them is the curse, and they will have the worst home.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 13\n        },\n        \"text\" : \"Allah extends provision for whom He wills and restricts [it]. And they rejoice in the worldly life, while the worldly life is not, compared to the Hereafter, except [brief] enjoyment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 13\n        },\n        \"text\" : \"And those who disbelieved say, \\\"Why has a sign not been sent down to him from his Lord?\\\" Say, [O Muhammad], \\\"Indeed, Allah leaves astray whom He wills and guides to Himself whoever turns back [to Him] -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 13\n        },\n        \"text\" : \"Those who have believed and whose hearts are assured by the remembrance of Allah . Unquestionably, by the remembrance of Allah hearts are assured.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 13\n        },\n        \"text\" : \"And if there was any qur'an by which the mountains would be removed or the earth would be broken apart or the dead would be made to speak, [it would be this Qur'an], but to Allah belongs the affair entirely. Then have those who believed not accepted that had Allah willed, He would have guided the people, all of them? And those who disbelieve do not cease to be struck, for what they have done, by calamity -  or it will descend near their home -  until there comes the promise of Allah . Indeed, Allah does not fail in [His] promise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 13\n        },\n        \"text\" : \"Then is He who is a maintainer of every soul, [knowing] what it has earned, [like any other]?  But to Allah they have attributed partners. Say, \\\"Name them. Or do you inform Him of that which He knows not upon the earth or of what is apparent of speech?\\\" Rather, their [own] plan has been made attractive to those who disbelieve, and they have been averted from the way. And whomever Allah leaves astray -  there will be for him no guide.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 13\n        },\n        \"text\" : \"For them will be punishment in the life of [this] world, and the punishment of the Hereafter is more severe. And they will not have from Allah any protector.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 13\n        },\n        \"text\" : \"And [the believers among] those to whom We have given the [previous] Scripture rejoice at what has been revealed to you, [O Muhammad], but among the [opposing] factions are those who deny part of it. Say, \\\"I have only been commanded to worship Allah and not associate [anything] with Him. To Him I invite, and to Him is my return.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 13\n        },\n        \"text\" : \"And thus We have revealed it as an Arabic legislation. And if you should follow their inclinations after what has come to you of knowledge, you would not have against Allah any ally or any protector.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 13\n        },\n        \"text\" : \"And We have already sent messengers before you and assigned to them wives and descendants. And it was not for a messenger to come with a sign except by permission of Allah . For every term is a decree.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 13\n        },\n        \"text\" : \"Allah eliminates what He wills or confirms, and with Him is the Mother of the Book.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 13\n        },\n        \"text\" : \"Have they not seen that We set upon the land, reducing it from its borders?  And Allah decides; there is no adjuster of His decision. And He is swift in account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 13\n        },\n        \"text\" : \"And those before them had plotted, but to Allah belongs the plan entirely. He knows what every soul earns, and the disbelievers will know for whom is the final home.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 13\n        },\n        \"text\" : \"And those who have disbelieved say, \\\"You are not a messenger.\\\" Say, [O Muhammad], \\\"Sufficient is Allah as Witness between me and you, and [the witness of] whoever has knowledge of the Scripture.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 14\n        },\n        \"text\" : \"Allah, to whom belongs whatever is in the heavens and whatever is on the earth. And woe to the disbelievers from a severe punishment\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 14\n        },\n        \"text\" : \"The ones who prefer the worldly life over the Hereafter and avert [people] from the way of Allah, seeking to make it (seem) deviant. Those are in extreme error.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 14\n        },\n        \"text\" : \"And We did not send any messenger except [speaking] in the language of his people to state clearly for them, and Allah sends astray [thereby] whom He wills and guides whom He wills. And He is the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 14\n        },\n        \"text\" : \"And We certainly sent Moses with Our signs, [saying], \\\"Bring out your people from darknesses into the light and remind them of the days of Allah .\\\" Indeed in that are signs for everyone patient and grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 14\n        },\n        \"text\" : \"And [recall, O Children of Israel], when Moses said to His people, \\\"Remember the favor of Allah upon you when He saved you from the people of Pharaoh, who were afflicting you with the worst torment and were slaughtering your [newborn] sons and keeping your females alive. And in that was a great trial from your Lord.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 14\n        },\n        \"text\" : \"And Moses said, \\\"If you should disbelieve, you and whoever is on the earth entirely - indeed, Allah is Free of need and Praiseworthy.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 14\n        },\n        \"text\" : \"Has there not reached you the news of those before you -  the people of Noah and 'Aad and Thamud and those after them? No one knows them but Allah . Their messengers brought them clear proofs, but they returned their hands to their mouths and said, \\\"Indeed, we disbelieve in that with which you have been sent, and indeed we are, about that to which you invite us, in disquieting doubt.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 14\n        },\n        \"text\" : \"Their messengers said, \\\"Can there be doubt about Allah, Creator of the heavens and earth? He invites you that He may forgive you of your sins, and He delays your death for a specified term.\\\" They said, \\\"You are not but men like us who wish to avert us from what our fathers were worshipping.  So bring us a clear authority.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 14\n        },\n        \"text\" : \"Their messengers said to them, \\\"We are only men like you, but Allah confers favor upon whom He wills of His servants. It has never been for us to bring you evidence except by permission of Allah . And upon Allah let the believers rely.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 14\n        },\n        \"text\" : \"And why should we not rely upon Allah while He has guided us to our [good] ways. And we will surely be patient against whatever harm you should cause us. And upon Allah let those who would rely [indeed] rely.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 14\n        },\n        \"text\" : \"And they requested victory from Allah, and disappointed, [therefore], was every obstinate tyrant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 14\n        },\n        \"text\" : \"He will gulp it but will hardly [be able to] swallow it. And death will come to him from everywhere, but he is not to die. And before him is a massive punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 14\n        },\n        \"text\" : \"Have you not seen that Allah created the heavens and the earth in truth? If He wills, He can do away with you and produce a new creation.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 14\n        },\n        \"text\" : \"And that is not difficult for Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 14\n        },\n        \"text\" : \"And they will come out [for judgement] before Allah all together, and the weak will say to those who were arrogant, \\\"Indeed, we were your followers, so can you avail us anything against the punishment of Allah ?\\\" They will say, \\\"If Allah had guided us, we would have guided you. It is all the same for us whether we show intolerance or are patient: there is for us no place of escape.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 14\n        },\n        \"text\" : \"And Satan will say when the matter has been concluded, \\\"Indeed, Allah had promised you the promise of truth. And I promised you, but I betrayed you. But I had no authority over you except that I invited you, and you responded to me. So do not blame me; but blame yourselves. I cannot be called to your aid, nor can you be called to my aid. Indeed, I deny your association of me [with Allah ] before. Indeed, for the wrongdoers is a painful punishment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 14\n        },\n        \"text\" : \"And those who believed and did righteous deeds will be admitted to gardens beneath which rivers flow, abiding eternally therein by permission of their Lord; and their greeting therein will be, \\\"Peace!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 14\n        },\n        \"text\" : \"Have you not considered how Allah presents an example, [making] a good word like a good tree, whose root is firmly fixed and its branches [high] in the sky?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 14\n        },\n        \"text\" : \"It produces its fruit all the time, by permission of its Lord. And Allah presents examples for the people that perhaps they will be reminded.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 14\n        },\n        \"text\" : \"Allah keeps firm those who believe, with the firm word, in worldly life and in the Hereafter. And Allah sends astray the wrongdoers. And Allah does what He wills.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 14\n        },\n        \"text\" : \"Have you not considered those who exchanged the favor of Allah for disbelief and settled their people [in] the home of ruin?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 14\n        },\n        \"text\" : \"And they have attributed to Allah equals to mislead [people] from His way. Say, \\\"Enjoy yourselves, for indeed, your destination is the Fire.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 14\n        },\n        \"text\" : \"It is Allah who created the heavens and the earth and sent down rain from the sky and produced thereby some fruits as provision for you and subjected for you the ships to sail through the sea by His command and subjected for you the rivers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 14\n        },\n        \"text\" : \"And He gave you from all you asked of Him. And if you should count the favor of Allah, you could not enumerate them. Indeed, mankind is [generally] most unjust and ungrateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 14\n        },\n        \"text\" : \"Our Lord, I have settled some of my descendants in an uncultivated valley near Your sacred House, our Lord, that they may establish prayer. So make hearts among the people incline toward them and provide for them from the fruits that they might be grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 14\n        },\n        \"text\" : \"Our Lord, indeed You know what we conceal and what we declare, and nothing is hidden from Allah on the earth or in the heaven.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 14\n        },\n        \"text\" : \"Praise to Allah, who has granted to me in old age Ishmael and Isaac. Indeed, my Lord is the Hearer of supplication.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 14\n        },\n        \"text\" : \"And never think that Allah is unaware of what the wrongdoers do. He only delays them for a Day when eyes will stare [in horror].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 14\n        },\n        \"text\" : \"And, [O Muhammad], warn the people of a Day when the punishment will come to them and those who did wrong will say, \\\"Our Lord, delay us for a short term; we will answer Your call and follow the messengers.\\\" [But it will be said], \\\"Had you not sworn, before, that for you there would be no cessation?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 14\n        },\n        \"text\" : \"And they had planned their plan, but with Allah is [recorded] their plan, even if their plan had been [sufficient] to do away with the mountains.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 14\n        },\n        \"text\" : \"So never think that Allah will fail in His promise to His messengers. Indeed, Allah is Exalted in Might and Owner of Retribution.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 14\n        },\n        \"text\" : \"[It will be] on the Day the earth will be replaced by another earth, and the heavens [as well], and all creatures will come out before Allah, the One, the Prevailing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 14\n        },\n        \"text\" : \"So that Allah will recompense every soul for what it earned. Indeed, Allah is swift in account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 15\n        },\n        \"text\" : \"And We have protected it from every devil expelled [from the mercy of Allah ]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 15\n        },\n        \"text\" : \"And when I have proportioned him and breathed into him of My [created] soul, then fall down to him in prostration.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 15\n        },\n        \"text\" : \"So the angels prostrated -  all of them entirely,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 15\n        },\n        \"text\" : \"[ Allah ] said, O Iblees, what is [the matter] with you that you are not with those who prostrate?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 15\n        },\n        \"text\" : \"[ Allah ] said, \\\"Then get out of it, for indeed, you are expelled.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 15\n        },\n        \"text\" : \"[ Allah ] said, \\\"So indeed, you are of those reprieved\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 15\n        },\n        \"text\" : \"[Iblees] said, \\\"My Lord, because You have put me in error, I will surely make [disobedience] attractive to them on earth, and I will mislead them all\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 15\n        },\n        \"text\" : \"[ Allah ] said, \\\"This is a path [of return] to Me [that is] straight.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 15\n        },\n        \"text\" : \"And indeed, Hell is the promised place for them all.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 15\n        },\n        \"text\" : \"Except the family of Lot; indeed, we will save them all\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 15\n        },\n        \"text\" : \"Except his wife.\\\" Allah decreed that she is of those who remain behind.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 15\n        },\n        \"text\" : \"And fear Allah and do not disgrace me.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 15\n        },\n        \"text\" : \"So by your Lord, We will surely question them all\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 15\n        },\n        \"text\" : \"Who make [equal] with Allah another deity. But they are going to know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 15\n        },\n        \"text\" : \"So exalt [ Allah ] with praise of your Lord and be of those who prostrate [to Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 16\n        },\n        \"text\" : \"The command of Allah is coming, so be not impatient for it. Exalted is He and high above what they associate with Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 16\n        },\n        \"text\" : \"And upon Allah is the direction of the [right] way, and among the various paths are those deviating. And if He willed, He could have guided you all.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 16\n        },\n        \"text\" : \"He causes to grow for you thereby the crops, olives, palm trees, grapevines, and from all the fruits. Indeed in that is a sign for a people who give thought.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 16\n        },\n        \"text\" : \"And if you should count the favors of Allah, you could not enumerate them. Indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah knows what you conceal and what you declare.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 16\n        },\n        \"text\" : \"And those they invoke other than Allah create nothing, and they [themselves] are created.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 16\n        },\n        \"text\" : \"Assuredly, Allah knows what they conceal and what they declare. Indeed, He does not like the arrogant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 16\n        },\n        \"text\" : \"Those before them had already plotted, but Allah came at their building from the foundations, so the roof fell upon them from above them, and the punishment came to them from where they did not perceive.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 16\n        },\n        \"text\" : \"The ones whom the angels take in death [while] wronging themselves, and [who] then offer submission, [saying], \\\"We were not doing any evil.\\\" But, yes! Indeed, Allah is Knowing of what you used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 16\n        },\n        \"text\" : \"So enter the gates of Hell to abide eternally therein, and how wretched is the residence of the arrogant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 16\n        },\n        \"text\" : \"And it will be said to those who feared Allah, \\\"What did your Lord send down?\\\" They will say, \\\"[That which is] good.\\\" For those who do good in this world is good; and the home of the Hereafter is better. And how excellent is the home of the righteous -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 16\n        },\n        \"text\" : \"Gardens of perpetual residence, which they will enter, beneath which rivers flow. They will have therein whatever they wish. Thus does Allah reward the righteous -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 16\n        },\n        \"text\" : \"Do the disbelievers await [anything] except that the angels should come to them or there comes the command of your Lord? Thus did those do before them. And Allah wronged them not, but they had been wronging themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 16\n        },\n        \"text\" : \"And those who associate others with Allah say, \\\"If Allah had willed, we would not have worshipped anything other than Him, neither we nor our fathers, nor would we have forbidden anything through other than Him.\\\" Thus did those do before them. So is there upon the messengers except [the duty of] clear notification?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 16\n        },\n        \"text\" : \"And We certainly sent into every nation a messenger, [saying], \\\"Worship Allah and avoid Taghut.\\\" And among them were those whom Allah guided, and among them were those upon whom error was [deservedly] decreed. So proceed through the earth and observe how was the end of the deniers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 16\n        },\n        \"text\" : \"[Even] if you should strive for their guidance, [O Muhammad], indeed, Allah does not guide those He sends astray, and they will have no helpers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 16\n        },\n        \"text\" : \"And they swear by Allah their strongest oaths [that] Allah will not resurrect one who dies. But yes -  [it is] a true promise [binding] upon Him, but most of the people do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 16\n        },\n        \"text\" : \"And those who emigrated for [the cause of] Allah after they had been wronged -  We will surely settle them in this world in a good place; but the reward of the Hereafter is greater, if only they could know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 16\n        },\n        \"text\" : \"Then, do those who have planned evil deeds feel secure that Allah will not cause the earth to swallow them or that the punishment will not come upon them from where they do not perceive?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 16\n        },\n        \"text\" : \"Or that He would not seize them gradually [in a state of dread]? But indeed, your Lord is Kind and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 16\n        },\n        \"text\" : \"Have they not considered what things Allah has created?  Their shadows incline to the right and to the left, prostrating to Allah, while they are humble.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 16\n        },\n        \"text\" : \"And to Allah prostrates whatever is in the heavens and whatever is on the earth of creatures, and the angels [as well], and they are not arrogant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah has said, \\\"Do not take for yourselves two deities. He is but one God, so fear only Me.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 16\n        },\n        \"text\" : \"And to Him belongs whatever is in the heavens and the earth, and to Him is [due] worship constantly. Then is it other than Allah that you fear?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 16\n        },\n        \"text\" : \"And whatever you have of favor -  it is from Allah . Then when adversity touches you, to Him you cry for help.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 16\n        },\n        \"text\" : \"And they assign to what they do not know a portion of that which We have provided them. By Allah, you will surely be questioned about what you used to invent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 16\n        },\n        \"text\" : \"And they attribute to Allah daughters -  exalted is He -  and for them is what they desire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 16\n        },\n        \"text\" : \"For those who do not believe in the Hereafter is the description of evil; and for Allah is the highest attribute. And He is Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 16\n        },\n        \"text\" : \"And if Allah were to impose blame on the people for their wrongdoing, He would not have left upon the earth any creature, but He defers them for a specified term. And when their term has come, they will not remain behind an hour, nor will they precede [it].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 16\n        },\n        \"text\" : \"And they attribute to Allah that which they dislike, and their tongues assert the lie that they will have the best [from Him].  Assuredly, they will have the Fire, and they will be [therein] neglected.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 16\n        },\n        \"text\" : \"By Allah, We did certainly send [messengers] to nations before you, but Satan made their deeds attractive to them. And he is the disbelievers' ally today [as well], and they will have a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah has sent down rain from the sky and given life thereby to the earth after its lifelessness. Indeed in that is a sign for a people who listen.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 16\n        },\n        \"text\" : \"Then eat from all the fruits and follow the ways of your Lord laid down [for you].\\\" There emerges from their bellies a drink, varying in colors, in which there is healing for people. Indeed in that is a sign for a people who give thought.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah created you; then He will take you in death. And among you is he who is reversed to the most decrepit [old] age so that he will not know, after [having had] knowledge, a thing. Indeed, Allah is Knowing and Competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah has favored some of you over others in provision. But those who were favored would not hand over their provision to those whom their right hands possess so they would be equal to them therein. Then is it the favor of Allah they reject?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah has made for you from yourselves mates and has made for you from your mates sons and grandchildren and has provided for you from the good things. Then in falsehood do they believe and in the favor of Allah they disbelieve?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 16\n        },\n        \"text\" : \"And they worship besides Allah that which does not possess for them [the power of] provision from the heavens and the earth at all, and [in fact], they are unable.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 16\n        },\n        \"text\" : \"So do not assert similarities to Allah . Indeed, Allah knows and you do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 16\n        },\n        \"text\" : \"Allah presents an example: a slave [who is] owned and unable to do a thing and he to whom We have provided from Us good provision, so he spends from it secretly and publicly. Can they be equal? Praise to Allah ! But most of them do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah presents an example of two men, one of them dumb and unable to do a thing, while he is a burden to his guardian. Wherever he directs him, he brings no good.  Is he equal to one who commands justice, while he is on a straight path?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 16\n        },\n        \"text\" : \"And to Allah belongs the unseen [aspects] of the heavens and the earth. And the command for the Hour is not but as a glance of the eye or even nearer. Indeed, Allah is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah has extracted you from the wombs of your mothers not knowing a thing, and He made for you hearing and vision and intellect that perhaps you would be grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 16\n        },\n        \"text\" : \"Do they not see the birds controlled in the atmosphere of the sky? None holds them up except Allah . Indeed in that are signs for a people who believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah has made for you from your homes a place of rest and made for you from the hides of the animals tents which you find light on your day of travel and your day of encampment; and from their wool, fur and hair is furnishing and enjoyment for a time.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah has made for you, from that which He has created, shadows and has made for you from the mountains, shelters and has made for you garments which protect you from the heat and garments which protect you from your [enemy in] battle. Thus does He complete His favor upon you that you might submit [to Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 16\n        },\n        \"text\" : \"They recognize the favor of Allah ; then they deny it. And most of them are disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 16\n        },\n        \"text\" : \"And [mention] the Day when We will resurrect from every nation a witness. Then it will not be permitted to the disbelievers [to apologize or make excuses], nor will they be asked to appease [ Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 16\n        },\n        \"text\" : \"And when those who associated others with Allah see their \\\"partners,\\\" they will say,\\\" Our Lord, these are our partners [to You] whom we used to invoke besides You.\\\" But they will throw at them the statement, \\\"Indeed, you are liars.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 16\n        },\n        \"text\" : \"And they will impart to Allah that Day [their] submission, and lost from them is what they used to invent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 16\n        },\n        \"text\" : \"Those who disbelieved and averted [others] from the way of Allah -  We will increase them in punishment over [their] punishment for what corruption they were causing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 16\n        },\n        \"text\" : \"And [mention] the Day when We will resurrect among every nation a witness over them from themselves. And We will bring you, [O Muhammad], as a witness over your nation. And We have sent down to you the Book as clarification for all things and as guidance and mercy and good tidings for the Muslims.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 90,\n          \"sura\" : 16\n        },\n        \"text\" : \"Indeed, Allah orders justice and good conduct and giving to relatives and forbids immorality and bad conduct and oppression. He admonishes you that perhaps you will be reminded.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 16\n        },\n        \"text\" : \"And fulfill the covenant of Allah when you have taken it, [O believers], and do not break oaths after their confirmation while you have made Allah, over you, a witness. Indeed, Allah knows what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 16\n        },\n        \"text\" : \"And do not be like she who untwisted her spun thread after it was strong [by] taking your oaths as [means of] deceit between you because one community is more plentiful [in number or wealth] than another community. Allah only tries you thereby.  And He will surely make clear to you on the Day of Resurrection that over which you used to differ.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 16\n        },\n        \"text\" : \"And if Allah had willed, He could have made you [of] one religion, but He causes to stray whom He wills and guides whom He wills. And you will surely be questioned about what you used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 16\n        },\n        \"text\" : \"And do not take your oaths as [means of] deceit between you, lest a foot slip after it was [once] firm, and you would taste evil [in this world] for what [people] you diverted from the way of Allah, and you would have [in the Hereafter] a great punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 16\n        },\n        \"text\" : \"And do not exchange the covenant of Allah for a small price. Indeed, what is with Allah is best for you, if only you could know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 16\n        },\n        \"text\" : \"Whatever you have will end, but what Allah has is lasting. And We will surely give those who were patient their reward according to the best of what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 16\n        },\n        \"text\" : \"So when you recite the Qur'an, [first] seek refuge in Allah from Satan, the expelled [from His mercy].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 100,\n          \"sura\" : 16\n        },\n        \"text\" : \"His authority is only over those who take him as an ally and those who through him associate others with Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 16\n        },\n        \"text\" : \"And when We substitute a verse in place of a verse -  and Allah is most knowing of what He sends down -  they say, \\\"You, [O Muhammad], are but an inventor [of lies].\\\" But most of them do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 16\n        },\n        \"text\" : \"Indeed, those who do not believe in the verses of Allah - Allah will not guide them, and for them is a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 105,\n          \"sura\" : 16\n        },\n        \"text\" : \"They only invent falsehood who do not believe in the verses of Allah, and it is those who are the liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 16\n        },\n        \"text\" : \"Whoever disbelieves in Allah after his belief...  except for one who is forced [to renounce his religion] while his heart is secure in faith. But those who [willingly] open their breasts to disbelief, upon them is wrath from Allah, and for them is a great punishment;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 16\n        },\n        \"text\" : \"That is because they preferred the worldly life over the Hereafter and that Allah does not guide the disbelieving people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 16\n        },\n        \"text\" : \"Those are the ones over whose hearts and hearing and vision Allah has sealed, and it is those who are the heedless.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 16\n        },\n        \"text\" : \"Then, indeed your Lord, to those who emigrated after they had been compelled [to renounce their religion] and thereafter fought [for the cause of Allah ] and were patient -  indeed, your Lord, after that, is Forgiving and Merciful\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 16\n        },\n        \"text\" : \"And Allah presents an example: a city which was safe and secure, its provision coming to it in abundance from every location, but it denied the favors of Allah . So Allah made it taste the envelopment of hunger and fear for what they had been doing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 16\n        },\n        \"text\" : \"Then eat of what Allah has provided for you [which is] lawful and good. And be grateful for the favor of Allah, if it is [indeed] Him that you worship.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 115,\n          \"sura\" : 16\n        },\n        \"text\" : \"He has only forbidden to you dead animals, blood, the flesh of swine, and that which has been dedicated to other than Allah .  But whoever is forced [by necessity], neither desiring [it] nor transgressing [its limit] -  then indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 16\n        },\n        \"text\" : \"And do not say about what your tongues assert of untruth, \\\"This is lawful and this is unlawful,\\\" to invent falsehood about Allah . Indeed, those who invent falsehood about Allah will not succeed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 120,\n          \"sura\" : 16\n        },\n        \"text\" : \"Indeed, Abraham was a [comprehensive] leader, devoutly obedient to Allah, inclining toward truth, and he was not of those who associate others with Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 121,\n          \"sura\" : 16\n        },\n        \"text\" : \"[He was] grateful for His favors. Allah chose him and guided him to a straight path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 123,\n          \"sura\" : 16\n        },\n        \"text\" : \"Then We revealed to you, [O Muhammad], to follow the religion of Abraham, inclining toward truth; and he was not of those who associate with Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 127,\n          \"sura\" : 16\n        },\n        \"text\" : \"And be patient, [O Muhammad], and your patience is not but through Allah . And do not grieve over them and do not be in distress over what they conspire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 128,\n          \"sura\" : 16\n        },\n        \"text\" : \"Indeed, Allah is with those who fear Him and those who are doers of good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 17\n        },\n        \"text\" : \"[Then Allah said], \\\"It is expected, [if you repent], that your Lord will have mercy upon you. But if you return [to sin], We will return [to punishment]. And We have made Hell, for the disbelievers, a prison-bed.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 17\n        },\n        \"text\" : \"But whoever desires the Hereafter and exerts the effort due to it while he is a believer - it is those whose effort is ever appreciated [by Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 17\n        },\n        \"text\" : \"Do not make [as equal] with Allah another deity and [thereby] become censured and forsaken.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 17\n        },\n        \"text\" : \"And lower to them the wing of humility out of mercy and say, \\\"My Lord, have mercy upon them as they brought me up [when I was] small.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 17\n        },\n        \"text\" : \"And do not kill the soul which Allah has forbidden, except by right. And whoever is killed unjustly -  We have given his heir authority, but let him not exceed limits in [the matter of] taking life. Indeed, he has been supported [by the law].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 17\n        },\n        \"text\" : \"And do not pursue that of which you have no knowledge. Indeed, the hearing, the sight and the heart -  about all those [one] will be questioned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 17\n        },\n        \"text\" : \"All that -  its evil is ever, in the sight of your Lord, detested.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 17\n        },\n        \"text\" : \"That is from what your Lord has revealed to you, [O Muhammad], of wisdom. And, [O mankind], do not make [as equal] with Allah another deity, lest you be thrown into Hell, blamed and banished.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 17\n        },\n        \"text\" : \"The seven heavens and the earth and whatever is in them exalt Him. And there is not a thing except that it exalts [ Allah ] by His praise, but you do not understand their [way of] exalting. Indeed, He is ever Forbearing and Forgiving.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 17\n        },\n        \"text\" : \"On the Day He will call you and you will respond with praise of Him and think that you had not remained [in the world] except for a little.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 17\n        },\n        \"text\" : \"[ Allah ] said, \\\"Go, for whoever of them follows you, indeed Hell will be the recompense of you -  an ample recompense.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 17\n        },\n        \"text\" : \"And when adversity touches you at sea, lost are [all] those you invoke except for Him. But when He delivers you to the land, you turn away [from Him]. And ever is man ungrateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 17\n        },\n        \"text\" : \"Then do you feel secure that [instead] He will not cause a part of the land to swallow you or send against you a storm of stones? Then you would not find for yourselves an advocate.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 17\n        },\n        \"text\" : \"[Mention, O Muhammad], the Day We will call forth every people with their record [of deeds]. Then whoever is given his record in his right hand -  those will read their records, and injustice will not be done to them, [even] as much as a thread [inside the date seed].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 92,\n          \"sura\" : 17\n        },\n        \"text\" : \"Or you make the heaven fall upon us in fragments as you have claimed or you bring Allah and the angels before [us]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 94,\n          \"sura\" : 17\n        },\n        \"text\" : \"And what prevented the people from believing when guidance came to them except that they said, \\\"Has Allah sent a human messenger?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 17\n        },\n        \"text\" : \"Say, \\\"Sufficient is Allah as Witness between me and you. Indeed he is ever, concerning His servants, Acquainted and Seeing.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 17\n        },\n        \"text\" : \"And whoever Allah guides -  he is the [rightly] guided; and whoever He sends astray - you will never find for them protectors besides Him, and We will gather them on the Day of Resurrection [fallen] on their faces -  blind, dumb and deaf. Their refuge is Hell; every time it subsides We increase them in blazing fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 17\n        },\n        \"text\" : \"Do they not see that Allah, who created the heavens and earth, is [the one] Able to create the likes of them? And He has appointed for them a term, about which there is no doubt. But the wrongdoers refuse [anything] except disbelief.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 17\n        },\n        \"text\" : \"So he intended to drive them from the land, but We drowned him and those with him all together.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 107,\n          \"sura\" : 17\n        },\n        \"text\" : \"Say, \\\"Believe in it or do not believe. Indeed, those who were given knowledge before it - when it is recited to them, they fall upon their faces in prostration,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 17\n        },\n        \"text\" : \"And they fall upon their faces weeping, and the Qur'an increases them in humble submission.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 17\n        },\n        \"text\" : \"Say, \\\"Call upon Allah or call upon the Most Merciful. Whichever [name] you call -  to Him belong the best names.\\\" And do not recite [too] loudly in your prayer or [too] quietly but seek between that an [intermediate] way.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 17\n        },\n        \"text\" : \"And say, \\\"Praise to Allah, who has not taken a son and has had no partner in [His] dominion and has no [need of a] protector out of weakness; and glorify Him with [great] glorification.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 18\n        },\n        \"text\" : \"[All] praise is [due] to Allah, who has sent down upon His Servant the Book and has not made therein any deviance.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 18\n        },\n        \"text\" : \"And to warn those who say, \\\" Allah has taken a son.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 18\n        },\n        \"text\" : \"These, our people, have taken besides Him deities. Why do they not bring for [worship of] them a clear authority? And who is more unjust than one who invents about Allah a lie?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 18\n        },\n        \"text\" : \"[The youths said to one another], \\\"And when you have withdrawn from them and that which they worship other than Allah, retreat to the cave. Your Lord will spread out for you of His mercy and will prepare for you from your affair facility.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 18\n        },\n        \"text\" : \"And [had you been present], you would see the sun when it rose, inclining away from their cave on the right, and when it set, passing away from them on the left, while they were [laying] within an open space thereof. That was from the signs of Allah . He whom Allah guides is the [rightly] guided, but he whom He leaves astray -  never will you find for him a protecting guide.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 18\n        },\n        \"text\" : \"And similarly, We caused them to be found that they [who found them] would know that the promise of Allah is truth and that of the Hour there is no doubt. [That was] when they disputed among themselves about their affair and [then] said, \\\"Construct over them a structure. Their Lord is most knowing about them.\\\" Said those who prevailed in the matter, \\\"We will surely take [for ourselves] over them a masjid.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 18\n        },\n        \"text\" : \"Except [when adding], \\\"If Allah wills.\\\" And remember your Lord when you forget [it] and say, \\\"Perhaps my Lord will guide me to what is nearer than this to right conduct.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 18\n        },\n        \"text\" : \"Say, \\\" Allah is most knowing of how long they remained. He has [knowledge of] the unseen [aspects] of the heavens and the earth. How Seeing is He and how Hearing! They have not besides Him any protector, and He shares not His legislation with anyone.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 18\n        },\n        \"text\" : \"And keep yourself patient [by being] with those who call upon their Lord in the morning and the evening, seeking His countenance. And let not your eyes pass beyond them, desiring adornments of the worldly life, and do not obey one whose heart We have made heedless of Our remembrance and who follows his desire and whose affair is ever [in] neglect.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 18\n        },\n        \"text\" : \"And say, \\\"The truth is from your Lord, so whoever wills -  let him believe; and whoever wills -  let him disbelieve.\\\" Indeed, We have prepared for the wrongdoers a fire whose walls will surround them. And if they call for relief, they will be relieved with water like murky oil, which scalds [their] faces. Wretched is the drink, and evil is the resting place.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 18\n        },\n        \"text\" : \"Indeed, those who have believed and done righteous deeds -  indeed, We will not allow to be lost the reward of any who did well in deeds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 18\n        },\n        \"text\" : \"Each of the two gardens produced its fruit and did not fall short thereof in anything. And We caused to gush forth within them a river.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 18\n        },\n        \"text\" : \"But as for me, He is Allah, my Lord, and I do not associate with my Lord anyone.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 18\n        },\n        \"text\" : \"And why did you, when you entered your garden, not say, 'What Allah willed [has occurred]; there is no power except in Allah '? Although you see me less than you in wealth and children,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 18\n        },\n        \"text\" : \"And there was for him no company to aid him other than Allah, nor could he defend himself.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 18\n        },\n        \"text\" : \"There the authority is [completely] for Allah, the Truth. He is best in reward and best in outcome.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 18\n        },\n        \"text\" : \"And present to them the example of the life of this world, [its being] like rain which We send down from the sky, and the vegetation of the earth mingles with it and [then] it becomes dry remnants, scattered by the winds. And Allah is ever, over all things, Perfect in Ability.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 18\n        },\n        \"text\" : \"And the record [of deeds] will be placed [open], and you will see the criminals fearful of that within it, and they will say, \\\"Oh, woe to us! What is this book that leaves nothing small or great except that it has enumerated it?\\\" And they will find what they did present [before them]. And your Lord does injustice to no one.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 18\n        },\n        \"text\" : \"And [mention] when We said to the angels, \\\"Prostrate to Adam,\\\" and they prostrated, except for Iblees. He was of the jinn and departed from the command of his Lord. Then will you take him and his descendants as allies other than Me while they are enemies to you? Wretched it is for the wrongdoers as an exchange.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 18\n        },\n        \"text\" : \"And [warn of] the Day when He will say, \\\"Call 'My partners' whom you claimed,\\\" and they will invoke them, but they will not respond to them. And We will put between them [a valley of] destruction.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 18\n        },\n        \"text\" : \"And the criminals will see the Fire and will be certain that they are to fall therein. And they will not find from it a way elsewhere.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 18\n        },\n        \"text\" : \"And nothing has prevented the people from believing when guidance came to them and from asking forgiveness of their Lord except that there [must] befall them the [accustomed] precedent of the former peoples or that the punishment should come [directly] before them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 18\n        },\n        \"text\" : \"[Moses] said, \\\"You will find me, if Allah wills, patient, and I will not disobey you in [any] order.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 18\n        },\n        \"text\" : \"So they set out, until when they came to the people of a town, they asked its people for food, but they refused to offer them hospitality. And they found therein a wall about to collapse, so al-Khidhr restored it. [Moses] said, \\\"If you wished, you could have taken for it a payment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 18\n        },\n        \"text\" : \"And as for the wall, it belonged to two orphan boys in the city, and there was beneath it a treasure for them, and their father had been righteous. So your Lord intended that they reach maturity and extract their treasure, as a mercy from your Lord. And I did it not of my own accord. That is the interpretation of that about which you could not have patience.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 18\n        },\n        \"text\" : \"Until, when he reached the setting of the sun, he found it [as if] setting in a spring of dark mud, and he found near it a people. Allah said, \\\"O Dhul-Qarnayn, either you punish [them] or else adopt among them [a way of] goodness.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 18\n        },\n        \"text\" : \"Thus. And We had encompassed [all] that he had in knowledge.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 18\n        },\n        \"text\" : \"Bring me sheets of iron\\\" -  until, when he had leveled [them] between the two mountain walls, he said, \\\"Blow [with bellows],\\\" until when he had made it [like] fire, he said, \\\"Bring me, that I may pour over it molten copper.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 18\n        },\n        \"text\" : \"Then do those who disbelieve think that they can take My servants instead of Me as allies? Indeed, We have prepared Hell for the disbelievers as a lodging.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 18\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"Shall we [believers] inform you of the greatest losers as to [their] deeds?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 18\n        },\n        \"text\" : \"Wherein they abide eternally. They will not desire from it any transfer.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 19\n        },\n        \"text\" : \"When he called to his Lord a private supplication.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 19\n        },\n        \"text\" : \"So he came out to his people from the prayer chamber and signaled to them to exalt [ Allah ] in the morning and afternoon.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 19\n        },\n        \"text\" : \"[ Allah ] said, \\\"O John, take the Scripture with determination.\\\" And We gave him judgement [while yet] a boy\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 19\n        },\n        \"text\" : \"And affection from Us and purity, and he was fearing of Allah\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 19\n        },\n        \"text\" : \"She said, \\\"Indeed, I seek refuge in the Most Merciful from you, [so leave me], if you should be fearing of Allah .\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 19\n        },\n        \"text\" : \"But he called her from below her, \\\"Do not grieve; your Lord has provided beneath you a stream.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 19\n        },\n        \"text\" : \"[Jesus] said, \\\"Indeed, I am the servant of Allah . He has given me the Scripture and made me a prophet.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 19\n        },\n        \"text\" : \"It is not [befitting] for Allah to take a son; exalted is He!  When He decrees an affair, He only says to it, \\\"Be,\\\" and it is.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 19\n        },\n        \"text\" : \"[Jesus said], \\\"And indeed, Allah is my Lord and your Lord, so worship Him. That is a straight path.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 19\n        },\n        \"text\" : \"[Mention] when he said to his father, \\\"O my father, why do you worship that which does not hear and does not see and will not benefit you at all?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 19\n        },\n        \"text\" : \"And I will leave you and those you invoke other than Allah and will invoke my Lord.  I expect that I will not be in invocation to my Lord unhappy.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 19\n        },\n        \"text\" : \"So when he had left them and those they worshipped other than Allah, We gave him Isaac and Jacob, and each [of them] We made a prophet.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 19\n        },\n        \"text\" : \"And We called him from the side of the mount at [his] right and brought him near, confiding [to him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 19\n        },\n        \"text\" : \"Those were the ones upon whom Allah bestowed favor from among the prophets of the descendants of Adam and of those We carried [in the ship] with Noah, and of the descendants of Abraham and Israel, and of those whom We guided and chose.  When the verses of the Most Merciful were recited to them, they fell in prostration and weeping.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 19\n        },\n        \"text\" : \"Except those who repent, believe and do righteousness; for those will enter Paradise and will not be wronged at all.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 19\n        },\n        \"text\" : \"That is Paradise, which We give as inheritance to those of Our servants who were fearing of Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 19\n        },\n        \"text\" : \"Then We will save those who feared Allah and leave the wrongdoers within it, on their knees.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 19\n        },\n        \"text\" : \"And Allah increases those who were guided, in guidance, and the enduring good deeds are better to your Lord for reward and better for recourse.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 19\n        },\n        \"text\" : \"And they have taken besides Allah [false] deities that they would be for them [a source of] honor.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 19\n        },\n        \"text\" : \"And all of them are coming to Him on the Day of Resurrection alone.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 20\n        },\n        \"text\" : \"But only as a reminder for those who fear [ Allah ] -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 20\n        },\n        \"text\" : \"Allah -  there is no deity except Him. To Him belong  the best names.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 20\n        },\n        \"text\" : \"And when he came to it, he was called, \\\"O Moses,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 20\n        },\n        \"text\" : \"Indeed, I am your Lord, so remove your sandals. Indeed, you are in the sacred valley of Tuwa.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 20\n        },\n        \"text\" : \"Indeed, I am Allah . There is no deity except Me, so worship Me and establish prayer for My remembrance.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 20\n        },\n        \"text\" : \"[ Allah ] said, \\\"Throw it down, O Moses.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 20\n        },\n        \"text\" : \"[ Allah ] said, \\\"Seize it and fear not; We will return it to its former condition.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 20\n        },\n        \"text\" : \"[ Allah ] said, \\\"You have been granted your request, O Moses.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 20\n        },\n        \"text\" : \"[And We favored you] when your sister went and said, 'Shall I direct you to someone who will be responsible for him?' So We restored you to your mother that she might be content and not grieve. And you killed someone, but We saved you from retaliation and tried you with a [severe] trial. And you remained [some] years among the people of Madyan. Then you came [here] at the decreed time, O Moses.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 20\n        },\n        \"text\" : \"And speak to him with gentle speech that perhaps he may be reminded or fear [ Allah ].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 20\n        },\n        \"text\" : \"[ Allah ] said, \\\"Fear not. Indeed, I am with you both; I hear and I see.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 20\n        },\n        \"text\" : \"And We certainly showed Pharaoh Our signs -  all of them -  but he denied and refused.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 20\n        },\n        \"text\" : \"Moses said to the magicians summoned by Pharaoh, \\\"Woe to you! Do not invent a lie against Allah or He will exterminate you with a punishment; and he has failed who invents [such falsehood].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 20\n        },\n        \"text\" : \"Allah said, \\\"Fear not. Indeed, it is you who are superior.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 20\n        },\n        \"text\" : \"And throw what is in your right hand; it will swallow up what they have crafted. What they have crafted is but the trick of a magician, and the magician will not succeed wherever he is.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 20\n        },\n        \"text\" : \"Indeed, we have believed in our Lord that He may forgive us our sins and what you compelled us [to do] of magic. And Allah is better and more enduring.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 20\n        },\n        \"text\" : \"Gardens of perpetual residence beneath which rivers flow, wherein they abide eternally. And that is the reward of one who purifies himself.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 20\n        },\n        \"text\" : \"[Saying], \\\"Eat from the good things with which We have provided you and do not transgress [or oppress others] therein, lest My anger should descend upon you. And he upon whom My anger descends has certainly fallen.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 20\n        },\n        \"text\" : \"[ Allah ] said, \\\"And what made you hasten from your people, O Moses?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 20\n        },\n        \"text\" : \"[ Allah ] said, \\\"But indeed, We have tried your people after you [departed], and the Samiri has led them astray.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 20\n        },\n        \"text\" : \"Your god is only Allah, except for whom there is no deity. He has encompassed all things in knowledge.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 101,\n          \"sura\" : 20\n        },\n        \"text\" : \"[Abiding] eternally therein, and evil it is for them on the Day of Resurrection as a load -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 20\n        },\n        \"text\" : \"That Day, everyone will follow [the call of] the Caller [with] no deviation therefrom, and [all] voices will be stilled before the Most Merciful, so you will not hear except a whisper [of footsteps].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 20\n        },\n        \"text\" : \"Allah knows what is [presently] before them and what will be after them, but they do not encompass it in knowledge.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 111,\n          \"sura\" : 20\n        },\n        \"text\" : \"And [all] faces will be humbled before the Ever-Living, the Sustainer of existence. And he will have failed who carries injustice.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 114,\n          \"sura\" : 20\n        },\n        \"text\" : \"So high [above all] is Allah, the Sovereign, the Truth. And, [O Muhammad], do not hasten with [recitation of] the Qur'an before its revelation is completed to you, and say, \\\"My Lord, increase me in knowledge.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 120,\n          \"sura\" : 20\n        },\n        \"text\" : \"Then Satan whispered to him; he said, \\\"O Adam, shall I direct you to the tree of eternity and possession that will not deteriorate?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 123,\n          \"sura\" : 20\n        },\n        \"text\" : \"[ Allah ] said, \\\"Descend from Paradise -  all, [your descendants] being enemies to one another. And if there should come to you guidance from Me -  then whoever follows My guidance will neither go astray [in the world] nor suffer [in the Hereafter].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 126,\n          \"sura\" : 20\n        },\n        \"text\" : \"[ Allah ] will say, \\\"Thus did Our signs come to you, and you forgot them; and thus will you this Day be forgotten.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 130,\n          \"sura\" : 20\n        },\n        \"text\" : \"So be patient over what they say and exalt [ Allah ] with praise of your Lord before the rising of the sun and before its setting; and during periods of the night [exalt Him] and at the ends of the day, that you may be satisfied.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 21\n        },\n        \"text\" : \"Had there been within the heavens and earth gods besides Allah, they both would have been ruined. So exalted is Allah, Lord of the Throne, above what they describe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 21\n        },\n        \"text\" : \"And it is He who created the night and the day and the sun and the moon; all [heavenly bodies] in an orbit are swimming.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 21\n        },\n        \"text\" : \"Say, \\\"I only warn you by revelation.\\\" But the deaf do not hear the call when they are warned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 21\n        },\n        \"text\" : \"And We place the scales of justice for the Day of Resurrection, so no soul will be treated unjustly at all. And if there is [even] the weight of a mustard seed, We will bring it forth. And sufficient are We as accountant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 21\n        },\n        \"text\" : \"And [I swear] by Allah, I will surely plan against your idols after you have turned and gone away.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 21\n        },\n        \"text\" : \"They said, \\\"We heard a young man mention them who is called Abraham.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 21\n        },\n        \"text\" : \"He said, \\\"Then do you worship instead of Allah that which does not benefit you at all or harm you?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 21\n        },\n        \"text\" : \"Uff to you and to what you worship instead of Allah . Then will you not use reason?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 21\n        },\n        \"text\" : \"Allah said, \\\"O fire, be coolness and safety upon Abraham.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 21\n        },\n        \"text\" : \"And We gave him Isaac and Jacob in addition, and all [of them] We made righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 21\n        },\n        \"text\" : \"And [mention] Noah, when he called [to Allah ] before [that time], so We responded to him and saved him and his family from the great flood.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 21\n        },\n        \"text\" : \"And We saved him from the people who denied Our signs. Indeed, they were a people of evil, so We drowned them, all together.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 21\n        },\n        \"text\" : \"And to Solomon [We subjected] the wind, blowing forcefully, proceeding by his command toward the land which We had blessed. And We are ever, of all things, Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 21\n        },\n        \"text\" : \"And [mention] Job, when he called to his Lord, \\\"Indeed, adversity has touched me, and you are the Most Merciful of the merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 21\n        },\n        \"text\" : \"So We responded to him and removed what afflicted him of adversity. And We gave him [back] his family and the like thereof with them as mercy from Us and a reminder for the worshippers [of Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 21\n        },\n        \"text\" : \"And [mention] Ishmael and Idrees and Dhul-Kifl; all were of the patient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 21\n        },\n        \"text\" : \"And [mention] the man of the fish, when he went off in anger and thought that We would not decree [anything] upon him. And he called out within the darknesses, \\\"There is no deity except You; exalted are You. Indeed, I have been of the wrongdoers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 21\n        },\n        \"text\" : \"And [mention] Zechariah, when he called to his Lord, \\\"My Lord, do not leave me alone [with no heir], while you are the best of inheritors.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 21\n        },\n        \"text\" : \"And [yet] they divided their affair among themselves, [but] all to Us will return.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 98,\n          \"sura\" : 21\n        },\n        \"text\" : \"Indeed, you [disbelievers] and what you worship other than Allah are the firewood of Hell. You will be coming to [enter] it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 99,\n          \"sura\" : 21\n        },\n        \"text\" : \"Had these [false deities] been [actual] gods, they would not have come to it, but all are eternal therein.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 21\n        },\n        \"text\" : \"They will not hear its sound, while they are, in that which their souls desire, abiding eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 109,\n          \"sura\" : 21\n        },\n        \"text\" : \"But if they turn away, then say, \\\"I have announced to [all of] you equally. And I know not whether near or far is that which you are promised.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 22\n        },\n        \"text\" : \"On the Day you see it every nursing mother will be distracted from that [child] she was nursing, and every pregnant woman will abort her pregnancy, and you will see the people [appearing] intoxicated while they are not intoxicated; but the punishment of Allah is severe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 22\n        },\n        \"text\" : \"And of the people is he who disputes about Allah without knowledge and follows every rebellious devil.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 22\n        },\n        \"text\" : \"That is because Allah is the Truth and because He gives life to the dead and because He is over all things competent\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 22\n        },\n        \"text\" : \"And [that they may know] that the Hour is coming -  no doubt about it -  and that Allah will resurrect those in the graves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 22\n        },\n        \"text\" : \"And of the people is he who disputes about Allah without knowledge or guidance or an enlightening book [from Him],\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 22\n        },\n        \"text\" : \"Twisting his neck [in arrogance] to mislead [people] from the way of Allah . For him in the world is disgrace, and We will make him taste on the Day of Resurrection the punishment of the Burning Fire [while it is said],\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 22\n        },\n        \"text\" : \"\\\"That is for what your hands have put forth and because Allah is not ever unjust to [His] servants.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 22\n        },\n        \"text\" : \"And of the people is he who worships Allah on an edge. If he is touched by good, he is reassured by it; but if he is struck by trial, he turns on his face [to the other direction]. He has lost [this] world and the Hereafter. That is what is the manifest loss.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 22\n        },\n        \"text\" : \"He invokes instead of Allah that which neither harms him nor benefits him. That is what is the extreme error.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 22\n        },\n        \"text\" : \"Indeed, Allah will admit those who believe and do righteous deeds to gardens beneath which rivers flow. Indeed, Allah does what He intends.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 22\n        },\n        \"text\" : \"Whoever should think that Allah will not support [Prophet Muhammad] in this world and the Hereafter -  let him extend a rope to the ceiling, then cut off [his breath], and let him see: will his effort remove that which enrages [him]?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 22\n        },\n        \"text\" : \"And thus have We sent the Qur'an down as verses of clear evidence and because Allah guides whom He intends.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 22\n        },\n        \"text\" : \"Indeed, those who have believed and those who were Jews and the Sabeans and the Christians and the Magians and those who associated with Allah - Allah will judge between them on the Day of Resurrection. Indeed Allah is, over all things, Witness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 22\n        },\n        \"text\" : \"Do you not see that to Allah prostrates whoever is in the heavens and whoever is on the earth and the sun, the moon, the stars, the mountains, the trees, the moving creatures and many of the people? But upon many the punishment has been justified. And he whom Allah humiliates -  for him there is no bestower of honor. Indeed, Allah does what He wills.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 22\n        },\n        \"text\" : \"Indeed, Allah will admit those who believe and do righteous deeds to gardens beneath which rivers flow. They will be adorned therein with bracelets of gold and pearl, and their garments therein will be silk.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 22\n        },\n        \"text\" : \"Indeed, those who have disbelieved and avert [people] from the way of Allah and [from] al-Masjid al-Haram, which We made for the people -  equal are the resident therein and one from outside; and [also] whoever intends [a deed] therein of deviation [in religion] or wrongdoing -  We will make him taste of a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 22\n        },\n        \"text\" : \"That they may witness benefits for themselves and mention the name of Allah on known days over what He has provided for them of [sacrificial] animals. So eat of them and feed the miserable and poor.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 22\n        },\n        \"text\" : \"That [has been commanded], and whoever honors the sacred ordinances of Allah -  it is best for him in the sight of his Lord. And permitted to you are the grazing livestock, except what is recited to you. So avoid the uncleanliness of idols and avoid false statement,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 22\n        },\n        \"text\" : \"Inclining [only] to Allah, not associating [anything] with Him. And he who associates with Allah -  it is as though he had fallen from the sky and was snatched by the birds or the wind carried him down into a remote place.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 22\n        },\n        \"text\" : \"That [is so]. And whoever honors the symbols of Allah -  indeed, it is from the piety of hearts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 22\n        },\n        \"text\" : \"And for all religion We have appointed a rite [of sacrifice] that they may mention the name of Allah over what He has provided for them of [sacrificial] animals. For your god is one God, so to Him submit. And, [O Muhammad], give good tidings to the humble [before their Lord]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 22\n        },\n        \"text\" : \"Who, when Allah is mentioned, their hearts are fearful, and [to] the patient over what has afflicted them, and the establishers of prayer and those who spend from what We have provided them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 22\n        },\n        \"text\" : \"And the camels and cattle We have appointed for you as among the symbols of Allah ; for you therein is good. So mention the name of Allah upon them when lined up [for sacrifice]; and when they are [lifeless] on their sides, then eat from them and feed the needy and the beggar. Thus have We subjected them to you that you may be grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 22\n        },\n        \"text\" : \"Their meat will not reach Allah, nor will their blood, but what reaches Him is piety from you. Thus have We subjected them to you that you may glorify Allah for that [to] which He has guided you; and give good tidings to the doers of good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 22\n        },\n        \"text\" : \"Indeed, Allah defends those who have believed. Indeed, Allah does not like everyone treacherous and ungrateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 22\n        },\n        \"text\" : \"Permission [to fight] has been given to those who are being fought, because they were wronged. And indeed, Allah is competent to give them victory.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 22\n        },\n        \"text\" : \"[They are] those who have been evicted from their homes without right -  only because they say, \\\"Our Lord is Allah .\\\" And were it not that Allah checks the people, some by means of others, there would have been demolished monasteries, churches, synagogues, and mosques in which the name of Allah is much mentioned. And Allah will surely support those who support Him. Indeed, Allah is Powerful and Exalted in Might.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 22\n        },\n        \"text\" : \"[And they are] those who, if We give them authority in the land, establish prayer and give zakah and enjoin what is right and forbid what is wrong. And to Allah belongs the outcome of [all] matters.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 22\n        },\n        \"text\" : \"And how many a city did We destroy while it was committing wrong -  so it is [now] fallen into ruin -  and [how many] an abandoned well and [how many] a lofty palace.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 22\n        },\n        \"text\" : \"And they urge you to hasten the punishment. But Allah will never fail in His promise. And indeed, a day with your Lord is like a thousand years of those which you count.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 22\n        },\n        \"text\" : \"And We did not send before you any messenger or prophet except that when he spoke [or recited], Satan threw into it [some misunderstanding]. But Allah abolishes that which Satan throws in; then Allah makes precise His verses. And Allah is Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 22\n        },\n        \"text\" : \"And so those who were given knowledge may know that it is the truth from your Lord and [therefore] believe in it, and their hearts humbly submit to it. And indeed is Allah the Guide of those who have believed to a straight path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 22\n        },\n        \"text\" : \"[All] sovereignty that Day is for Allah ; He will judge between them. So they who believed and did righteous deeds will be in the Gardens of Pleasure.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 22\n        },\n        \"text\" : \"And those who emigrated for the cause of Allah and then were killed or died - Allah will surely provide for them a good provision. And indeed, it is Allah who is the best of providers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 22\n        },\n        \"text\" : \"He will surely cause them to enter an entrance with which they will be pleased, and indeed, Allah is Knowing and Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 22\n        },\n        \"text\" : \"That [is so]. And whoever responds [to injustice] with the equivalent of that with which he was harmed and then is tyrannized - Allah will surely aid him. Indeed, Allah is Pardoning and Forgiving.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 22\n        },\n        \"text\" : \"That is because Allah causes the night to enter the day and causes the day to enter the night and because Allah is Hearing and Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 22\n        },\n        \"text\" : \"That is because Allah is the Truth, and that which they call upon other than Him is falsehood, and because Allah is the Most High, the Grand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 22\n        },\n        \"text\" : \"Do you not see that Allah has sent down rain from the sky and the earth becomes green? Indeed, Allah is Subtle and Acquainted.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 22\n        },\n        \"text\" : \"To Him belongs what is in the heavens and what is on the earth. And indeed, Allah is the Free of need, the Praiseworthy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 22\n        },\n        \"text\" : \"Do you not see that Allah has subjected to you whatever is on the earth and the ships which run through the sea by His command? And He restrains the sky from falling upon the earth, unless by His permission. Indeed Allah, to the people, is Kind and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 22\n        },\n        \"text\" : \"And if they dispute with you, then say, \\\" Allah is most knowing of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 22\n        },\n        \"text\" : \"Allah will judge between you on the Day of Resurrection concerning that over which you used to differ.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 22\n        },\n        \"text\" : \"Do you not know that Allah knows what is in the heaven and earth? Indeed, that is in a Record. Indeed that, for Allah, is easy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 22\n        },\n        \"text\" : \"And they worship besides Allah that for which He has not sent down authority and that of which they have no knowledge. And there will not be for the wrongdoers any helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 22\n        },\n        \"text\" : \"And when Our verses are recited to them as clear evidences, you recognize in the faces of those who disbelieve disapproval. They are almost on the verge of assaulting those who recite to them Our verses. Say, \\\"Then shall I inform you of [what is] worse than that? [It is] the Fire which Allah has promised those who disbelieve, and wretched is the destination.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 22\n        },\n        \"text\" : \"O people, an example is presented, so listen to it. Indeed, those you invoke besides Allah will never create [as much as] a fly, even if they gathered together for that purpose. And if the fly should steal away from them a [tiny] thing, they could not recover it from him. Weak are the pursuer and pursued.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 22\n        },\n        \"text\" : \"They have not appraised Allah with true appraisal. Indeed, Allah is Powerful and Exalted in Might.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 22\n        },\n        \"text\" : \"Allah chooses from the angels messengers and from the people. Indeed, Allah is Hearing and Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 22\n        },\n        \"text\" : \"He knows what is [presently] before them and what will be after them. And to Allah will be returned [all] matters.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 22\n        },\n        \"text\" : \"And strive for Allah with the striving due to Him. He has chosen you and has not placed upon you in the religion any difficulty. [It is] the religion of your father, Abraham. Allah named you \\\"Muslims\\\" before [in former scriptures] and in this [revelation] that the Messenger may be a witness over you and you may be witnesses over the people. So establish prayer and give zakah and hold fast to Allah . He is your protector; and excellent is the protector, and excellent is the helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 23\n        },\n        \"text\" : \"Who will inherit al-Firdaus. They will abide therein eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 23\n        },\n        \"text\" : \"Then We made the sperm-drop into a clinging clot, and We made the clot into a lump [of flesh], and We made [from] the lump, bones, and We covered the bones with flesh; then We developed him into another creation. So blessed is Allah, the best of creators.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 23\n        },\n        \"text\" : \"And We had certainly sent Noah to his people, and he said, \\\"O my people, worship Allah ; you have no deity other than Him; then will you not fear Him?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 23\n        },\n        \"text\" : \"But the eminent among those who disbelieved from his people said, \\\"This is not but a man like yourselves who wishes to take precedence over you; and if Allah had willed [to send a messenger], He would have sent down angels. We have not heard of this among our forefathers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 23\n        },\n        \"text\" : \"And when you have boarded the ship, you and those with you, then say, 'Praise to Allah who has saved us from the wrongdoing people.'\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 23\n        },\n        \"text\" : \"And We sent among them a messenger from themselves, [saying], \\\"Worship Allah ; you have no deity other than Him; then will you not fear Him?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 23\n        },\n        \"text\" : \"He is not but a man who has invented a lie about Allah, and we will not believe him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 23\n        },\n        \"text\" : \"[ Allah ] said, \\\"After a little, they will surely become regretful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 23\n        },\n        \"text\" : \"[ Allah said], \\\"O messengers, eat from the good foods and work righteousness. Indeed, I, of what you do, am Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 23\n        },\n        \"text\" : \"Until when We seize their affluent ones with punishment, at once they are crying [to Allah ] for help.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 23\n        },\n        \"text\" : \"They will say, \\\"To Allah .\\\" Say, \\\"Then will you not remember?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 23\n        },\n        \"text\" : \"They will say, \\\"[They belong] to Allah .\\\" Say, \\\"Then will you not fear Him?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 23\n        },\n        \"text\" : \"Say, \\\"In whose hand is the realm of all things -  and He protects while none can protect against Him -  if you should know?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 23\n        },\n        \"text\" : \"They will say, \\\"[All belongs] to Allah .\\\" Say, \\\"Then how are you deluded?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 23\n        },\n        \"text\" : \"Allah has not taken any son, nor has there ever been with Him any deity. [If there had been], then each deity would have taken what it created, and some of them would have sought to overcome others. Exalted is Allah above what they describe [concerning Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 103,\n          \"sura\" : 23\n        },\n        \"text\" : \"But those whose scales are light -  those are the ones who have lost their souls, [being] in Hell, abiding eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 112,\n          \"sura\" : 23\n        },\n        \"text\" : \"[ Allah ] will say, \\\"How long did you remain on earth in number of years?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 116,\n          \"sura\" : 23\n        },\n        \"text\" : \"So exalted is Allah, the Sovereign, the Truth; there is no deity except Him, Lord of the Noble Throne.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 117,\n          \"sura\" : 23\n        },\n        \"text\" : \"And whoever invokes besides Allah another deity for which he has no proof -  then his account is only with his Lord. Indeed, the disbelievers will not succeed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 24\n        },\n        \"text\" : \"The [unmarried] woman or [unmarried] man found guilty of sexual intercourse -  lash each one of them with a hundred lashes, and do not be taken by pity for them in the religion of Allah, if you should believe in Allah and the Last Day. And let a group of the believers witness their punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 24\n        },\n        \"text\" : \"Except for those who repent thereafter and reform, for indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 24\n        },\n        \"text\" : \"And those who accuse their wives [of adultery] and have no witnesses except themselves -  then the witness of one of them [shall be] four testimonies [swearing] by Allah that indeed, he is of the truthful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 24\n        },\n        \"text\" : \"And the fifth [oath will be] that the curse of Allah be upon him if he should be among the liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 24\n        },\n        \"text\" : \"But it will prevent punishment from her if she gives four testimonies [swearing] by Allah that indeed, he is of the liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 24\n        },\n        \"text\" : \"And the fifth [oath will be] that the wrath of Allah be upon her if he was of the truthful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 24\n        },\n        \"text\" : \"And if not for the favor of Allah upon you and His mercy... and because Allah is Accepting of repentance and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 24\n        },\n        \"text\" : \"Why did they [who slandered] not produce for it four witnesses? And when they do not produce the witnesses, then it is they, in the sight of Allah, who are the liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 24\n        },\n        \"text\" : \"And if it had not been for the favor of Allah upon you and His mercy in this world and the Hereafter, you would have been touched for that [lie] in which you were involved by a great punishment\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 24\n        },\n        \"text\" : \"When you received it with your tongues and said with your mouths that of which you had no knowledge and thought it was insignificant while it was, in the sight of Allah, tremendous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 24\n        },\n        \"text\" : \"And why, when you heard it, did you not say, \\\"It is not for us to speak of this. Exalted are You, [O Allah ]; this is a great slander\\\"?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 24\n        },\n        \"text\" : \"Allah warns you against returning to the likes of this [conduct], ever, if you should be believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 24\n        },\n        \"text\" : \"And Allah makes clear to you the verses, and Allah is Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 24\n        },\n        \"text\" : \"Indeed, those who like that immorality should be spread [or publicized] among those who have believed will have a painful punishment in this world and the Hereafter. And Allah knows and you do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 24\n        },\n        \"text\" : \"And if it had not been for the favor of Allah upon you and His mercy... and because Allah is Kind and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 24\n        },\n        \"text\" : \"O you who have believed, do not follow the footsteps of Satan. And whoever follows the footsteps of Satan -  indeed, he enjoins immorality and wrongdoing. And if not for the favor of Allah upon you and His mercy, not one of you would have been pure, ever, but Allah purifies whom He wills, and Allah is Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 24\n        },\n        \"text\" : \"And let not those of virtue among you and wealth swear not to give [aid] to their relatives and the needy and the emigrants for the cause of Allah, and let them pardon and overlook. Would you not like that Allah should forgive you? And Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 24\n        },\n        \"text\" : \"That Day, Allah will pay them in full their deserved recompense, and they will know that it is Allah who is the perfect in justice.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 24\n        },\n        \"text\" : \"And if you do not find anyone therein, do not enter them until permission has been given you. And if it is said to you, \\\"Go back,\\\" then go back; it is purer for you. And Allah is Knowing of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 24\n        },\n        \"text\" : \"There is no blame upon you for entering houses not inhabited in which there is convenience for you. And Allah knows what you reveal and what you conceal.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 24\n        },\n        \"text\" : \"Tell the believing men to reduce [some] of their vision and guard their private parts. That is purer for them. Indeed, Allah is Acquainted with what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 24\n        },\n        \"text\" : \"And tell the believing women to reduce [some] of their vision and guard their private parts and not expose their adornment except that which [necessarily] appears thereof and to wrap [a portion of] their headcovers over their chests and not expose their adornment except to their husbands, their fathers, their husbands' fathers, their sons, their husbands' sons, their brothers, their brothers' sons, their sisters' sons, their women, that which their right hands possess, or those male attendants having no physical desire, or children who are not yet aware of the private aspects of women. And let them not stamp their feet to make known what they conceal of their adornment. And turn to Allah in repentance, all of you, O believers, that you might succeed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 24\n        },\n        \"text\" : \"And marry the unmarried among you and the righteous among your male slaves and female slaves. If they should be poor, Allah will enrich them from His bounty, and Allah is all-Encompassing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 24\n        },\n        \"text\" : \"But let them who find not [the means for] marriage abstain [from sexual relations] until Allah enriches them from His bounty. And those who seek a contract [for eventual emancipation] from among whom your right hands possess -  then make a contract with them if you know there is within them goodness and give them from the wealth of Allah which He has given you. And do not compel your slave girls to prostitution, if they desire chastity, to seek [thereby] the temporary interests of worldly life. And if someone should compel them, then indeed, Allah is [to them], after their compulsion, Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 24\n        },\n        \"text\" : \"And We have certainly sent down to you distinct verses and examples from those who passed on before you and an admonition for those who fear Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 24\n        },\n        \"text\" : \"Allah is the Light of the heavens and the earth. The example of His light is like a niche within which is a lamp, the lamp is within glass, the glass as if it were a pearly [white] star lit from [the oil of] a blessed olive tree, neither of the east nor of the west, whose oil would almost glow even if untouched by fire. Light upon light. Allah guides to His light whom He wills. And Allah presents examples for the people, and Allah is Knowing of all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 24\n        },\n        \"text\" : \"[Such niches are] in mosques which Allah has ordered to be raised and that His name be mentioned therein; exalting Him within them in the morning and the evenings\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 24\n        },\n        \"text\" : \"[Are] men whom neither commerce nor sale distracts from the remembrance of Allah and performance of prayer and giving of zakah. They fear a Day in which the hearts and eyes will [fearfully] turn about -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 24\n        },\n        \"text\" : \"That Allah may reward them [according to] the best of what they did and increase them from His bounty. And Allah gives provision to whom He wills without account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 24\n        },\n        \"text\" : \"But those who disbelieved -  their deeds are like a mirage in a lowland which a thirsty one thinks is water until, when he comes to it, he finds it is nothing but finds Allah before Him, and He will pay him in full his due; and Allah is swift in account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 24\n        },\n        \"text\" : \"Or [they are] like darknesses within an unfathomable sea which is covered by waves, upon which are waves, over which are clouds -  darknesses, some of them upon others. When one puts out his hand [therein], he can hardly see it. And he to whom Allah has not granted light -  for him there is no light.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 24\n        },\n        \"text\" : \"Do you not see that Allah is exalted by whomever is within the heavens and the earth and [by] the birds with wings spread [in flight]? Each [of them] has known his [means of] prayer and exalting [Him], and Allah is Knowing of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 24\n        },\n        \"text\" : \"And to Allah belongs the dominion of the heavens and the earth, and to Allah is the destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 24\n        },\n        \"text\" : \"Do you not see that Allah drives clouds? Then He brings them together, then He makes them into a mass, and you see the rain emerge from within it. And He sends down from the sky, mountains [of clouds] within which is hail, and He strikes with it whom He wills and averts it from whom He wills. The flash of its lightning almost takes away the eyesight.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 24\n        },\n        \"text\" : \"Allah alternates the night and the day. Indeed in that is a lesson for those who have vision.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 24\n        },\n        \"text\" : \"Allah has created every [living] creature from water. And of them are those that move on their bellies, and of them are those that walk on two legs, and of them are those that walk on four. Allah creates what He wills. Indeed, Allah is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 24\n        },\n        \"text\" : \"We have certainly sent down distinct verses. And Allah guides whom He wills to a straight path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 24\n        },\n        \"text\" : \"But the hypocrites say, \\\"We have believed in Allah and in the Messenger, and we obey\\\"; then a party of them turns away after that. And those are not believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 24\n        },\n        \"text\" : \"And when they are called to [the words of] Allah and His Messenger to judge between them, at once a party of them turns aside [in refusal].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 24\n        },\n        \"text\" : \"Is there disease in their hearts? Or have they doubted? Or do they fear that Allah will be unjust to them, or His Messenger? Rather, it is they who are the wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 24\n        },\n        \"text\" : \"The only statement of the [true] believers when they are called to Allah and His Messenger to judge between them is that they say, \\\"We hear and we obey.\\\" And those are the successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 24\n        },\n        \"text\" : \"And whoever obeys Allah and His Messenger and fears Allah and is conscious of Him - it is those who are the attainers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 24\n        },\n        \"text\" : \"And they swear by Allah their strongest oaths that if you ordered them, they would go forth [in Allah 's cause]. Say, \\\"Do not swear. [Such] obedience is known. Indeed, Allah is Acquainted with that which you do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 24\n        },\n        \"text\" : \"Say, \\\"Obey Allah and obey the Messenger; but if you turn away -  then upon him is only that [duty] with which he has been charged, and upon you is that with which you have been charged. And if you obey him, you will be [rightly] guided. And there is not upon the Messenger except the [responsibility for] clear notification.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 24\n        },\n        \"text\" : \"Allah has promised those who have believed among you and done righteous deeds that He will surely grant them succession [to authority] upon the earth just as He granted it to those before them and that He will surely establish for them [therein] their religion which He has preferred for them and that He will surely substitute for them, after their fear, security, [for] they worship Me, not associating anything with Me. But whoever disbelieves after that -  then those are the defiantly disobedient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 24\n        },\n        \"text\" : \"Never think that the disbelievers are causing failure [to Allah ] upon the earth. Their refuge will be the Fire -  and how wretched the destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 24\n        },\n        \"text\" : \"O you who have believed, let those whom your right hands possess and those who have not [yet] reached puberty among you ask permission of you [before entering] at three times: before the dawn prayer and when you put aside your clothing [for rest] at noon and after the night prayer. [These are] three times of privacy for you. There is no blame upon you nor upon them beyond these [periods], for they continually circulate among you -  some of you, among others. Thus does Allah make clear to you the verses; and Allah is Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 24\n        },\n        \"text\" : \"And when the children among you reach puberty, let them ask permission [at all times] as those before them have done. Thus does Allah make clear to you His verses; and Allah is Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 24\n        },\n        \"text\" : \"And women of post-menstrual age who have no desire for marriage -  there is no blame upon them for putting aside their outer garments [but] not displaying adornment. But to modestly refrain [from that] is better for them. And Allah is Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 24\n        },\n        \"text\" : \"There is not upon the blind [any] constraint nor upon the lame constraint nor upon the ill constraint nor upon yourselves when you eat from your [own] houses or the houses of your fathers or the houses of your mothers or the houses of your brothers or the houses of your sisters or the houses of your father's brothers or the houses of your father's sisters or the houses of your mother's brothers or the houses of your mother's sisters or [from houses] whose keys you possess or [from the house] of your friend. There is no blame upon you whether you eat together or separately. But when you enter houses, give greetings of peace upon each other -  a greeting from Allah, blessed and good. Thus does Allah make clear to you the verses [of ordinance] that you may understand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 24\n        },\n        \"text\" : \"The believers are only those who believe in Allah and His Messenger and, when they are [meeting] with him for a matter of common interest, do not depart until they have asked his permission. Indeed, those who ask your permission, [O Muhammad] -  those are the ones who believe in Allah and His Messenger. So when they ask your permission for something of their affairs, then give permission to whom you will among them and ask forgiveness for them of Allah . Indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 24\n        },\n        \"text\" : \"Do not make [your] calling of the Messenger among yourselves as the call of one of you to another. Already Allah knows those of you who slip away, concealed by others. So let those beware who dissent from the Prophet's order, lest fitnah strike them or a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 24\n        },\n        \"text\" : \"Unquestionably, to Allah belongs whatever is in the heavens and earth. Already He knows that upon which you [stand] and [knows] the Day when they will be returned to Him and He will inform them of what they have done. And Allah is Knowing of all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 25\n        },\n        \"text\" : \"For them therein is whatever they wish, [while] abiding eternally. It is ever upon your Lord a promise [worthy to be] requested.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 25\n        },\n        \"text\" : \"And [mention] the Day He will gather them and that which they worship besides Allah and will say, \\\"Did you mislead these, My servants, or did they [themselves] stray from the way?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 25\n        },\n        \"text\" : \"They will say, \\\"Exalted are You! It was not for us to take besides You any allies. But You provided comforts for them and their fathers until they forgot the message and became a people ruined.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 25\n        },\n        \"text\" : \"And those who disbelieve say, \\\"Why was the Qur'an not revealed to him all at once?\\\" Thus [it is] that We may strengthen thereby your heart. And We have spaced it distinctly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 25\n        },\n        \"text\" : \"And when they see you, [O Muhammad], they take you not except in ridicule, [saying], \\\"Is this the one whom Allah has sent as a messenger?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 25\n        },\n        \"text\" : \"But they worship rather than Allah that which does not benefit them or harm them, and the disbeliever is ever, against his Lord, an assistant [to Satan].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 25\n        },\n        \"text\" : \"And rely upon the Ever-Living who does not die, and exalt [ Allah ] with His praise. And sufficient is He to be, with the sins of His servants, Acquainted -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 25\n        },\n        \"text\" : \"And those who do not invoke with Allah another deity or kill the soul which Allah has forbidden [to be killed], except by right, and do not commit unlawful sexual intercourse. And whoever should do that will meet a penalty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 25\n        },\n        \"text\" : \"Except for those who repent, believe and do righteous work. For them Allah will replace their evil deeds with good. And ever is Allah Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 25\n        },\n        \"text\" : \"And he who repents and does righteousness does indeed turn to Allah with [accepted] repentance.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 25\n        },\n        \"text\" : \"And those who, when reminded of the verses of their Lord, do not fall upon them deaf and blind.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 25\n        },\n        \"text\" : \"Abiding eternally therein. Good is the settlement and residence.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 26\n        },\n        \"text\" : \"And [mention] when your Lord called Moses, [saying], \\\"Go to the wrongdoing people -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 26\n        },\n        \"text\" : \"The people of Pharaoh. Will they not fear Allah ?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 26\n        },\n        \"text\" : \"[ Allah ] said, \\\"No. Go both of you with Our signs; indeed, We are with you, listening.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 26\n        },\n        \"text\" : \"So the magicians fell down in prostration [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 26\n        },\n        \"text\" : \"[Pharaoh] said, \\\"You believed Moses before I gave you permission. Indeed, he is your leader who has taught you magic, but you are going to know. I will surely cut off your hands and your feet on opposite sides, and I will surely crucify you all.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 26\n        },\n        \"text\" : \"[And said], \\\"Indeed, those are but a small band,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 26\n        },\n        \"text\" : \"And We saved Moses and those with him, all together.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 26\n        },\n        \"text\" : \"And do not disgrace me on the Day they are [all] resurrected -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 89,\n          \"sura\" : 26\n        },\n        \"text\" : \"But only one who comes to Allah with a sound heart.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 26\n        },\n        \"text\" : \"Other than Allah ? Can they help you or help themselves?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 95,\n          \"sura\" : 26\n        },\n        \"text\" : \"And the soldiers of Iblees, all together.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 97,\n          \"sura\" : 26\n        },\n        \"text\" : \"\\\"By Allah, we were indeed in manifest error\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 106,\n          \"sura\" : 26\n        },\n        \"text\" : \"When their brother Noah said to them, \\\"Will you not fear Allah ?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 108,\n          \"sura\" : 26\n        },\n        \"text\" : \"So fear Allah and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 110,\n          \"sura\" : 26\n        },\n        \"text\" : \"So fear Allah and obey me.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 124,\n          \"sura\" : 26\n        },\n        \"text\" : \"When their brother Hud said to them, \\\"Will you not fear Allah ?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 126,\n          \"sura\" : 26\n        },\n        \"text\" : \"So fear Allah and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 129,\n          \"sura\" : 26\n        },\n        \"text\" : \"And take for yourselves palaces and fortresses that you might abide eternally?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 131,\n          \"sura\" : 26\n        },\n        \"text\" : \"So fear Allah and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 136,\n          \"sura\" : 26\n        },\n        \"text\" : \"They said, \\\"It is all the same to us whether you advise or are not of the advisors.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 142,\n          \"sura\" : 26\n        },\n        \"text\" : \"When their brother Salih said to them, \\\"Will you not fear Allah ?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 144,\n          \"sura\" : 26\n        },\n        \"text\" : \"So fear Allah and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 150,\n          \"sura\" : 26\n        },\n        \"text\" : \"So fear Allah and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 161,\n          \"sura\" : 26\n        },\n        \"text\" : \"When their brother Lot said to them, \\\"Will you not fear Allah ?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 163,\n          \"sura\" : 26\n        },\n        \"text\" : \"So fear Allah and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 170,\n          \"sura\" : 26\n        },\n        \"text\" : \"So We saved him and his family, all,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 177,\n          \"sura\" : 26\n        },\n        \"text\" : \"When Shu'ayb said to them, \\\"Will you not fear Allah ?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 179,\n          \"sura\" : 26\n        },\n        \"text\" : \"So fear Allah and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 187,\n          \"sura\" : 26\n        },\n        \"text\" : \"So cause to fall upon us fragments of the sky, if you should be of the truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 211,\n          \"sura\" : 26\n        },\n        \"text\" : \"It is not allowable for them, nor would they be able.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 213,\n          \"sura\" : 26\n        },\n        \"text\" : \"So do not invoke with Allah another deity and [thus] be among the punished.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 221,\n          \"sura\" : 26\n        },\n        \"text\" : \"Shall I inform you upon whom the devils descend?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 225,\n          \"sura\" : 26\n        },\n        \"text\" : \"Do you not see that in every valley they roam\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 227,\n          \"sura\" : 26\n        },\n        \"text\" : \"Except those [poets] who believe and do righteous deeds and remember Allah often and defend [the Muslims] after they were wronged. And those who have wronged are going to know to what [kind of] return they will be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 27\n        },\n        \"text\" : \"But when he came to it, he was called, \\\"Blessed is whoever is at the fire and whoever is around it. And exalted is Allah, Lord of the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 27\n        },\n        \"text\" : \"O Moses, indeed it is I - Allah, the Exalted in Might, the Wise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 27\n        },\n        \"text\" : \"And [he was told], \\\"Throw down your staff.\\\" But when he saw it writhing as if it were a snake, he turned in flight and did not return. [ Allah said], \\\"O Moses, fear not. Indeed, in My presence the messengers do not fear.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 27\n        },\n        \"text\" : \"And We had certainly given to David and Solomon knowledge, and they said, \\\"Praise [is due] to Allah, who has favored us over many of His believing servants.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 27\n        },\n        \"text\" : \"And Solomon inherited David. He said, \\\"O people, we have been taught the language of birds, and we have been given from all things. Indeed, this is evident bounty.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 27\n        },\n        \"text\" : \"Until, when they came upon the valley of the ants, an ant said, \\\"O ants, enter your dwellings that you not be crushed by Solomon and his soldiers while they perceive not.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 27\n        },\n        \"text\" : \"Indeed, I found [there] a woman ruling them, and she has been given of all things, and she has a great throne.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 27\n        },\n        \"text\" : \"I found her and her people prostrating to the sun instead of Allah, and Satan has made their deeds pleasing to them and averted them from [His] way, so they are not guided,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 27\n        },\n        \"text\" : \"[And] so they do not prostrate to Allah, who brings forth what is hidden within the heavens and the earth and knows what you conceal and what you declare -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 27\n        },\n        \"text\" : \"Allah -  there is no deity except Him, Lord of the Great Throne.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 27\n        },\n        \"text\" : \"Indeed, it is from Solomon, and indeed, it reads: 'In the name of Allah, the Entirely Merciful, the Especially Merciful,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 27\n        },\n        \"text\" : \"So when they came to Solomon, he said, \\\"Do you provide me with wealth? But what Allah has given me is better than what He has given you. Rather, it is you who rejoice in your gift.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 27\n        },\n        \"text\" : \"So when she arrived, it was said [to her], \\\"Is your throne like this?\\\" She said, \\\"[It is] as though it was it.\\\" [Solomon said], \\\"And we were given knowledge before her, and we have been Muslims [in submission to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 27\n        },\n        \"text\" : \"And that which she was worshipping other than Allah had averted her [from submission to Him]. Indeed, she was from a disbelieving people.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 27\n        },\n        \"text\" : \"She was told, \\\"Enter the palace.\\\" But when she saw it, she thought it was a body of water and uncovered her shins [to wade through]. He said, \\\"Indeed, it is a palace [whose floor is] made smooth with glass.\\\" She said, \\\"My Lord, indeed I have wronged myself, and I submit with Solomon to Allah, Lord of the worlds.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 27\n        },\n        \"text\" : \"And We had certainly sent to Thamud their brother Salih, [saying], \\\"Worship Allah,\\\" and at once they were two parties conflicting.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 27\n        },\n        \"text\" : \"He said, \\\"O my people, why are you impatient for evil instead of good? Why do you not seek forgiveness of Allah that you may receive mercy?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 27\n        },\n        \"text\" : \"They said, \\\"We consider you a bad omen, you and those with you.\\\" He said, \\\"Your omen is with Allah . Rather, you are a people being tested.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 27\n        },\n        \"text\" : \"They said, \\\"Take a mutual oath by Allah that we will kill him by night, he and his family. Then we will say to his executor, 'We did not witness the destruction of his family, and indeed, we are truthful.' \\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 27\n        },\n        \"text\" : \"Then look how was the outcome of their plan -  that We destroyed them and their people, all.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 27\n        },\n        \"text\" : \"And We saved those who believed and used to fear Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 27\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"Praise be to Allah, and peace upon His servants whom He has chosen. Is Allah better or what they associate with Him?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 27\n        },\n        \"text\" : \"[More precisely], is He [not best] who created the heavens and the earth and sent down for you rain from the sky, causing to grow thereby gardens of joyful beauty which you could not [otherwise] have grown the trees thereof? Is there a deity with Allah ? [No], but they are a people who ascribe equals [to Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 27\n        },\n        \"text\" : \"Is He [not best] who made the earth a stable ground and placed within it rivers and made for it firmly set mountains and placed between the two seas a barrier? Is there a deity with Allah ? [No], but most of them do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 27\n        },\n        \"text\" : \"Is He [not best] who responds to the desperate one when he calls upon Him and removes evil and makes you inheritors of the earth? Is there a deity with Allah ? Little do you remember.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 27\n        },\n        \"text\" : \"Is He [not best] who guides you through the darknesses of the land and sea and who sends the winds as good tidings before His mercy? Is there a deity with Allah ? High is Allah above whatever they associate with Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 27\n        },\n        \"text\" : \"Is He [not best] who begins creation and then repeats it and who provides for you from the heaven and earth? Is there a deity with Allah ? Say, \\\"Produce your proof, if you should be truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 27\n        },\n        \"text\" : \"Say, \\\"None in the heavens and earth knows the unseen except Allah, and they do not perceive when they will be resurrected.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 27\n        },\n        \"text\" : \"So rely upon Allah ; indeed, you are upon the clear truth.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 27\n        },\n        \"text\" : \"Indeed, you will not make the dead hear, nor will you make the deaf hear the call when they have turned their backs retreating.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 27\n        },\n        \"text\" : \"And you cannot guide the blind away from their error. You will only make hear those who believe in Our verses so they are Muslims [submitting to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 27\n        },\n        \"text\" : \"And when the word befalls them, We will bring forth for them a creature from the earth speaking to them, [saying] that the people were, of Our verses, not certain [in faith].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 27\n        },\n        \"text\" : \"And the decree will befall them for the wrong they did, and they will not [be able to] speak.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 27\n        },\n        \"text\" : \"And [warn of] the Day the Horn will be blown, and whoever is in the heavens and whoever is on the earth will be terrified except whom Allah wills. And all will come to Him humbled.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 27\n        },\n        \"text\" : \"And you see the mountains, thinking them rigid, while they will pass as the passing of clouds. [It is] the work of Allah, who perfected all things. Indeed, He is Acquainted with that which you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 91,\n          \"sura\" : 27\n        },\n        \"text\" : \"[Say, O Muhammad], \\\"I have only been commanded to worship the Lord of this city, who made it sacred and to whom [belongs] all things. And I am commanded to be of the Muslims [those who submit to Allah ]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 93,\n          \"sura\" : 27\n        },\n        \"text\" : \"And say, \\\"[All] praise is [due] to Allah . He will show you His signs, and you will recognize them. And your Lord is not unaware of what you do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 28\n        },\n        \"text\" : \"And the heart of Moses' mother became empty [of all else]. She was about to disclose [the matter concerning] him had We not bound fast her heart that she would be of the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 28\n        },\n        \"text\" : \"And We had prevented from him [all] wet nurses before, so she said, \\\"Shall I direct you to a household that will be responsible for him for you while they are to him [for his upbringing] sincere?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 28\n        },\n        \"text\" : \"So We restored him to his mother that she might be content and not grieve and that she would know that the promise of Allah is true. But most of the people do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 28\n        },\n        \"text\" : \"And when he attained his full strength and was [mentally] mature, We bestowed upon him judgement and knowledge. And thus do We reward the doers of good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 28\n        },\n        \"text\" : \"And he entered the city at a time of inattention by its people and found therein two men fighting: one from his faction and one from among his enemy. And the one from his faction called for help to him against the one from his enemy, so Moses struck him and [unintentionally] killed him. [Moses] said, \\\"This is from the work of Satan. Indeed, he is a manifest, misleading enemy.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 28\n        },\n        \"text\" : \"He said, \\\"Indeed, I wish to wed you one of these, my two daughters, on [the condition] that you serve me for eight years; but if you complete ten, it will be [as a favor] from you. And I do not wish to put you in difficulty. You will find me, if Allah wills, from among the righteous.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 28\n        },\n        \"text\" : \"[Moses] said, \\\"That is [established] between me and you. Whichever of the two terms I complete -  there is no injustice to me, and Allah, over what we say, is Witness.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 28\n        },\n        \"text\" : \"But when he came to it, he was called from the right side of the valley in a blessed spot -  from the tree, \\\"O Moses, indeed I am Allah, Lord of the worlds.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 28\n        },\n        \"text\" : \"And [he was told], \\\"Throw down your staff.\\\" But when he saw it writhing as if it was a snake, he turned in flight and did not return. [ Allah said], \\\"O Moses, approach and fear not. Indeed, you are of the secure.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 28\n        },\n        \"text\" : \"[ Allah ] said, \\\"We will strengthen your arm through your brother and grant you both supremacy so they will not reach you. [It will be] through Our signs; you and those who follow you will be the predominant.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 28\n        },\n        \"text\" : \"And you were not at the side of the mount when We called [Moses] but [were sent] as a mercy from your Lord to warn a people to whom no warner had come before you that they might be reminded.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 28\n        },\n        \"text\" : \"Say, \\\"Then bring a scripture from Allah which is more guiding than either of them that I may follow it, if you should be truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 28\n        },\n        \"text\" : \"But if they do not respond to you -  then know that they only follow their [own] desires. And who is more astray than one who follows his desire without guidance from Allah ? Indeed, Allah does not guide the wrongdoing people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 28\n        },\n        \"text\" : \"And when it is recited to them, they say, \\\"We have believed in it; indeed, it is the truth from our Lord. Indeed we were, [even] before it, Muslims [submitting to Allah ].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 28\n        },\n        \"text\" : \"Indeed, [O Muhammad], you do not guide whom you like, but Allah guides whom He wills. And He is most knowing of the [rightly] guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 28\n        },\n        \"text\" : \"And they say, \\\"If we were to follow the guidance with you, we would be swept from our land.\\\" Have we not established for them a safe sanctuary to which are brought the fruits of all things as provision from Us? But most of them do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 28\n        },\n        \"text\" : \"And whatever thing you [people] have been given -  it is [only for] the enjoyment of worldly life and its adornment. And what is with Allah is better and more lasting; so will you not use reason?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 28\n        },\n        \"text\" : \"And [warn of] the Day He will call them and say, \\\"Where are My 'partners' which you used to claim?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 28\n        },\n        \"text\" : \"And [mention] the Day He will call them and say, \\\"What did you answer the messengers?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 28\n        },\n        \"text\" : \"But as for one who had repented, believed, and done righteousness, it is promised by Allah that he will be among the successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 28\n        },\n        \"text\" : \"And your Lord creates what He wills and chooses; not for them was the choice. Exalted is Allah and high above what they associate with Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 28\n        },\n        \"text\" : \"And He is Allah ; there is no deity except Him. To Him is [due all] praise in the first [life] and the Hereafter. And His is the [final] decision, and to Him you will be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 28\n        },\n        \"text\" : \"Say, \\\"Have you considered: if Allah should make for you the night continuous until the Day of Resurrection, what deity other than Allah could bring you light? Then will you not hear?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 28\n        },\n        \"text\" : \"Say, \\\"Have you considered: if Allah should make for you the day continuous until the Day of Resurrection, what deity other than Allah could bring you a night in which you may rest? Then will you not see?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 28\n        },\n        \"text\" : \"And [warn of] the Day He will call them and say, \\\"Where are my 'partners' which you used to claim?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 28\n        },\n        \"text\" : \"And We will extract from every nation a witness and say, \\\"Produce your proof,\\\" and they will know that the truth belongs to Allah, and lost from them is that which they used to invent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 28\n        },\n        \"text\" : \"Indeed, Qarun was from the people of Moses, but he tyrannized them. And We gave him of treasures whose keys would burden a band of strong men; thereupon his people said to him, \\\"Do not exult. Indeed, Allah does not like the exultant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 28\n        },\n        \"text\" : \"But seek, through that which Allah has given you, the home of the Hereafter; and [yet], do not forget your share of the world. And do good as Allah has done good to you. And desire not corruption in the land. Indeed, Allah does not like corrupters.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 28\n        },\n        \"text\" : \"He said, \\\"I was only given it because of knowledge I have.\\\" Did he not know that Allah had destroyed before him of generations those who were greater than him in power and greater in accumulation [of wealth]? But the criminals, about their sins, will not be asked.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 28\n        },\n        \"text\" : \"But those who had been given knowledge said, \\\"Woe to you! The reward of Allah is better for he who believes and does righteousness. And none are granted it except the patient.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 28\n        },\n        \"text\" : \"And We caused the earth to swallow him and his home. And there was for him no company to aid him other than Allah, nor was he of those who [could] defend themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 28\n        },\n        \"text\" : \"And those who had wished for his position the previous day began to say, \\\"Oh, how Allah extends provision to whom He wills of His servants and restricts it! If not that Allah had conferred favor on us, He would have caused it to swallow us. Oh, how the disbelievers do not succeed!\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 28\n        },\n        \"text\" : \"And never let them avert you from the verses of Allah after they have been revealed to you. And invite [people] to your Lord. And never be of those who associate others with Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 28\n        },\n        \"text\" : \"And do not invoke with Allah another deity. There is no deity except Him. Everything will be destroyed except His Face. His is the judgement, and to Him you will be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 29\n        },\n        \"text\" : \"But We have certainly tried those before them, and Allah will surely make evident those who are truthful, and He will surely make evident the liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 29\n        },\n        \"text\" : \"Whoever should hope for the meeting with Allah -  indeed, the term decreed by Allah is coming. And He is the Hearing, the Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 29\n        },\n        \"text\" : \"And whoever strives only strives for [the benefit of] himself. Indeed, Allah is free from need of the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 29\n        },\n        \"text\" : \"And of the people are some who say, \\\"We believe in Allah,\\\" but when one [of them] is harmed for [the cause of] Allah, they consider the trial of the people as [if it were] the punishment of Allah . But if victory comes from your Lord, they say, \\\"Indeed, We were with you.\\\" Is not Allah most knowing of what is within the breasts of all creatures?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 29\n        },\n        \"text\" : \"And Allah will surely make evident those who believe, and He will surely make evident the hypocrites.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 29\n        },\n        \"text\" : \"And [We sent] Abraham, when he said to his people, \\\"Worship Allah and fear Him. That is best for you, if you should know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 29\n        },\n        \"text\" : \"You only worship, besides Allah, idols, and you produce a falsehood. Indeed, those you worship besides Allah do not possess for you [the power of] provision. So seek from Allah provision and worship Him and be grateful to Him. To Him you will be returned.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 29\n        },\n        \"text\" : \"Have they not considered how Allah begins creation and then repeats it? Indeed that, for Allah, is easy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 29\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"Travel through the land and observe how He began creation. Then Allah will produce the final creation. Indeed Allah, over all things, is competent.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 29\n        },\n        \"text\" : \"And you will not cause failure [to Allah ] upon the earth or in the heaven. And you have not other than Allah any protector or any helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 29\n        },\n        \"text\" : \"And the ones who disbelieve in the signs of Allah and the meeting with Him -  those have despaired of My mercy, and they will have a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 29\n        },\n        \"text\" : \"And the answer of Abraham's people was not but that they said, \\\"Kill him or burn him,\\\" but Allah saved him from the fire. Indeed in that are signs for a people who believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 29\n        },\n        \"text\" : \"And [Abraham] said, \\\"You have only taken, other than Allah, idols as [a bond of] affection among you in worldly life. Then on the Day of Resurrection you will deny one another and curse one another, and your refuge will be the Fire, and you will not have any helpers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 29\n        },\n        \"text\" : \"Indeed, you approach men and obstruct the road and commit in your meetings [every] evil.\\\" And the answer of his people was not but they said, \\\"Bring us the punishment of Allah, if you should be of the truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 29\n        },\n        \"text\" : \"And to Madyan [We sent] their brother Shu'ayb, and he said, \\\"O my people, worship Allah and expect the Last Day and do not commit abuse on the earth, spreading corruption.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 29\n        },\n        \"text\" : \"But they denied him, so the earthquake seized them, and they became within their home [corpses] fallen prone.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 29\n        },\n        \"text\" : \"So each We seized for his sin; and among them were those upon whom We sent a storm of stones, and among them were those who were seized by the blast [from the sky], and among them were those whom We caused the earth to swallow, and among them were those whom We drowned. And Allah would not have wronged them, but it was they who were wronging themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 29\n        },\n        \"text\" : \"The example of those who take allies other than Allah is like that of the spider who takes a home. And indeed, the weakest of homes is the home of the spider, if they only knew.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 29\n        },\n        \"text\" : \"Indeed, Allah knows whatever thing they call upon other than Him. And He is the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 29\n        },\n        \"text\" : \"Allah created the heavens and the earth in truth. Indeed in that is a sign for the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 29\n        },\n        \"text\" : \"Recite, [O Muhammad], what has been revealed to you of the Book and establish prayer. Indeed, prayer prohibits immorality and wrongdoing, and the remembrance of Allah is greater. And Allah knows that which you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 29\n        },\n        \"text\" : \"But they say, \\\"Why are not signs sent down to him from his Lord?\\\" Say, \\\"The signs are only with Allah, and I am only a clear warner.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 29\n        },\n        \"text\" : \"Say, \\\"Sufficient is Allah between me and you as Witness. He knows what is in the heavens and earth. And they who have believed in falsehood and disbelieved in Allah - it is those who are the losers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 29\n        },\n        \"text\" : \"And those who have believed and done righteous deeds -  We will surely assign to them of Paradise [elevated] chambers beneath which rivers flow, wherein they abide eternally. Excellent is the reward of the [righteous] workers\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 29\n        },\n        \"text\" : \"And how many a creature carries not its [own] provision. Allah provides for it and for you. And He is the Hearing, the Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 29\n        },\n        \"text\" : \"If you asked them, \\\"Who created the heavens and earth and subjected the sun and the moon?\\\" they would surely say, \\\" Allah .\\\" Then how are they deluded?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 29\n        },\n        \"text\" : \"Allah extends provision for whom He wills of His servants and restricts for him. Indeed Allah is, of all things, Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 29\n        },\n        \"text\" : \"And if you asked them, \\\"Who sends down rain from the sky and gives life thereby to the earth after its lifelessness?\\\" they would surely say \\\" Allah .\\\" Say, \\\"Praise to Allah \\\"; but most of them do not reason.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 29\n        },\n        \"text\" : \"And when they board a ship, they supplicate Allah, sincere to Him in religion. But when He delivers them to the land, at once they associate others with Him\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 29\n        },\n        \"text\" : \"Have they not seen that We made [Makkah] a safe sanctuary, while people are being taken away all around them? Then in falsehood do they believe, and in the favor of Allah they disbelieve?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 29\n        },\n        \"text\" : \"And who is more unjust than one who invents a lie about Allah or denies the truth when it has come to him? Is there not in Hell a [sufficient] residence for the disbelievers?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 29\n        },\n        \"text\" : \"And those who strive for Us -  We will surely guide them to Our ways. And indeed, Allah is with the doers of good.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 30\n        },\n        \"text\" : \"Within three to nine years. To Allah belongs the command before and after. And that day the believers will rejoice\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 30\n        },\n        \"text\" : \"In the victory of Allah . He gives victory to whom He wills, and He is the Exalted in Might, the Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 30\n        },\n        \"text\" : \"[It is] the promise of Allah . Allah does not fail in His promise, but most of the people do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 30\n        },\n        \"text\" : \"Do they not contemplate within themselves? Allah has not created the heavens and the earth and what is between them except in truth and for a specified term. And indeed, many of the people, in [the matter of] the meeting with their Lord, are disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 30\n        },\n        \"text\" : \"Have they not traveled through the earth and observed how was the end of those before them? They were greater than them in power, and they plowed the earth and built it up more than they have built it up, and their messengers came to them with clear evidences. And Allah would not ever have wronged them, but they were wronging themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 30\n        },\n        \"text\" : \"Then the end of those who did evil was the worst [consequence] because they denied the signs of Allah and used to ridicule them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 30\n        },\n        \"text\" : \"Allah begins creation; then He will repeat it; then to Him you will be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 30\n        },\n        \"text\" : \"And there will not be for them among their [alleged] partners any intercessors, and they will [then] be disbelievers in their partners.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 30\n        },\n        \"text\" : \"So exalted is Allah when you reach the evening and when you reach the morning.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 30\n        },\n        \"text\" : \"And to Him is [due all] praise throughout the heavens and the earth. And [exalted is He] at night and when you are at noon.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 30\n        },\n        \"text\" : \"And of His signs is that the heaven and earth remain by His command. Then when He calls you with a [single] call from the earth, immediately you will come forth.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 30\n        },\n        \"text\" : \"And to Him belongs whoever is in the heavens and earth. All are to Him devoutly obedient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 30\n        },\n        \"text\" : \"But those who wrong follow their [own] desires without knowledge. Then who can guide one whom Allah has sent astray? And for them there are no helpers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 30\n        },\n        \"text\" : \"So direct your face toward the religion, inclining to truth. [Adhere to] the fitrah of Allah upon which He has created [all] people. No change should there be in the creation of Allah . That is the correct religion, but most of the people do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 30\n        },\n        \"text\" : \"[Adhere to it], turning in repentance to Him, and fear Him and establish prayer and do not be of those who associate others with Allah\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 30\n        },\n        \"text\" : \"And when adversity touches the people, they call upon their Lord, turning in repentance to Him. Then when He lets them taste mercy from Him, at once a party of them associate others with their Lord,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 30\n        },\n        \"text\" : \"Do they not see that Allah extends provision for whom He wills and restricts [it]? Indeed, in that are signs for a people who believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 30\n        },\n        \"text\" : \"So give the relative his right, as well as the needy and the traveler. That is best for those who desire the countenance of Allah, and it is they who will be the successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 30\n        },\n        \"text\" : \"And whatever you give for interest to increase within the wealth of people will not increase with Allah . But what you give in zakah, desiring the countenance of Allah - those are the multipliers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 30\n        },\n        \"text\" : \"Allah is the one who created you, then provided for you, then will cause you to die, and then will give you life. Are there any of your \\\"partners\\\" who does anything of that? Exalted is He and high above what they associate with Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 30\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"Travel through the land and observe how was the end of those before. Most of them were associators [of others with Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 30\n        },\n        \"text\" : \"So direct your face toward the correct religion before a Day comes from Allah of which there is no repelling. That Day, they will be divided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 30\n        },\n        \"text\" : \"It is Allah who sends the winds, and they stir the clouds and spread them in the sky however He wills, and He makes them fragments so you see the rain emerge from within them. And when He causes it to fall upon whom He wills of His servants, immediately they rejoice\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 30\n        },\n        \"text\" : \"So observe the effects of the mercy of Allah -  how He gives life to the earth after its lifelessness. Indeed, that [same one] will give life to the dead, and He is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 30\n        },\n        \"text\" : \"So indeed, you will not make the dead hear, nor will you make the deaf hear the call when they turn their backs, retreating.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 30\n        },\n        \"text\" : \"And you cannot guide the blind away from their error. You will only make hear those who believe in Our verses so they are Muslims [in submission to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 30\n        },\n        \"text\" : \"Allah is the one who created you from weakness, then made after weakness strength, then made after strength weakness and white hair. He creates what He wills, and He is the Knowing, the Competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 30\n        },\n        \"text\" : \"But those who were given knowledge and faith will say, \\\"You remained the extent of Allah 's decree until the Day of Resurrection, and this is the Day of Resurrection, but you did not used to know.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 30\n        },\n        \"text\" : \"So that Day, their excuse will not benefit those who wronged, nor will they be asked to appease [ Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 30\n        },\n        \"text\" : \"Thus does Allah seal the hearts of those who do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 30\n        },\n        \"text\" : \"So be patient. Indeed, the promise of Allah is truth. And let them not disquiet you who are not certain [in faith].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 31\n        },\n        \"text\" : \"And of the people is he who buys the amusement of speech to mislead [others] from the way of Allah without knowledge and who takes it in ridicule. Those will have a humiliating punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 31\n        },\n        \"text\" : \"Wherein they abide eternally; [it is] the promise of Allah [which is] truth. And He is the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 31\n        },\n        \"text\" : \"This is the creation of Allah . So show Me what those other than Him have created. Rather, the wrongdoers are in clear error.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 31\n        },\n        \"text\" : \"And We had certainly given Luqman wisdom [and said], \\\"Be grateful to Allah .\\\" And whoever is grateful is grateful for [the benefit of] himself. And whoever denies [His favor] -  then indeed, Allah is Free of need and Praiseworthy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 31\n        },\n        \"text\" : \"And [mention, O Muhammad], when Luqman said to his son while he was instructing him, \\\"O my son, do not associate [anything] with Allah. Indeed, association [with Him] is great injustice.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 31\n        },\n        \"text\" : \"[And Luqman said], \\\"O my son, indeed if wrong should be the weight of a mustard seed and should be within a rock or [anywhere] in the heavens or in the earth, Allah will bring it forth. Indeed, Allah is Subtle and Acquainted.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 31\n        },\n        \"text\" : \"O my son, establish prayer, enjoin what is right, forbid what is wrong, and be patient over what befalls you. Indeed, [all] that is of the matters [requiring] determination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 31\n        },\n        \"text\" : \"And do not turn your cheek [in contempt] toward people and do not walk through the earth exultantly. Indeed, Allah does not like everyone self-deluded and boastful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 31\n        },\n        \"text\" : \"Do you not see that Allah has made subject to you whatever is in the heavens and whatever is in the earth and amply bestowed upon you His favors, [both] apparent and unapparent? But of the people is he who disputes about Allah without knowledge or guidance or an enlightening Book [from Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 31\n        },\n        \"text\" : \"And when it is said to them, \\\"Follow what Allah has revealed,\\\" they say, \\\"Rather, we will follow that upon which we found our fathers.\\\" Even if Satan was inviting them to the punishment of the Blaze?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 31\n        },\n        \"text\" : \"And whoever submits his face to Allah while he is a doer of good -  then he has grasped the most trustworthy handhold. And to Allah will be the outcome of [all] matters.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 31\n        },\n        \"text\" : \"And whoever has disbelieved -  let not his disbelief grieve you. To Us is their return, and We will inform them of what they did. Indeed, Allah is Knowing of that within the breasts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 31\n        },\n        \"text\" : \"And if you asked them, \\\"Who created the heavens and earth?\\\" they would surely say, \\\" Allah .\\\" Say, \\\"[All] praise is [due] to Allah \\\"; but most of them do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 31\n        },\n        \"text\" : \"To Allah belongs whatever is in the heavens and earth. Indeed, Allah is the Free of need, the Praiseworthy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 31\n        },\n        \"text\" : \"And if whatever trees upon the earth were pens and the sea [was ink], replenished thereafter by seven [more] seas, the words of Allah would not be exhausted. Indeed, Allah is Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 31\n        },\n        \"text\" : \"Your creation and your resurrection will not be but as that of a single soul.  Indeed, Allah is Hearing and Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 31\n        },\n        \"text\" : \"Do you not see that Allah causes the night to enter the day and causes the day to enter the night and has subjected the sun and the moon, each running [its course] for a specified term, and that Allah, with whatever you do, is Acquainted?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 31\n        },\n        \"text\" : \"That is because Allah is the Truth, and that what they call upon other than Him is falsehood, and because Allah is the Most High, the Grand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 31\n        },\n        \"text\" : \"Do you not see that ships sail through the sea by the favor of Allah that He may show you of His signs?  Indeed in that are signs for everyone patient and grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 31\n        },\n        \"text\" : \"And when waves come over them like canopies, they supplicate Allah, sincere to Him in religion. But when He delivers them to the land, there are [some] of them who are moderate [in faith]. And none rejects Our signs except everyone treacherous and ungrateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 31\n        },\n        \"text\" : \"O mankind, fear your Lord and fear a Day when no father will avail his son, nor will a son avail his father at all. Indeed, the promise of Allah is truth, so let not the worldly life delude you and be not deceived about Allah by the Deceiver.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 31\n        },\n        \"text\" : \"Indeed, Allah [alone] has knowledge of the Hour and sends down the rain and knows what is in the wombs. And no soul perceives what it will earn tomorrow, and no soul perceives in what land it will die. Indeed, Allah is Knowing and Acquainted.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 32\n        },\n        \"text\" : \"It is Allah who created the heavens and the earth and whatever is between them in six days; then He established Himself above the Throne. You have not besides Him any protector or any intercessor; so will you not be reminded?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 32\n        },\n        \"text\" : \"And if we had willed, We could have given every soul its guidance, but the word from Me will come into effect [that] \\\"I will surely fill Hell with jinn and people all together.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 32\n        },\n        \"text\" : \"Only those believe in Our verses who, when they are reminded by them, fall down in prostration and exalt [ Allah ] with praise of their Lord, and they are not arrogant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 33\n        },\n        \"text\" : \"O Prophet, fear Allah and do not obey the disbelievers and the hypocrites. Indeed, Allah is ever Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 33\n        },\n        \"text\" : \"And follow that which is revealed to you from your Lord. Indeed Allah is ever, with what you do, Acquainted.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 33\n        },\n        \"text\" : \"And rely upon Allah ; and sufficient is Allah as Disposer of affairs.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 33\n        },\n        \"text\" : \"Allah has not made for a man two hearts in his interior. And He has not made your wives whom you declare unlawful your mothers. And he has not made your adopted sons your [true] sons. That is [merely] your saying by your mouths, but Allah says the truth, and He guides to the [right] way.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 33\n        },\n        \"text\" : \"Call them by [the names of] their fathers; it is more just in the sight of Allah . But if you do not know their fathers -  then they are [still] your brothers in religion and those entrusted to you. And there is no blame upon you for that in which you have erred but [only for] what your hearts intended. And ever is Allah Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 33\n        },\n        \"text\" : \"The Prophet is more worthy of the believers than themselves, and his wives are [in the position of] their mothers. And those of [blood] relationship are more entitled [to inheritance] in the decree of Allah than the [other] believers and the emigrants, except that you may do to your close associates a kindness [through bequest]. That was in the Book inscribed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 33\n        },\n        \"text\" : \"O you who have believed, remember the favor of Allah upon you when armies came to [attack] you and We sent upon them a wind and armies [of angels] you did not see. And ever is Allah, of what you do, Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 33\n        },\n        \"text\" : \"[Remember] when they came at you from above you and from below you, and when eyes shifted [in fear], and hearts reached the throats and you assumed about Allah [various] assumptions.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 33\n        },\n        \"text\" : \"And [remember] when the hypocrites and those in whose hearts is disease said, \\\" Allah and His Messenger did not promise us except delusion,\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 33\n        },\n        \"text\" : \"And if they had been entered upon from all its [surrounding] regions and fitnah had been demanded of them, they would have done it and not hesitated over it except briefly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 33\n        },\n        \"text\" : \"And they had already promised Allah before not to turn their backs and flee. And ever is the promise to Allah [that about which one will be] questioned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 33\n        },\n        \"text\" : \"Say, \\\"Who is it that can protect you from Allah if He intends for you an ill or intends for you a mercy?\\\" And they will not find for themselves besides Allah any protector or any helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 33\n        },\n        \"text\" : \"Already Allah knows the hinderers among you and those [hypocrites] who say to their brothers, \\\"Come to us,\\\" and do not go to battle, except for a few,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 33\n        },\n        \"text\" : \"Indisposed toward you. And when fear comes, you see them looking at you, their eyes revolving like one being overcome by death. But when fear departs, they lash you with sharp tongues, indisposed toward [any] good. Those have not believed, so Allah has rendered their deeds worthless, and ever is that, for Allah, easy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 33\n        },\n        \"text\" : \"There has certainly been for you in the Messenger of Allah an excellent pattern for anyone whose hope is in Allah and the Last Day and [who] remembers Allah often.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 33\n        },\n        \"text\" : \"And when the believers saw the companies, they said, \\\"This is what Allah and His Messenger had promised us, and Allah and His Messenger spoke the truth.\\\" And it increased them only in faith and acceptance.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 33\n        },\n        \"text\" : \"Among the believers are men true to what they promised Allah . Among them is he who has fulfilled his vow [to the death], and among them is he who awaits [his chance]. And they did not alter [the terms of their commitment] by any alteration -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 33\n        },\n        \"text\" : \"That Allah may reward the truthful for their truth and punish the hypocrites if He wills or accept their repentance. Indeed, Allah is ever Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 33\n        },\n        \"text\" : \"And Allah repelled those who disbelieved, in their rage, not having obtained any good. And sufficient was Allah for the believers in battle, and ever is Allah Powerful and Exalted in Might.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 33\n        },\n        \"text\" : \"And He caused you to inherit their land and their homes and their properties and a land which you have not trodden. And ever is Allah, over all things, competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 33\n        },\n        \"text\" : \"But if you should desire Allah and His Messenger and the home of the Hereafter -  then indeed, Allah has prepared for the doers of good among you a great reward.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 33\n        },\n        \"text\" : \"O wives of the Prophet, whoever of you should commit a clear immorality -  for her the punishment would be doubled two fold, and ever is that, for Allah, easy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 33\n        },\n        \"text\" : \"And whoever of you devoutly obeys Allah and His Messenger and does righteousness - We will give her her reward twice; and We have prepared for her a noble provision.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 33\n        },\n        \"text\" : \"O wives of the Prophet, you are not like anyone among women. If you fear Allah, then do not be soft in speech [to men], lest he in whose heart is disease should covet, but speak with appropriate speech.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 33\n        },\n        \"text\" : \"And abide in your houses and do not display yourselves as [was] the display of the former times of ignorance. And establish prayer and give zakah and obey Allah and His Messenger. Allah intends only to remove from you the impurity [of sin], O people of the [Prophet's] household, and to purify you with [extensive] purification.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 33\n        },\n        \"text\" : \"And remember what is recited in your houses of the verses of Allah and wisdom. Indeed, Allah is ever Subtle and Acquainted [with all things].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 33\n        },\n        \"text\" : \"Indeed, the Muslim men and Muslim women, the believing men and believing women, the obedient men and obedient women, the truthful men and truthful women, the patient men and patient women, the humble men and humble women, the charitable men and charitable women, the fasting men and fasting women, the men who guard their private parts and the women who do so, and the men who remember Allah often and the women who do so -  for them Allah has prepared forgiveness and a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 33\n        },\n        \"text\" : \"It is not for a believing man or a believing woman, when Allah and His Messenger have decided a matter, that they should [thereafter] have any choice about their affair. And whoever disobeys Allah and His Messenger has certainly strayed into clear error.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 33\n        },\n        \"text\" : \"And [remember, O Muhammad], when you said to the one on whom Allah bestowed favor and you bestowed favor, \\\"Keep your wife and fear Allah,\\\" while you concealed within yourself that which Allah is to disclose. And you feared the people, while Allah has more right that you fear Him. So when Zayd had no longer any need for her, We married her to you in order that there not be upon the believers any discomfort concerning the wives of their adopted sons when they no longer have need of them. And ever is the command of Allah accomplished.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 33\n        },\n        \"text\" : \"There is not to be upon the Prophet any discomfort concerning that which Allah has imposed upon him. [This is] the established way of Allah with those [prophets] who have passed on before. And ever is the command of Allah a destiny decreed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 33\n        },\n        \"text\" : \"[ Allah praises] those who convey the messages of Allah and fear Him and do not fear anyone but Allah . And sufficient is Allah as Accountant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 33\n        },\n        \"text\" : \"Muhammad is not the father of [any] one of your men, but [he is] the Messenger of Allah and last of the prophets. And ever is Allah, of all things, Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 33\n        },\n        \"text\" : \"O you who have believed, remember Allah with much remembrance\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 33\n        },\n        \"text\" : \"And one who invites to Allah, by His permission, and an illuminating lamp.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 33\n        },\n        \"text\" : \"And give good tidings to the believers that they will have from Allah great bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 33\n        },\n        \"text\" : \"And do not obey the disbelievers and the hypocrites but do not harm them, and rely upon Allah . And sufficient is Allah as Disposer of affairs.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 33\n        },\n        \"text\" : \"O Prophet, indeed We have made lawful to you your wives to whom you have given their due compensation and those your right hand possesses from what Allah has returned to you [of captives] and the daughters of your paternal uncles and the daughters of your paternal aunts and the daughters of your maternal uncles and the daughters of your maternal aunts who emigrated with you and a believing woman if she gives herself to the Prophet [and] if the Prophet wishes to marry her, [this is] only for you, excluding the [other] believers. We certainly know what We have made obligatory upon them concerning their wives and those their right hands possess, [but this is for you] in order that there will be upon you no discomfort. And ever is Allah Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 33\n        },\n        \"text\" : \"You, [O Muhammad], may put aside whom you will of them or take to yourself whom you will. And any that you desire of those [wives] from whom you had [temporarily] separated -  there is no blame upon you [in returning her]. That is more suitable that they should be content and not grieve and that they should be satisfied with what you have given them -  all of them. And Allah knows what is in your hearts. And ever is Allah Knowing and Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 33\n        },\n        \"text\" : \"Not lawful to you, [O Muhammad], are [any additional] women after [this], nor [is it] for you to exchange them for [other] wives, even if their beauty were to please you, except what your right hand possesses. And ever is Allah, over all things, an Observer.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 33\n        },\n        \"text\" : \"O you who have believed, do not enter the houses of the Prophet except when you are permitted for a meal, without awaiting its readiness. But when you are invited, then enter; and when you have eaten, disperse without seeking to remain for conversation. Indeed, that [behavior] was troubling the Prophet, and he is shy of [dismissing] you. But Allah is not shy of the truth. And when you ask [his wives] for something, ask them from behind a partition. That is purer for your hearts and their hearts. And it is not [conceivable or lawful] for you to harm the Messenger of Allah or to marry his wives after him, ever. Indeed, that would be in the sight of Allah an enormity.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 33\n        },\n        \"text\" : \"Whether you reveal a thing or conceal it, indeed Allah is ever, of all things, Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 33\n        },\n        \"text\" : \"There is no blame upon women concerning their fathers or their sons or their brothers or their brothers' sons or their sisters' sons or their women or those their right hands possess. And fear Allah . Indeed Allah is ever, over all things, Witness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 33\n        },\n        \"text\" : \"Indeed, Allah confers blessing upon the Prophet, and His angels [ask Him to do so]. O you who have believed, ask [ Allah to confer] blessing upon him and ask [ Allah to grant him] peace.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 33\n        },\n        \"text\" : \"Indeed, those who abuse Allah and His Messenger - Allah has cursed them in this world and the Hereafter and prepared for them a humiliating punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 59,\n          \"sura\" : 33\n        },\n        \"text\" : \"O Prophet, tell your wives and your daughters and the women of the believers to bring down over themselves [part] of their outer garments. That is more suitable that they will be known and not be abused. And ever is Allah Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 33\n        },\n        \"text\" : \"[This is] the established way of Allah with those who passed on before; and you will not find in the way of Allah any change.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 33\n        },\n        \"text\" : \"People ask you concerning the Hour. Say,\\\" Knowledge of it is only with Allah . And what may make you perceive? Perhaps the Hour is near.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 33\n        },\n        \"text\" : \"Indeed, Allah has cursed the disbelievers and prepared for them a Blaze.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 33\n        },\n        \"text\" : \"The Day their faces will be turned about in the Fire, they will say, \\\"How we wish we had obeyed Allah and obeyed the Messenger.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 33\n        },\n        \"text\" : \"O you who have believed, be not like those who abused Moses; then Allah cleared him of what they said. And he, in the sight of Allah, was distinguished.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 70,\n          \"sura\" : 33\n        },\n        \"text\" : \"O you who have believed, fear Allah and speak words of appropriate justice.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 33\n        },\n        \"text\" : \"He will [then] amend for you your deeds and forgive you your sins. And whoever obeys Allah and His Messenger has certainly attained a great attainment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 33\n        },\n        \"text\" : \"[It was] so that Allah may punish the hypocrite men and hypocrite women and the men and women who associate others with Him and that Allah may accept repentance from the believing men and believing women. And ever is Allah Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 34\n        },\n        \"text\" : \"[All] praise is [due] to Allah, to whom belongs whatever is in the heavens and whatever is in the earth, and to Him belongs [all] praise in the Hereafter. And He is the Wise, the Acquainted.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 34\n        },\n        \"text\" : \"But those who disbelieve say, \\\"The Hour will not come to us.\\\" Say, \\\"Yes, by my Lord, it will surely come to you. [ Allah is] the Knower of the unseen.\\\" Not absent from Him is an atom's weight within the heavens or within the earth or [what is] smaller than that or greater, except that it is in a clear register -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 34\n        },\n        \"text\" : \"But those who disbelieve say, \\\"Shall we direct you to a man who will inform you [that] when you have disintegrated in complete disintegration, you will [then] be [recreated] in a new creation?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 34\n        },\n        \"text\" : \"Has he invented about Allah a lie or is there in him madness?\\\" Rather, they who do not believe in the Hereafter will be in the punishment and [are in] extreme error.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 34\n        },\n        \"text\" : \"Then, do they not look at what is before them and what is behind them of the heaven and earth? If We should will, We could cause the earth to swallow them or [could] let fall upon them fragments from the sky. Indeed in that is a sign for every servant turning back [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 34\n        },\n        \"text\" : \"[Commanding him], \\\"Make full coats of mail and calculate [precisely] the links, and work [all of you] righteousness. Indeed I, of what you do, am Seeing.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 34\n        },\n        \"text\" : \"And he had over them no authority except [it was decreed] that We might make evident who believes in the Hereafter from who is thereof in doubt. And your Lord, over all things, is Guardian.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"Invoke those you claim [as deities] besides Allah .\\\" They do not possess an atom's weight [of ability] in the heavens or on the earth, and they do not have therein any partnership [with Him], nor is there for Him from among them any assistant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say, \\\"Who provides for you from the heavens and the earth?\\\" Say, \\\" Allah . And indeed, we or you are either upon guidance or in clear error.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say, \\\"Show me those whom you have attached to Him as partners. No! Rather, He [alone] is Allah, the Exalted in Might, the Wise.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 34\n        },\n        \"text\" : \"Those who were oppressed will say to those who were arrogant, \\\"Rather, [it was your] conspiracy of night and day when you were ordering us to disbelieve in Allah and attribute to Him equals.\\\" But they will [all] confide regret when they see the punishment; and We will put shackles on the necks of those who disbelieved. Will they be recompensed except for what they used to do?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 34\n        },\n        \"text\" : \"And [mention] the Day when He will gather them all and then say to the angels, \\\"Did these [people] used to worship you?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 34\n        },\n        \"text\" : \"They will say, \\\"Exalted are You! You, [O Allah ], are our benefactor not them. Rather, they used to worship the jinn; most of them were believers in them.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say, \\\"I only advise you of one [thing] -  that you stand for Allah, [seeking truth] in pairs and individually, and then give thought.\\\" There is not in your companion any madness. He is only a warner to you before a severe punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 34\n        },\n        \"text\" : \"Say, \\\"Whatever payment I might have asked of you -  it is yours. My payment is only from Allah, and He is, over all things, Witness.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 35\n        },\n        \"text\" : \"[All] praise is [due] to Allah, Creator of the heavens and the earth, [who] made the angels messengers having wings, two or three or four. He increases in creation what He wills. Indeed, Allah is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 35\n        },\n        \"text\" : \"Whatever Allah grants to people of mercy -  none can withhold it; and whatever He withholds -  none can release it thereafter. And He is the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 35\n        },\n        \"text\" : \"O mankind, remember the favor of Allah upon you. Is there any creator other than Allah who provides for you from the heaven and earth? There is no deity except Him, so how are you deluded?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 35\n        },\n        \"text\" : \"And if they deny you, [O Muhammad] -  already were messengers denied before you. And to Allah are returned [all] matters.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 35\n        },\n        \"text\" : \"O mankind, indeed the promise of Allah is truth, so let not the worldly life delude you and be not deceived about Allah by the Deceiver.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 35\n        },\n        \"text\" : \"Then is one to whom the evil of his deed has been made attractive so he considers it good [like one rightly guided]? For indeed, Allah sends astray whom He wills and guides whom He wills. So do not let yourself perish over them in regret. Indeed, Allah is Knowing of what they do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 35\n        },\n        \"text\" : \"And it is Allah who sends the winds, and they stir the clouds, and We drive them to a dead land and give life thereby to the earth after its lifelessness. Thus is the resurrection.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 35\n        },\n        \"text\" : \"Whoever desires honor [through power] -  then to Allah belongs all honor. To Him ascends good speech, and righteous work raises it. But they who plot evil deeds will have a severe punishment, and the plotting of those -  it will perish.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 35\n        },\n        \"text\" : \"And Allah created you from dust, then from a sperm-drop; then He made you mates. And no female conceives nor does she give birth except with His knowledge. And no aged person is granted [additional] life nor is his lifespan lessened but that it is in a register. Indeed, that for Allah is easy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 35\n        },\n        \"text\" : \"He causes the night to enter the day, and He causes the day to enter the night and has subjected the sun and the moon -  each running [its course] for a specified term. That is Allah, your Lord; to Him belongs sovereignty. And those whom you invoke other than Him do not possess [as much as] the membrane of a date seed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 35\n        },\n        \"text\" : \"If you invoke them, they do not hear your supplication; and if they heard, they would not respond to you. And on the Day of Resurrection they will deny your association. And none can inform you like [one] Acquainted [with all matters].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 35\n        },\n        \"text\" : \"O mankind, you are those in need of Allah, while Allah is the Free of need, the Praiseworthy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 35\n        },\n        \"text\" : \"And that is for Allah not difficult.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 35\n        },\n        \"text\" : \"And no bearer of burdens will bear the burden of another. And if a heavily laden soul calls [another] to [carry some of] its load, nothing of it will be carried, even if he should be a close relative. You can only warn those who fear their Lord unseen and have established prayer. And whoever purifies himself only purifies himself for [the benefit of] his soul. And to Allah is the [final] destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 35\n        },\n        \"text\" : \"And not equal are the living and the dead. Indeed, Allah causes to hear whom He wills, but you cannot make hear those in the graves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 35\n        },\n        \"text\" : \"Do you not see that Allah sends down rain from the sky, and We produce thereby fruits of varying colors? And in the mountains are tracts, white and red of varying shades and [some] extremely black.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 35\n        },\n        \"text\" : \"And among people and moving creatures and grazing livestock are various colors similarly. Only those fear Allah, from among His servants, who have knowledge. Indeed, Allah is Exalted in Might and Forgiving.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 35\n        },\n        \"text\" : \"Indeed, those who recite the Book of Allah and establish prayer and spend [in His cause] out of what We have provided them, secretly and publicly, [can] expect a profit that will never perish -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 35\n        },\n        \"text\" : \"And that which We have revealed to you, [O Muhammad], of the Book is the truth, confirming what was before it. Indeed, Allah, of His servants, is Acquainted and Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 35\n        },\n        \"text\" : \"Then we caused to inherit the Book those We have chosen of Our servants; and among them is he who wrongs himself, and among them is he who is moderate, and among them is he who is foremost in good deeds by permission of Allah . That [inheritance] is what is the great bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 35\n        },\n        \"text\" : \"And they will say, \\\"Praise to Allah, who has removed from us [all] sorrow. Indeed, our Lord is Forgiving and Appreciative -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 35\n        },\n        \"text\" : \"Indeed, Allah is Knower of the unseen [aspects] of the heavens and earth. Indeed, He is Knowing of that within the breasts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 35\n        },\n        \"text\" : \"Say, \\\"Have you considered your 'partners' whom you invoke besides Allah ? Show me what they have created from the earth, or have they partnership [with Him] in the heavens? Or have We given them a book so they are [standing] on evidence therefrom? [No], rather, the wrongdoers do not promise each other except delusion.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 35\n        },\n        \"text\" : \"Indeed, Allah holds the heavens and the earth, lest they cease. And if they should cease, no one could hold them [in place] after Him. Indeed, He is Forbearing and Forgiving.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 35\n        },\n        \"text\" : \"And they swore by Allah their strongest oaths that if a warner came to them, they would be more guided than [any] one of the [previous] nations. But when a warner came to them, it did not increase them except in aversion.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 35\n        },\n        \"text\" : \"[Due to] arrogance in the land and plotting of evil; but the evil plot does not encompass except its own people. Then do they await except the way of the former peoples? But you will never find in the way of Allah any change, and you will never find in the way of Allah any alteration.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 35\n        },\n        \"text\" : \"Have they not traveled through the land and observed how was the end of those before them? And they were greater than them in power. But Allah is not to be caused failure by anything in the heavens or on the earth. Indeed, He is ever Knowing and Competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 35\n        },\n        \"text\" : \"And if Allah were to impose blame on the people for what they have earned, He would not leave upon the earth any creature. But He defers them for a specified term. And when their time comes, then indeed Allah has ever been, of His servants, Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 36\n        },\n        \"text\" : \"And it is all the same for them whether you warn them or do not warn them -  they will not believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 36\n        },\n        \"text\" : \"Indeed, it is We who bring the dead to life and record what they have put forth and what they left behind, and all things We have enumerated in a clear register.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 36\n        },\n        \"text\" : \"Should I take other than Him [false] deities [while], if the Most Merciful intends for me some adversity, their intercession will not avail me at all, nor can they save me?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 36\n        },\n        \"text\" : \"And indeed, all of them will yet be brought present before Us.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 36\n        },\n        \"text\" : \"Exalted is He who created all pairs -  from what the earth grows and from themselves and from that which they do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 36\n        },\n        \"text\" : \"It is not allowable for the sun to reach the moon, nor does the night overtake the day, but each, in an orbit, is swimming.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 36\n        },\n        \"text\" : \"And when it is said to them, \\\"Spend from that which Allah has provided for you,\\\" those who disbelieve say to those who believe, \\\"Should we feed one whom, if Allah had willed, He would have fed? You are not but in clear error.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 36\n        },\n        \"text\" : \"It will not be but one blast, and at once they are all brought present before Us.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 36\n        },\n        \"text\" : \"So today no soul will be wronged at all, and you will not be recompensed except for what you used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 36\n        },\n        \"text\" : \"But they have taken besides Allah [false] deities that perhaps they would be helped.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 36\n        },\n        \"text\" : \"Say, \\\"He will give them life who produced them the first time; and He is, of all creation, Knowing.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 83,\n          \"sura\" : 36\n        },\n        \"text\" : \"So exalted is He in whose hand is the realm of all things, and to Him you will be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 37\n        },\n        \"text\" : \"Other than Allah, and guide them to the path of Hellfire\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 37\n        },\n        \"text\" : \"Indeed they, when it was said to them, \\\"There is no deity but Allah,\\\" were arrogant\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 37\n        },\n        \"text\" : \"But not the chosen servants of Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 37\n        },\n        \"text\" : \"He will say, \\\"By Allah, you almost ruined me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 37\n        },\n        \"text\" : \"But not the chosen servants of Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 37\n        },\n        \"text\" : \"And Noah had certainly called Us, and [We are] the best of responders.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 86,\n          \"sura\" : 37\n        },\n        \"text\" : \"Is it falsehood [as] gods other than Allah you desire?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 96,\n          \"sura\" : 37\n        },\n        \"text\" : \"While Allah created you and that which you do?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 102,\n          \"sura\" : 37\n        },\n        \"text\" : \"And when he reached with him [the age of] exertion, he said, \\\"O my son, indeed I have seen in a dream that I [must] sacrifice you, so see what you think.\\\"  He said, \\\"O my father, do as you are commanded.  You will find me, if Allah wills, of the steadfast.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 104,\n          \"sura\" : 37\n        },\n        \"text\" : \"We called to him, \\\"O Abraham,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 124,\n          \"sura\" : 37\n        },\n        \"text\" : \"When he said to his people, \\\"Will you not fear Allah ?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 125,\n          \"sura\" : 37\n        },\n        \"text\" : \"Do you call upon Ba'l and leave the best of creators -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 126,\n          \"sura\" : 37\n        },\n        \"text\" : \"Allah, your Lord and the Lord of your first forefathers?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 128,\n          \"sura\" : 37\n        },\n        \"text\" : \"Except the chosen servants of Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 134,\n          \"sura\" : 37\n        },\n        \"text\" : \"[So mention] when We saved him and his family, all,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 142,\n          \"sura\" : 37\n        },\n        \"text\" : \"Then the fish swallowed him, while he was blameworthy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 143,\n          \"sura\" : 37\n        },\n        \"text\" : \"And had he not been of those who exalt Allah,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 152,\n          \"sura\" : 37\n        },\n        \"text\" : \"\\\" Allah has begotten,\\\" and indeed, they are liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 159,\n          \"sura\" : 37\n        },\n        \"text\" : \"Exalted is Allah above what they describe,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 160,\n          \"sura\" : 37\n        },\n        \"text\" : \"Except the chosen servants of Allah [who do not share in that sin].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 166,\n          \"sura\" : 37\n        },\n        \"text\" : \"And indeed, we are those who exalt Allah .\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 169,\n          \"sura\" : 37\n        },\n        \"text\" : \"We would have been the chosen servants of Allah .\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 175,\n          \"sura\" : 37\n        },\n        \"text\" : \"And see [what will befall] them, for they are going to see.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 182,\n          \"sura\" : 37\n        },\n        \"text\" : \"And praise to Allah, Lord of the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 38\n        },\n        \"text\" : \"How many a generation have We destroyed before them, and they [then] called out; but it was not a time for escape.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 38\n        },\n        \"text\" : \"Has the message been revealed to him out of [all of] us?\\\" Rather, they are in doubt about My message. Rather, they have not yet tasted My punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 38\n        },\n        \"text\" : \"Be patient over what they say and remember Our servant, David, the possessor of strength; indeed, he was one who repeatedly turned back [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 38\n        },\n        \"text\" : \"Indeed, We subjected the mountains [to praise] with him, exalting [ Allah ] in the [late] afternoon and [after] sunrise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 38\n        },\n        \"text\" : \"And the birds were assembled, all with him repeating [praises].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 38\n        },\n        \"text\" : \"And has there come to you the news of the adversaries, when they climbed over the wall of [his] prayer chamber -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 38\n        },\n        \"text\" : \"[David] said, \\\"He has certainly wronged you in demanding your ewe [in addition] to his ewes. And indeed, many associates oppress one another, except for those who believe and do righteous deeds -  and few are they.\\\" And David became certain that We had tried him, and he asked forgiveness of his Lord and fell down bowing [in prostration] and turned in repentance [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 38\n        },\n        \"text\" : \"[We said], \\\"O David, indeed We have made you a successor upon the earth, so judge between the people in truth and do not follow [your own] desire, as it will lead you astray from the way of Allah .\\\" Indeed, those who go astray from the way of Allah will have a severe punishment for having forgotten the Day of Account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 38\n        },\n        \"text\" : \"Or should we treat those who believe and do righteous deeds like corrupters in the land? Or should We treat those who fear Allah like the wicked?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 38\n        },\n        \"text\" : \"And to David We gave Solomon. An excellent servant, indeed he was one repeatedly turning back [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 38\n        },\n        \"text\" : \"And remember Our servant Job, when he called to his Lord, \\\"Indeed, Satan has touched me with hardship and torment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 38\n        },\n        \"text\" : \"[We said], \\\"And take in your hand a bunch [of grass] and strike with it and do not break your oath.\\\" Indeed, We found him patient, an excellent servant. Indeed, he was one repeatedly turning back [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 38\n        },\n        \"text\" : \"And remember Ishmael, Elisha and Dhul-Kifl, and all are among the outstanding.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 38\n        },\n        \"text\" : \"Reclining within them, they will call therein for abundant fruit and drink.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 38\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"I am only a warner, and there is not any deity except Allah, the One, the Prevailing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 38\n        },\n        \"text\" : \"So when I have proportioned him and breathed into him of My [created] soul, then fall down to him in prostration.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 38\n        },\n        \"text\" : \"So the angels prostrated -  all of them entirely.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 38\n        },\n        \"text\" : \"[ Allah ] said, \\\"O Iblees, what prevented you from prostrating to that which I created with My hands? Were you arrogant [then], or were you [already] among the haughty?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 38\n        },\n        \"text\" : \"[ Allah ] said, \\\"Then get out of Paradise, for indeed, you are expelled.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 80,\n          \"sura\" : 38\n        },\n        \"text\" : \"[ Allah ] said, \\\"So indeed, you are of those reprieved\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 82,\n          \"sura\" : 38\n        },\n        \"text\" : \"[Iblees] said, \\\"By your might, I will surely mislead them all\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 38\n        },\n        \"text\" : \"[ Allah ] said, \\\"The truth [is My oath], and the truth I say -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 38\n        },\n        \"text\" : \"[That] I will surely fill Hell with you and those of them that follow you all together.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 39\n        },\n        \"text\" : \"The revelation of the Qur'an is from Allah, the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 39\n        },\n        \"text\" : \"Indeed, We have sent down to you the Book, [O Muhammad], in truth. So worship Allah, [being] sincere to Him in religion.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 39\n        },\n        \"text\" : \"Unquestionably, for Allah is the pure religion. And those who take protectors besides Him [say], \\\"We only worship them that they may bring us nearer to Allah in position.\\\" Indeed, Allah will judge between them concerning that over which they differ. Indeed, Allah does not guide he who is a liar and [confirmed] disbeliever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 39\n        },\n        \"text\" : \"If Allah had intended to take a son, He could have chosen from what He creates whatever He willed. Exalted is He; He is Allah, the One, the Prevailing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 39\n        },\n        \"text\" : \"He created you from one soul. Then He made from it its mate, and He produced for you from the grazing livestock eight mates. He creates you in the wombs of your mothers, creation after creation, within three darknesses. That is Allah, your Lord; to Him belongs dominion. There is no deity except Him, so how are you averted?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 39\n        },\n        \"text\" : \"If you disbelieve -  indeed, Allah is Free from need of you. And He does not approve for His servants disbelief. And if you are grateful, He approves it for you; and no bearer of burdens will bear the burden of another. Then to your Lord is your return, and He will inform you about what you used to do. Indeed, He is Knowing of that within the breasts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 39\n        },\n        \"text\" : \"And when adversity touches man, he calls upon his Lord, turning to Him [alone]; then when He bestows on him a favor from Himself, he forgets Him whom he called upon before, and he attributes to Allah equals to mislead [people] from His way. Say, \\\"Enjoy your disbelief for a little; indeed, you are of the companions of the Fire.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 39\n        },\n        \"text\" : \"Say, \\\"O My servants who have believed, fear your Lord. For those who do good in this world is good, and the earth of Allah is spacious. Indeed, the patient will be given their reward without account.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 39\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"Indeed, I have been commanded to worship Allah, [being] sincere to Him in religion.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 39\n        },\n        \"text\" : \"Say, \\\" Allah [alone] do I worship, sincere to Him in my religion,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 39\n        },\n        \"text\" : \"They will have canopies of fire above them and below them, canopies. By that Allah threatens His servants. O My servants, then fear Me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 39\n        },\n        \"text\" : \"But those who have avoided Taghut, lest they worship it, and turned back to Allah -  for them are good tidings. So give good tidings to My servants\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 39\n        },\n        \"text\" : \"Who listen to speech and follow the best of it. Those are the ones Allah has guided, and those are people of understanding.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 39\n        },\n        \"text\" : \"But those who have feared their Lord -  for them are chambers, above them chambers built high, beneath which rivers flow. [This is] the promise of Allah . Allah does not fail in [His] promise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 39\n        },\n        \"text\" : \"Do you not see that Allah sends down rain from the sky and makes it flow as springs [and rivers] in the earth; then He produces thereby crops of varying colors; then they dry and you see them turned yellow; then He makes them [scattered] debris. Indeed in that is a reminder for those of understanding.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 39\n        },\n        \"text\" : \"So is one whose breast Allah has expanded to [accept] Islam and he is upon a light from his Lord [like one whose heart rejects it]? Then woe to those whose hearts are hardened against the remembrance of Allah . Those are in manifest error.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 39\n        },\n        \"text\" : \"Allah has sent down the best statement: a consistent Book wherein is reiteration. The skins shiver therefrom of those who fear their Lord; then their skins and their hearts relax at the remembrance of Allah . That is the guidance of Allah by which He guides whom He wills. And one whom Allah leaves astray -  for him there is no guide.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 39\n        },\n        \"text\" : \"So Allah made them taste disgrace in worldly life. But the punishment of the Hereafter is greater, if they only knew.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 39\n        },\n        \"text\" : \"Allah presents an example: a slave owned by quarreling partners and another belonging exclusively to one man -  are they equal in comparison? Praise be to Allah ! But most of them do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 39\n        },\n        \"text\" : \"So who is more unjust than one who lies about Allah and denies the truth when it has come to him? Is there not in Hell a residence for the disbelievers?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 39\n        },\n        \"text\" : \"That Allah may remove from them the worst of what they did and reward them their due for the best of what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 39\n        },\n        \"text\" : \"Is not Allah sufficient for His Servant [Prophet Muhammad]? And [yet], they threaten you with those [they worship] other than Him. And whoever Allah leaves astray -  for him there is no guide.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 39\n        },\n        \"text\" : \"And whoever Allah guides -  for him there is no misleader. Is not Allah Exalted in Might and Owner of Retribution?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 39\n        },\n        \"text\" : \"And if you asked them, \\\"Who created the heavens and the earth?\\\" they would surely say, \\\" Allah .\\\" Say, \\\"Then have you considered what you invoke besides Allah ? If Allah intended me harm, are they removers of His harm; or if He intended me mercy, are they withholders of His mercy?\\\" Say, \\\"Sufficient for me is Allah ; upon Him [alone] rely the [wise] reliers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 39\n        },\n        \"text\" : \"Allah takes the souls at the time of their death, and those that do not die [He takes] during their sleep. Then He keeps those for which He has decreed death and releases the others for a specified term. Indeed in that are signs for a people who give thought.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 39\n        },\n        \"text\" : \"Or have they taken other than Allah as intercessors? Say, \\\"Even though they do not possess [power over] anything, nor do they reason?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 39\n        },\n        \"text\" : \"Say, \\\"To Allah belongs [the right to allow] intercession entirely. To Him belongs the dominion of the heavens and the earth. Then to Him you will be returned.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 39\n        },\n        \"text\" : \"And when Allah is mentioned alone, the hearts of those who do not believe in the Hereafter shrink with aversion, but when those [worshipped] other than Him are mentioned, immediately they rejoice.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 39\n        },\n        \"text\" : \"Say, \\\"O Allah, Creator of the heavens and the earth, Knower of the unseen and the witnessed, You will judge between your servants concerning that over which they used to differ.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 39\n        },\n        \"text\" : \"And if those who did wrong had all that is in the earth entirely and the like of it with it, they would [attempt to] ransom themselves thereby from the worst of the punishment on the Day of Resurrection. And there will appear to them from Allah that which they had not taken into account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 39\n        },\n        \"text\" : \"And when adversity touches man, he calls upon Us; then when We bestow on him a favor from Us, he says, \\\"I have only been given it because of [my] knowledge.\\\" Rather, it is a trial, but most of them do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 39\n        },\n        \"text\" : \"Do they not know that Allah extends provision for whom He wills and restricts [it]? Indeed in that are signs for a people who believe.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 39\n        },\n        \"text\" : \"Say, \\\"O My servants who have transgressed against themselves [by sinning], do not despair of the mercy of Allah . Indeed, Allah forgives all sins. Indeed, it is He who is the Forgiving, the Merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 39\n        },\n        \"text\" : \"Lest a soul should say, \\\"Oh [how great is] my regret over what I neglected in regard to Allah and that I was among the mockers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 57,\n          \"sura\" : 39\n        },\n        \"text\" : \"Or [lest] it say, \\\"If only Allah had guided me, I would have been among the righteous.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 39\n        },\n        \"text\" : \"And on the Day of Resurrection you will see those who lied about Allah [with] their faces blackened. Is there not in Hell a residence for the arrogant?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 39\n        },\n        \"text\" : \"And Allah will save those who feared Him by their attainment; no evil will touch them, nor will they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 39\n        },\n        \"text\" : \"Allah is the Creator of all things, and He is, over all things, Disposer of affairs.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 39\n        },\n        \"text\" : \"To Him belong the keys of the heavens and the earth. And they who disbelieve in the verses of Allah -  it is those who are the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 39\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"Is it other than Allah that you order me to worship, O ignorant ones?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 39\n        },\n        \"text\" : \"And it was already revealed to you and to those before you that if you should associate [anything] with Allah, your work would surely become worthless, and you would surely be among the losers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 39\n        },\n        \"text\" : \"Rather, worship [only] Allah and be among the grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 67,\n          \"sura\" : 39\n        },\n        \"text\" : \"They have not appraised Allah with true appraisal, while the earth entirely will be [within] His grip on the Day of Resurrection, and the heavens will be folded in His right hand. Exalted is He and high above what they associate with Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 39\n        },\n        \"text\" : \"And the Horn will be blown, and whoever is in the heavens and whoever is on the earth will fall dead except whom Allah wills. Then it will be blown again, and at once they will be standing, looking on.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 72,\n          \"sura\" : 39\n        },\n        \"text\" : \"[To them] it will be said, \\\"Enter the gates of Hell to abide eternally therein, and wretched is the residence of the arrogant.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 73,\n          \"sura\" : 39\n        },\n        \"text\" : \"But those who feared their Lord will be driven to Paradise in groups until, when they reach it while its gates have been opened and its keepers say, \\\"Peace be upon you; you have become pure; so enter it to abide eternally therein,\\\" [they will enter].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 39\n        },\n        \"text\" : \"And they will say, \\\"Praise to Allah, who has fulfilled for us His promise and made us inherit the earth [so] we may settle in Paradise wherever we will. And excellent is the reward of [righteous] workers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 39\n        },\n        \"text\" : \"And you will see the angels surrounding the Throne, exalting [ Allah ] with praise of their Lord. And it will be judged between them in truth, and it will be said, \\\"[All] praise to Allah, Lord of the worlds.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 40\n        },\n        \"text\" : \"The revelation of the Book is from Allah, the Exalted in Might, the Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 40\n        },\n        \"text\" : \"No one disputes concerning the signs of Allah except those who disbelieve, so be not deceived by their [uninhibited] movement throughout the land.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 40\n        },\n        \"text\" : \"Those [angels] who carry the Throne and those around it exalt [ Allah ] with praise of their Lord and believe in Him and ask forgiveness for those who have believed, [saying], \\\"Our Lord, You have encompassed all things in mercy and knowledge, so forgive those who have repented and followed Your way and protect them from the punishment of Hellfire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 40\n        },\n        \"text\" : \"Indeed, those who disbelieve will be addressed, \\\"The hatred of Allah for you was [even] greater than your hatred of yourselves [this Day in Hell] when you were invited to faith, but you refused.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 40\n        },\n        \"text\" : \"[They will be told], \\\"That is because, when Allah was called upon alone, you disbelieved; but if others were associated with Him, you believed. So the judgement is with Allah, the Most High, the Grand.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 40\n        },\n        \"text\" : \"So invoke Allah, [being] sincere to Him in religion, although the disbelievers dislike it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 40\n        },\n        \"text\" : \"[He is] the Exalted above [all] degrees, Owner of the Throne; He places the inspiration of His command upon whom He wills of His servants to warn of the Day of Meeting.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 40\n        },\n        \"text\" : \"The Day they come forth nothing concerning them will be concealed from Allah . To whom belongs [all] sovereignty this Day? To Allah, the One, the Prevailing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 40\n        },\n        \"text\" : \"This Day every soul will be recompensed for what it earned. No injustice today! Indeed, Allah is swift in account.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 40\n        },\n        \"text\" : \"And Allah judges with truth, while those they invoke besides Him judge not with anything. Indeed, Allah -  He is the Hearing, the Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 40\n        },\n        \"text\" : \"Have they not traveled through the land and observed how was the end of those who were before them? They were greater than them in strength and in impression on the land, but Allah seized them for their sins. And they had not from Allah any protector.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 40\n        },\n        \"text\" : \"That was because their messengers were coming to them with clear proofs, but they disbelieved, so Allah seized them. Indeed, He is Powerful and severe in punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 40\n        },\n        \"text\" : \"And Pharaoh said, \\\"Let me kill Moses and let him call upon his Lord. Indeed, I fear that he will change your religion or that he will cause corruption in the land.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 40\n        },\n        \"text\" : \"And a believing man from the family of Pharaoh who concealed his faith said, \\\"Do you kill a man [merely] because he says, 'My Lord is Allah ' while he has brought you clear proofs from your Lord? And if he should be lying, then upon him is [the consequence of] his lie; but if he should be truthful, there will strike you some of what he promises you. Indeed, Allah does not guide one who is a transgressor and a liar.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 40\n        },\n        \"text\" : \"O my people, sovereignty is yours today, [your being] dominant in the land.  But who would protect us from the punishment of Allah if it came to us?\\\"  Pharaoh said, \\\"I do not show you except what I see, and I do not guide you except to the way of right conduct.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 40\n        },\n        \"text\" : \"Like the custom of the people of Noah and of 'Aad and Thamud and those after them. And Allah wants no injustice for [His] servants.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 40\n        },\n        \"text\" : \"And O my people, indeed I fear for you the Day of Calling -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 40\n        },\n        \"text\" : \"The Day you will turn your backs fleeing; there is not for you from Allah any protector. And whoever Allah leaves astray -  there is not for him any guide.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 40\n        },\n        \"text\" : \"And Joseph had already come to you before with clear proofs, but you remained in doubt of that which he brought to you, until when he died, you said, 'Never will Allah send a messenger after him.' Thus does Allah leave astray he who is a transgressor and skeptic.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 40\n        },\n        \"text\" : \"Those who dispute concerning the signs of Allah without an authority having come to them -  great is hatred [of them] in the sight of Allah and in the sight of those who have believed. Thus does Allah seal over every heart [belonging to] an arrogant tyrant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 40\n        },\n        \"text\" : \"You invite me to disbelieve in Allah and associate with Him that of which I have no knowledge, and I invite you to the Exalted in Might, the Perpetual Forgiver.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 40\n        },\n        \"text\" : \"Assuredly, that to which you invite me has no [response to a] supplication in this world or in the Hereafter; and indeed, our return is to Allah, and indeed, the transgressors will be companions of the Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 40\n        },\n        \"text\" : \"And you will remember what I [now] say to you, and I entrust my affair to Allah . Indeed, Allah is Seeing of [His] servants.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 45,\n          \"sura\" : 40\n        },\n        \"text\" : \"So Allah protected him from the evils they plotted, and the people of Pharaoh were enveloped by the worst of punishment -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 40\n        },\n        \"text\" : \"Those who had been arrogant will say, \\\"Indeed, all [of us] are in it.  Indeed, Allah has judged between the servants.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 40\n        },\n        \"text\" : \"So be patient, [O Muhammad]. Indeed, the promise of Allah is truth. And ask forgiveness for your sin and exalt [ Allah ] with praise of your Lord in the evening and the morning.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 40\n        },\n        \"text\" : \"Indeed, those who dispute concerning the signs of Allah without [any] authority having come to them -  there is not within their breasts except pride, [the extent of] which they cannot reach. So seek refuge in Allah . Indeed, it is He who is the Hearing, the Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 60,\n          \"sura\" : 40\n        },\n        \"text\" : \"And your Lord says, \\\"Call upon Me; I will respond to you.\\\" Indeed, those who disdain My worship will enter Hell [rendered] contemptible.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 61,\n          \"sura\" : 40\n        },\n        \"text\" : \"It is Allah who made for you the night that you may rest therein and the day giving sight. Indeed, Allah is full of bounty to the people, but most of the people are not grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 40\n        },\n        \"text\" : \"That is Allah, your Lord, Creator of all things; there is no deity except Him, so how are you deluded?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 40\n        },\n        \"text\" : \"Thus were those [before you] deluded who were rejecting the signs of Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 40\n        },\n        \"text\" : \"It is Allah who made for you the earth a place of settlement and the sky a ceiling and formed you and perfected your forms and provided you with good things. That is Allah, your Lord; then blessed is Allah, Lord of the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 65,\n          \"sura\" : 40\n        },\n        \"text\" : \"He is the Ever-Living; there is no deity except Him, so call upon Him, [being] sincere to Him in religion. [All] praise is [due] to Allah, Lord of the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 66,\n          \"sura\" : 40\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"Indeed, I have been forbidden to worship those you call upon besides Allah once the clear proofs have come to me from my Lord, and I have been commanded to submit to the Lord of the worlds.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 69,\n          \"sura\" : 40\n        },\n        \"text\" : \"Do you not consider those who dispute concerning the signs of Allah -  how are they averted?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 40\n        },\n        \"text\" : \"Other than Allah ?\\\" They will say, \\\"They have departed from us; rather, we did not used to invoke previously anything.\\\" Thus does Allah put astray the disbelievers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 76,\n          \"sura\" : 40\n        },\n        \"text\" : \"Enter the gates of Hell to abide eternally therein, and wretched is the residence of the arrogant.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 40\n        },\n        \"text\" : \"So be patient, [O Muhammad]; indeed, the promise of Allah is truth. And whether We show you some of what We have promised them or We take you in death, it is to Us they will be returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 78,\n          \"sura\" : 40\n        },\n        \"text\" : \"And We have already sent messengers before you. Among them are those [whose stories] We have related to you, and among them are those [whose stories] We have not related to you. And it was not for any messenger to bring a sign [or verse] except by permission of Allah . So when the command of Allah comes, it will be concluded in truth, and the falsifiers will thereupon lose [all].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 79,\n          \"sura\" : 40\n        },\n        \"text\" : \"It is Allah who made for you the grazing animals upon which you ride, and some of them you eat.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 81,\n          \"sura\" : 40\n        },\n        \"text\" : \"And He shows you His signs. So which of the signs of Allah do you deny?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 40\n        },\n        \"text\" : \"And when they saw Our punishment, they said,\\\" We believe in Allah alone and disbelieve in that which we used to associate with Him.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 85,\n          \"sura\" : 40\n        },\n        \"text\" : \"But never did their faith benefit them once they saw Our punishment. [It is] the established way of Allah which has preceded among His servants. And the disbelievers thereupon lost [all].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 41\n        },\n        \"text\" : \"[This is] a revelation from the Entirely Merciful, the Especially Merciful -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 41\n        },\n        \"text\" : \"Say, O [Muhammad], \\\"I am only a man like you to whom it has been revealed that your god is but one God; so take a straight course to Him and seek His forgiveness.\\\" And woe to those who associate others with Allah -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 41\n        },\n        \"text\" : \"[That occurred] when the messengers had come to them before them and after them, [saying], \\\"Worship not except Allah .\\\" They said, \\\"If our Lord had willed, He would have sent down the angels, so indeed we, in that with which you have been sent, are disbelievers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 41\n        },\n        \"text\" : \"As for 'Aad, they were arrogant upon the earth without right and said, \\\"Who is greater than us in strength?\\\" Did they not consider that Allah who created them was greater than them in strength? But they were rejecting Our signs.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 41\n        },\n        \"text\" : \"And We saved those who believed and used to fear Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 41\n        },\n        \"text\" : \"And [mention, O Muhammad], the Day when the enemies of Allah will be gathered to the Fire while they are [driven] assembled in rows,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 41\n        },\n        \"text\" : \"And they will say to their skins, \\\"Why have you testified against us?\\\" They will say, \\\"We were made to speak by Allah, who has made everything speak; and He created you the first time, and to Him you are returned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 41\n        },\n        \"text\" : \"And you were not covering yourselves, lest your hearing testify against you or your sight or your skins, but you assumed that Allah does not know much of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 41\n        },\n        \"text\" : \"So [even] if they are patient, the Fire is a residence for them; and if they ask to appease [ Allah ], they will not be of those who are allowed to appease.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 41\n        },\n        \"text\" : \"And We appointed for them companions who made attractive to them what was before them and what was behind them [of sin], and the word has come into effect upon them among nations which had passed on before them of jinn and men. Indeed, they [all] were losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 41\n        },\n        \"text\" : \"That is the recompense of the enemies of Allah -  the Fire. For them therein is the home of eternity as recompense for what they, of Our verses, were rejecting.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 41\n        },\n        \"text\" : \"Indeed, those who have said, \\\"Our Lord is Allah \\\" and then remained on a right course - the angels will descend upon them, [saying], \\\"Do not fear and do not grieve but receive good tidings of Paradise, which you were promised.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 41\n        },\n        \"text\" : \"We [angels] were your allies in worldly life and [are so] in the Hereafter. And you will have therein whatever your souls desire, and you will have therein whatever you request [or wish]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 41\n        },\n        \"text\" : \"And who is better in speech than one who invites to Allah and does righteousness and says, \\\"Indeed, I am of the Muslims.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 41\n        },\n        \"text\" : \"And if there comes to you from Satan an evil suggestion, then seek refuge in Allah . Indeed, He is the Hearing, the Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 41\n        },\n        \"text\" : \"And of His signs are the night and day and the sun and moon. Do not prostrate to the sun or to the moon, but prostate to Allah, who created them, if it should be Him that you worship.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 41\n        },\n        \"text\" : \"And of His signs is that you see the earth stilled, but when We send down upon it rain, it quivers and grows. Indeed, He who has given it life is the Giver of Life to the dead. Indeed, He is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 41\n        },\n        \"text\" : \"And if We had made it a non-Arabic Qur'an, they would have said, \\\"Why are its verses not explained in detail [in our language]? Is it a foreign [recitation] and an Arab [messenger]?\\\" Say, \\\"It is, for those who believe, a guidance and cure.\\\" And those who do not believe -  in their ears is deafness, and it is upon them blindness. Those are being called from a distant place.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 41\n        },\n        \"text\" : \"To Him [alone] is attributed knowledge of the Hour. And fruits emerge not from their coverings nor does a female conceive or give birth except with His knowledge. And the Day He will call to them, \\\"Where are My 'partners'?\\\" they will say, \\\"We announce to You that there is [no longer] among us any witness [to that].\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 52,\n          \"sura\" : 41\n        },\n        \"text\" : \"Say, \\\"Have you considered: if the Qur'an is from Allah and you disbelieved in it, who would be more astray than one who is in extreme dissension?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 41\n        },\n        \"text\" : \"We will show them Our signs in the horizons and within themselves until it becomes clear to them that it is the truth. But is it not sufficient concerning your Lord that He is, over all things, a Witness?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 41\n        },\n        \"text\" : \"Unquestionably, they are in doubt about the meeting with their Lord. Unquestionably He is, of all things, encompassing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 42\n        },\n        \"text\" : \"Thus has He revealed to you, [O Muhammad], and to those before you - Allah, the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 42\n        },\n        \"text\" : \"The heavens almost break from above them, and the angels exalt [ Allah ] with praise of their Lord and ask forgiveness for those on earth. Unquestionably, it is Allah who is the Forgiving, the Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 42\n        },\n        \"text\" : \"And those who take as allies other than Him - Allah is [yet] Guardian over them; and you, [O Muhammad], are not over them a manager.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 42\n        },\n        \"text\" : \"And if Allah willed, He could have made them [of] one religion, but He admits whom He wills into His mercy. And the wrongdoers have not any protector or helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 42\n        },\n        \"text\" : \"Or have they taken protectors [or allies] besides Him? But Allah -  He is the Protector, and He gives life to the dead, and He is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 42\n        },\n        \"text\" : \"And in anything over which you disagree -  its ruling is [to be referred] to Allah . [Say], \\\"That is Allah, my Lord; upon Him I have relied, and to Him I turn back.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 42\n        },\n        \"text\" : \"To Him belong the keys of the heavens and the earth. He extends provision for whom He wills and restricts [it]. Indeed He is, of all things, Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 42\n        },\n        \"text\" : \"He has ordained for you of religion what He enjoined upon Noah and that which We have revealed to you, [O Muhammad], and what We enjoined upon Abraham and Moses and Jesus -  to establish the religion and not be divided therein. Difficult for those who associate others with Allah is that to which you invite them. Allah chooses for Himself whom He wills and guides to Himself whoever turns back [to Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 42\n        },\n        \"text\" : \"So to that [religion of Allah ] invite, [O Muhammad], and remain on a right course as you are commanded and do not follow their inclinations but say, \\\"I have believed in what Allah has revealed of the Qur'an, and I have been commanded to do justice among you. Allah is our Lord and your Lord. For us are our deeds, and for you your deeds. There is no [need for] argument between us and you. Allah will bring us together, and to Him is the [final] destination.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 42\n        },\n        \"text\" : \"And those who argue concerning Allah after He has been responded to -  their argument is invalid with their Lord, and upon them is [His] wrath, and for them is a severe punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 42\n        },\n        \"text\" : \"It is Allah who has sent down the Book in truth and [also] the balance. And what will make you perceive? Perhaps the Hour is near.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 42\n        },\n        \"text\" : \"Allah is Subtle with His servants; He gives provisions to whom He wills. And He is the Powerful, the Exalted in Might.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 42\n        },\n        \"text\" : \"Or have they other deities who have ordained for them a religion to which Allah has not consented? But if not for the decisive word, it would have been concluded between them. And indeed, the wrongdoers will have a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 42\n        },\n        \"text\" : \"You will see the wrongdoers fearful of what they have earned, and it will [certainly] befall them. And those who have believed and done righteous deeds will be in lush regions of the gardens [in Paradise] having whatever they will in the presence of their Lord. That is what is the great bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 42\n        },\n        \"text\" : \"It is that of which Allah gives good tidings to His servants who believe and do righteous deeds. Say, [O Muhammad], \\\"I do not ask you for this message any payment [but] only good will through kinship.\\\" And whoever commits a good deed -  We will increase for him good therein. Indeed, Allah is Forgiving and Appreciative.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 42\n        },\n        \"text\" : \"Or do they say, \\\"He has invented about Allah a lie\\\"? But if Allah willed, He could seal over your heart. And Allah eliminates falsehood and establishes the truth by His words. Indeed, He is Knowing of that within the breasts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 42\n        },\n        \"text\" : \"And if Allah had extended [excessively] provision for His servants, they would have committed tyranny throughout the earth. But He sends [it] down in an amount which He wills. Indeed He is, of His servants, Acquainted and Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 42\n        },\n        \"text\" : \"And you will not cause failure [to Allah ] upon the earth. And you have not besides Allah any protector or helper.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 42\n        },\n        \"text\" : \"So whatever thing you have been given -  it is but [for] enjoyment of the worldly life. But what is with Allah is better and more lasting for those who have believed and upon their Lord rely\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 42\n        },\n        \"text\" : \"And the retribution for an evil act is an evil one like it, but whoever pardons and makes reconciliation -  his reward is [due] from Allah . Indeed, He does not like wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 42\n        },\n        \"text\" : \"And he whom Allah sends astray -  for him there is no protector beyond Him. And you will see the wrongdoers, when they see the punishment, saying, \\\"Is there for return [to the former world] any way?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 42\n        },\n        \"text\" : \"And there will not be for them any allies to aid them other than Allah . And whoever Allah sends astray -  for him there is no way.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 47,\n          \"sura\" : 42\n        },\n        \"text\" : \"Respond to your Lord before a Day comes from Allah of which there is no repelling. No refuge will you have that day, nor for you will there be any denial.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 42\n        },\n        \"text\" : \"To Allah belongs the dominion of the heavens and the earth; He creates what he wills. He gives to whom He wills female [children], and He gives to whom He wills males.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 42\n        },\n        \"text\" : \"And it is not for any human being that Allah should speak to him except by revelation or from behind a partition or that He sends a messenger to reveal, by His permission, what He wills. Indeed, He is Most High and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 42\n        },\n        \"text\" : \"The path of Allah, to whom belongs whatever is in the heavens and whatever is on the earth. Unquestionably, to Allah do [all] matters evolve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 43\n        },\n        \"text\" : \"And who created the species, all of them, and has made for you of ships and animals those which you mount.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 43\n        },\n        \"text\" : \"So is one brought up in ornaments while being during conflict unevident [attributed to Allah ]?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 43\n        },\n        \"text\" : \"And gold ornament. But all that is not but the enjoyment of worldly life. And the Hereafter with your Lord is for the righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 43\n        },\n        \"text\" : \"And never will it benefit you that Day, when you have wronged, that you are [all] sharing in the punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 43\n        },\n        \"text\" : \"And indeed, it is a remembrance for you and your people, and you [all] are going to be questioned.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 43\n        },\n        \"text\" : \"And Pharaoh called out among his people; he said, \\\"O my people, does not the kingdom of Egypt belong to me, and these rivers flowing beneath me; then do you not see?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 54,\n          \"sura\" : 43\n        },\n        \"text\" : \"So he bluffed his people, and they obeyed him. Indeed, they were [themselves] a people defiantly disobedient [of Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 43\n        },\n        \"text\" : \"And when they angered Us, We took retribution from them and drowned them all.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 63,\n          \"sura\" : 43\n        },\n        \"text\" : \"And when Jesus brought clear proofs, he said, \\\"I have come to you with wisdom and to make clear to you some of that over which you differ, so fear Allah and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 64,\n          \"sura\" : 43\n        },\n        \"text\" : \"Indeed, Allah is my Lord and your Lord, so worship Him. This is a straight path.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 68,\n          \"sura\" : 43\n        },\n        \"text\" : \"[To whom Allah will say], \\\"O My servants, no fear will there be concerning you this Day, nor will you grieve,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 71,\n          \"sura\" : 43\n        },\n        \"text\" : \"Circulated among them will be plates and vessels of gold. And therein is whatever the souls desire and [what] delights the eyes, and you will abide therein eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 74,\n          \"sura\" : 43\n        },\n        \"text\" : \"Indeed, the criminals will be in the punishment of Hell, abiding eternally.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 75,\n          \"sura\" : 43\n        },\n        \"text\" : \"It will not be allowed to subside for them, and they, therein, are in despair.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 77,\n          \"sura\" : 43\n        },\n        \"text\" : \"And they will call, \\\"O Malik, let your Lord put an end to us!\\\" He will say, \\\"Indeed, you will remain.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 84,\n          \"sura\" : 43\n        },\n        \"text\" : \"And it is Allah who is [the only] deity in the heaven, and on the earth [the only] deity. And He is the Wise, the Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 87,\n          \"sura\" : 43\n        },\n        \"text\" : \"And if you asked them who created them, they would surely say, \\\" Allah .\\\" So how are they deluded?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 43\n        },\n        \"text\" : \"And [ Allah acknowledges] his saying, \\\"O my Lord, indeed these are a people who do not believe.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 44\n        },\n        \"text\" : \"[Saying], \\\"Render to me the servants of Allah . Indeed, I am to you a trustworthy messenger,\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 44\n        },\n        \"text\" : \"And [saying], \\\"Be not haughty with Allah . Indeed, I have come to you with clear authority.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 44\n        },\n        \"text\" : \"And [finally] he called to his Lord that these were a criminal people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 44\n        },\n        \"text\" : \"[ Allah said], \\\"Then set out with My servants by night. Indeed, you are to be pursued.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 44\n        },\n        \"text\" : \"And We certainly chose them by knowledge over [all] the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 44\n        },\n        \"text\" : \"Indeed, the Day of Judgement is the appointed time for them all -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 44\n        },\n        \"text\" : \"The Day when no relation will avail a relation at all, nor will they be helped -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 44\n        },\n        \"text\" : \"Except those [believers] on whom Allah has mercy. Indeed, He is the Exalted in Might, the Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 55,\n          \"sura\" : 44\n        },\n        \"text\" : \"They will call therein for every [kind of] fruit -  safe and secure.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 45\n        },\n        \"text\" : \"The revelation of the Book is from Allah, the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 45\n        },\n        \"text\" : \"And [in] the alternation of night and day and [in] what Allah sends down from the sky of provision and gives life thereby to the earth after its lifelessness and [in His] directing of the winds are signs for a people who reason.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 45\n        },\n        \"text\" : \"These are the verses of Allah which We recite to you in truth. Then in what statement after Allah and His verses will they believe?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 45\n        },\n        \"text\" : \"Who hears the verses of Allah recited to him, then persists arrogantly as if he had not heard them. So give him tidings of a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 45\n        },\n        \"text\" : \"Before them is Hell, and what they had earned will not avail them at all nor what they had taken besides Allah as allies. And they will have a great punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 45\n        },\n        \"text\" : \"It is Allah who subjected to you the sea so that ships may sail upon it by His command and that you may seek of His bounty; and perhaps you will be grateful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 45\n        },\n        \"text\" : \"And He has subjected to you whatever is in the heavens and whatever is on the earth - all from Him. Indeed in that are signs for a people who give thought.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 45\n        },\n        \"text\" : \"Say, [O Muhammad], to those who have believed that they [should] forgive those who expect not the days of Allah so that He may recompense a people for what they used to earn.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 45\n        },\n        \"text\" : \"Indeed, they will never avail you against Allah at all. And indeed, the wrongdoers are allies of one another; but Allah is the protector of the righteous.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 45\n        },\n        \"text\" : \"And Allah created the heavens and earth in truth and so that every soul may be recompensed for what it has earned, and they will not be wronged.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 45\n        },\n        \"text\" : \"Have you seen he who has taken as his god his [own] desire, and Allah has sent him astray due to knowledge and has set a seal upon his hearing and his heart and put over his vision a veil? So who will guide him after Allah ? Then will you not be reminded?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 45\n        },\n        \"text\" : \"Say, \\\" Allah causes you to live, then causes you to die; then He will assemble you for the Day of Resurrection, about which there is no doubt, but most of the people do not know.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 45\n        },\n        \"text\" : \"And to Allah belongs the dominion of the heavens and the earth. And the Day the Hour appears -  that Day the falsifiers will lose.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 45\n        },\n        \"text\" : \"And you will see every nation kneeling [from fear]. Every nation will be called to its record [and told], \\\"Today you will be recompensed for what you used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 45\n        },\n        \"text\" : \"And when it was said, 'Indeed, the promise of Allah is truth and the Hour [is coming] - no doubt about it,' you said, 'We know not what is the Hour. We assume only assumption, and we are not convinced.' \\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 45\n        },\n        \"text\" : \"That is because you took the verses of Allah in ridicule, and worldly life deluded you.\\\" So that Day they will not be removed from it, nor will they be asked to appease [ Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 45\n        },\n        \"text\" : \"Then, to Allah belongs [all] praise -  Lord of the heavens and Lord of the earth, Lord of the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 37,\n          \"sura\" : 45\n        },\n        \"text\" : \"And to Him belongs [all] grandeur within the heavens and the earth, and He is the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 46\n        },\n        \"text\" : \"The revelation of the Book is from Allah, the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 46\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"Have you considered that which you invoke besides Allah ? Show me what they have created of the earth; or did they have partnership in [creation of] the heavens? Bring me a scripture [revealed] before this or a [remaining] trace of knowledge, if you should be truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 46\n        },\n        \"text\" : \"And who is more astray than he who invokes besides Allah those who will not respond to him until the Day of Resurrection, and they, of their invocation, are unaware.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 46\n        },\n        \"text\" : \"Or do they say, \\\"He has invented it?\\\" Say, \\\"If I have invented it, you will not possess for me [the power of protection] from Allah at all. He is most knowing of that in which you are involved. Sufficient is He as Witness between me and you, and He is the Forgiving the Merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 46\n        },\n        \"text\" : \"Say, \\\"Have you considered: if the Qur'an was from Allah, and you disbelieved in it while a witness from the Children of Israel has testified to something similar and believed while you were arrogant... ?\\\" Indeed, Allah does not guide the wrongdoing people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 46\n        },\n        \"text\" : \"Indeed, those who have said, \\\"Our Lord is Allah,\\\" and then remained on a right course - there will be no fear concerning them, nor will they grieve.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 46\n        },\n        \"text\" : \"Those are the companions of Paradise, abiding eternally therein as reward for what they used to do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 46\n        },\n        \"text\" : \"But one who says to his parents, \\\"Uff to you; do you promise me that I will be brought forth [from the earth] when generations before me have already passed on [into oblivion]?\\\" while they call to Allah for help [and to their son], \\\"Woe to you! Believe! Indeed, the promise of Allah is truth.\\\" But he says, \\\"This is not but legends of the former people\\\" -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 46\n        },\n        \"text\" : \"Those are the ones upon whom the word has come into effect, [who will be] among nations which had passed on before them of jinn and men. Indeed, they [all] were losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 46\n        },\n        \"text\" : \"And for all there are degrees [of reward and punishment] for what they have done, and [it is] so that He may fully compensate them for their deeds, and they will not be wronged.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 46\n        },\n        \"text\" : \"And mention, [O Muhammad], the brother of 'Aad, when he warned his people in the [region of] al-Ahqaf -  and warners had already passed on before him and after him - [saying], \\\"Do not worship except Allah . Indeed, I fear for you the punishment of a terrible day.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 46\n        },\n        \"text\" : \"He said, \\\"Knowledge [of its time] is only with Allah, and I convey to you that with which I was sent; but I see you [to be] a people behaving ignorantly.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 46\n        },\n        \"text\" : \"And when they saw it as a cloud approaching their valleys, they said, \\\"This is a cloud bringing us rain!\\\" Rather, it is that for which you were impatient: a wind, within it a painful punishment,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 46\n        },\n        \"text\" : \"And We had certainly established them in such as We have not established you, and We made for them hearing and vision and hearts. But their hearing and vision and hearts availed them not from anything [of the punishment] when they were [continually] rejecting the signs of Allah ; and they were enveloped by what they used to ridicule.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 46\n        },\n        \"text\" : \"Then why did those they took besides Allah as deities by which to approach [Him] not aid them? But they had strayed from them. And that was their falsehood and what they were inventing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 46\n        },\n        \"text\" : \"O our people, respond to the Messenger of Allah and believe in him; Allah will forgive for you your sins and protect you from a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 46\n        },\n        \"text\" : \"But he who does not respond to the Caller of Allah will not cause failure [to Him] upon earth, and he will not have besides Him any protectors. Those are in manifest error.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 46\n        },\n        \"text\" : \"Do they not see that Allah, who created the heavens and earth and did not fail in their creation, is able to give life to the dead? Yes. Indeed, He is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 47\n        },\n        \"text\" : \"Those who disbelieve and avert [people] from the way of Allah -  He will waste their deeds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 47\n        },\n        \"text\" : \"That is because those who disbelieve follow falsehood, and those who believe follow the truth from their Lord. Thus does Allah present to the people their comparisons.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 47\n        },\n        \"text\" : \"So when you meet those who disbelieve [in battle], strike [their] necks until, when you have inflicted slaughter upon them, then secure their bonds, and either [confer] favor afterwards or ransom [them] until the war lays down its burdens. That [is the command]. And if Allah had willed, He could have taken vengeance upon them [Himself], but [He ordered armed struggle] to test some of you by means of others. And those who are killed in the cause of Allah -  never will He waste their deeds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 47\n        },\n        \"text\" : \"O you who have believed, if you support Allah, He will support you and plant firmly your feet.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 47\n        },\n        \"text\" : \"That is because they disliked what Allah revealed, so He rendered worthless their deeds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 47\n        },\n        \"text\" : \"Have they not traveled through the land and seen how was the end of those before them? Allah destroyed [everything] over them, and for the disbelievers is something comparable.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 47\n        },\n        \"text\" : \"That is because Allah is the protector of those who have believed and because the disbelievers have no protector.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 47\n        },\n        \"text\" : \"Indeed, Allah will admit those who have believed and done righteous deeds to gardens beneath which rivers flow, but those who disbelieve enjoy themselves and eat as grazing livestock eat, and the Fire will be a residence for them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 47\n        },\n        \"text\" : \"Is the description of Paradise, which the righteous are promised, wherein are rivers of water unaltered, rivers of milk the taste of which never changes, rivers of wine delicious to those who drink, and rivers of purified honey, in which they will have from all [kinds of] fruits and forgiveness from their Lord, like [that of] those who abide eternally in the Fire and are given to drink scalding water that will sever their intestines?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 47\n        },\n        \"text\" : \"And among them, [O Muhammad], are those who listen to you, until when they depart from you, they say to those who were given knowledge, \\\"What has he said just now?\\\" Those are the ones of whom Allah has sealed over their hearts and who have followed their [own] desires.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 47\n        },\n        \"text\" : \"So know, [O Muhammad], that there is no deity except Allah and ask forgiveness for your sin and for the believing men and believing women. And Allah knows of your movement and your resting place.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 47\n        },\n        \"text\" : \"Obedience and good words. And when the matter [of fighting] was determined, if they had been true to Allah, it would have been better for them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 47\n        },\n        \"text\" : \"Those [who do so] are the ones that Allah has cursed, so He deafened them and blinded their vision.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 47\n        },\n        \"text\" : \"That is because they said to those who disliked what Allah sent down, \\\"We will obey you in part of the matter.\\\" And Allah knows what they conceal.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 47\n        },\n        \"text\" : \"That is because they followed what angered Allah and disliked [what earns] His pleasure, so He rendered worthless their deeds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 47\n        },\n        \"text\" : \"Or do those in whose hearts is disease think that Allah would never expose their [feelings of] hatred?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 47\n        },\n        \"text\" : \"And if We willed, We could show them to you, and you would know them by their mark; but you will surely know them by the tone of [their] speech. And Allah knows your deeds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 47\n        },\n        \"text\" : \"And We will surely test you until We make evident those who strive among you [for the cause of Allah ] and the patient, and We will test your affairs.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 47\n        },\n        \"text\" : \"Indeed, those who disbelieved and averted [people] from the path of Allah and opposed the Messenger after guidance had become clear to them -  never will they harm Allah at all, and He will render worthless their deeds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 47\n        },\n        \"text\" : \"O you who have believed, obey Allah and obey the Messenger and do not invalidate your deeds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 34,\n          \"sura\" : 47\n        },\n        \"text\" : \"Indeed, those who disbelieved and averted [people] from the path of Allah and then died while they were disbelievers -  never will Allah forgive them.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 35,\n          \"sura\" : 47\n        },\n        \"text\" : \"So do not weaken and call for peace while you are superior; and Allah is with you and will never deprive you of [the reward of] your deeds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 47\n        },\n        \"text\" : \"[This] worldly life is only amusement and diversion. And if you believe and fear Allah, He will give you your rewards and not ask you for your properties.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 47\n        },\n        \"text\" : \"Here you are -  those invited to spend in the cause of Allah -  but among you are those who withhold [out of greed]. And whoever withholds only withholds [benefit] from himself; and Allah is the Free of need, while you are the needy. And if you turn away, He will replace you with another people; then they will not be the likes of you.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 48\n        },\n        \"text\" : \"That Allah may forgive for you what preceded of your sin and what will follow and complete His favor upon you and guide you to a straight path\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 48\n        },\n        \"text\" : \"And [that] Allah may aid you with a mighty victory.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 48\n        },\n        \"text\" : \"It is He who sent down tranquillity into the hearts of the believers that they would increase in faith along with their [present] faith. And to Allah belong the soldiers of the heavens and the earth, and ever is Allah Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 48\n        },\n        \"text\" : \"[And] that He may admit the believing men and the believing women to gardens beneath which rivers flow to abide therein eternally and remove from them their misdeeds -  and ever is that, in the sight of Allah, a great attainment -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 48\n        },\n        \"text\" : \"And [that] He may punish the hypocrite men and hypocrite women, and the polytheist men and polytheist women -  those who assume about Allah an assumption of evil nature. Upon them is a misfortune of evil nature; and Allah has become angry with them and has cursed them and prepared for them Hell, and evil it is as a destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 48\n        },\n        \"text\" : \"And to Allah belong the soldiers of the heavens and the earth. And ever is Allah Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 48\n        },\n        \"text\" : \"That you [people] may believe in Allah and His Messenger and honor him and respect the Prophet and exalt Allah morning and afternoon.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 48\n        },\n        \"text\" : \"Indeed, those who pledge allegiance to you, [O Muhammad] -  they are actually pledging allegiance to Allah . The hand of Allah is over their hands. So he who breaks his word only breaks it to the detriment of himself. And he who fulfills that which he has promised Allah -  He will give him a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 48\n        },\n        \"text\" : \"Those who remained behind of the bedouins will say to you, \\\"Our properties and our families occupied us, so ask forgiveness for us.\\\" They say with their tongues what is not within their hearts. Say, \\\"Then who could prevent Allah at all if He intended for you harm or intended for you benefit? Rather, ever is Allah, with what you do, Acquainted.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 48\n        },\n        \"text\" : \"And whoever has not believed in Allah and His Messenger -  then indeed, We have prepared for the disbelievers a Blaze.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 48\n        },\n        \"text\" : \"And to Allah belongs the dominion of the heavens and the earth. He forgives whom He wills and punishes whom He wills. And ever is Allah Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 48\n        },\n        \"text\" : \"Those who remained behind will say when you set out toward the war booty to take it, \\\"Let us follow you.\\\" They wish to change the words of Allah . Say, \\\"Never will you follow us. Thus did Allah say before.\\\" So they will say, \\\"Rather, you envy us.\\\" But [in fact] they were not understanding except a little.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 48\n        },\n        \"text\" : \"Say to those who remained behind of the bedouins, \\\"You will be called to [face] a people of great military might; you may fight them, or they will submit. So if you obey, Allah will give you a good reward; but if you turn away as you turned away before, He will punish you with a painful punishment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 48\n        },\n        \"text\" : \"There is not upon the blind any guilt or upon the lame any guilt or upon the ill any guilt [for remaining behind]. And whoever obeys Allah and His Messenger -  He will admit him to gardens beneath which rivers flow; but whoever turns away -  He will punish him with a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 48\n        },\n        \"text\" : \"Certainly was Allah pleased with the believers when they pledged allegiance to you, [O Muhammad], under the tree, and He knew what was in their hearts, so He sent down tranquillity upon them and rewarded them with an imminent conquest\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 48\n        },\n        \"text\" : \"And much war booty which they will take. And ever is Allah Exalted in Might and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 48\n        },\n        \"text\" : \"Allah has promised you much booty that you will take [in the future] and has hastened for you this [victory] and withheld the hands of people from you -  that it may be a sign for the believers and [that] He may guide you to a straight path.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 48\n        },\n        \"text\" : \"And [He promises] other [victories] that you were [so far] unable to [realize] which Allah has already encompassed. And ever is Allah, over all things, competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 48\n        },\n        \"text\" : \"[This is] the established way of Allah which has occurred before. And never will you find in the way of Allah any change.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 48\n        },\n        \"text\" : \"And it is He who withheld their hands from you and your hands from them within [the area of] Makkah after He caused you to overcome them. And ever is Allah of what you do, Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 48\n        },\n        \"text\" : \"They are the ones who disbelieved and obstructed you from al-Masjid al-Haram while the offering was prevented from reaching its place of sacrifice. And if not for believing men and believing women whom you did not know -  that you might trample them and there would befall you because of them dishonor without [your] knowledge -  [you would have been permitted to enter Makkah]. [This was so] that Allah might admit to His mercy whom He willed. If they had been apart [from them], We would have punished those who disbelieved among them with painful punishment\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 48\n        },\n        \"text\" : \"When those who disbelieved had put into their hearts chauvinism -  the chauvinism of the time of ignorance. But Allah sent down His tranquillity upon His Messenger and upon the believers and imposed upon them the word of righteousness, and they were more deserving of it and worthy of it. And ever is Allah, of all things, Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 48\n        },\n        \"text\" : \"Certainly has Allah showed to His Messenger the vision in truth. You will surely enter al-Masjid al-Haram, if Allah wills, in safety, with your heads shaved and [hair] shortened, not fearing [anyone]. He knew what you did not know and has arranged before that a conquest near [at hand].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 48\n        },\n        \"text\" : \"It is He who sent His Messenger with guidance and the religion of truth to manifest it over all religion. And sufficient is Allah as Witness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 48\n        },\n        \"text\" : \"Muhammad is the Messenger of Allah ; and those with him are forceful against the disbelievers, merciful among themselves. You see them bowing and prostrating [in prayer], seeking bounty from Allah and [His] pleasure. Their mark is on their faces from the trace of prostration. That is their description in the Torah. And their description in the Gospel is as a plant which produces its offshoots and strengthens them so they grow firm and stand upon their stalks, delighting the sowers -  so that Allah may enrage by them the disbelievers. Allah has promised those who believe and do righteous deeds among them forgiveness and a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 49\n        },\n        \"text\" : \"O you who have believed, do not put [yourselves] before Allah and His Messenger but fear Allah . Indeed, Allah is Hearing and Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 49\n        },\n        \"text\" : \"Indeed, those who lower their voices before the Messenger of Allah -  they are the ones whose hearts Allah has tested for righteousness. For them is forgiveness and great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 49\n        },\n        \"text\" : \"Indeed, those who call you, [O Muhammad], from behind the chambers -  most of them do not use reason.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 49\n        },\n        \"text\" : \"And if they had been patient until you [could] come out to them, it would have been better for them. But Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 49\n        },\n        \"text\" : \"And know that among you is the Messenger of Allah . If he were to obey you in much of the matter, you would be in difficulty, but Allah has endeared to you the faith and has made it pleasing in your hearts and has made hateful to you disbelief, defiance and disobedience. Those are the [rightly] guided.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 49\n        },\n        \"text\" : \"[It is] as bounty from Allah and favor. And Allah is Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 49\n        },\n        \"text\" : \"And if two factions among the believers should fight, then make settlement between the two. But if one of them oppresses the other, then fight against the one that oppresses until it returns to the ordinance of Allah . And if it returns, then make settlement between them in justice and act justly. Indeed, Allah loves those who act justly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 49\n        },\n        \"text\" : \"The believers are but brothers, so make settlement between your brothers. And fear Allah that you may receive mercy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 49\n        },\n        \"text\" : \"O you who have believed, let not a people ridicule [another] people; perhaps they may be better than them; nor let women ridicule [other] women; perhaps they may be better than them. And do not insult one another and do not call each other by [offensive] nicknames. Wretched is the name of disobedience after [one's] faith. And whoever does not repent -  then it is those who are the wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 49\n        },\n        \"text\" : \"O you who have believed, avoid much [negative] assumption. Indeed, some assumption is sin. And do not spy or backbite each other. Would one of you like to eat the flesh of his brother when dead? You would detest it. And fear Allah ; indeed, Allah is Accepting of repentance and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 49\n        },\n        \"text\" : \"O mankind, indeed We have created you from male and female and made you peoples and tribes that you may know one another. Indeed, the most noble of you in the sight of Allah is the most righteous of you. Indeed, Allah is Knowing and Acquainted.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 49\n        },\n        \"text\" : \"The bedouins say, \\\"We have believed.\\\" Say, \\\"You have not [yet] believed; but say [instead], 'We have submitted,' for faith has not yet entered your hearts. And if you obey Allah and His Messenger, He will not deprive you from your deeds of anything. Indeed, Allah is Forgiving and Merciful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 49\n        },\n        \"text\" : \"The believers are only the ones who have believed in Allah and His Messenger and then doubt not but strive with their properties and their lives in the cause of Allah . It is those who are the truthful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 49\n        },\n        \"text\" : \"Say, \\\"Would you acquaint Allah with your religion while Allah knows whatever is in the heavens and whatever is on the earth, and Allah is Knowing of all things?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 49\n        },\n        \"text\" : \"They consider it a favor to you that they have accepted Islam. Say, \\\"Do not consider your Islam a favor to me. Rather, Allah has conferred favor upon you that He has guided you to the faith, if you should be truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 49\n        },\n        \"text\" : \"Indeed, Allah knows the unseen [aspects] of the heavens and the earth. And Allah is Seeing of what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 50\n        },\n        \"text\" : \"Giving insight and a reminder for every servant who turns [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 50\n        },\n        \"text\" : \"And the companions of the thicket and the people of Tubba'. All denied the messengers, so My threat was justly fulfilled.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 50\n        },\n        \"text\" : \"[ Allah will say], \\\"Throw into Hell every obstinate disbeliever,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 50\n        },\n        \"text\" : \"Who made [as equal] with Allah another deity; then throw him into the severe punishment.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 50\n        },\n        \"text\" : \"[ Allah ] will say, \\\"Do not dispute before Me, while I had already presented to you the warning.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 32,\n          \"sura\" : 50\n        },\n        \"text\" : \"[It will be said], \\\"This is what you were promised -  for every returner [to Allah ] and keeper [of His covenant]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 39,\n          \"sura\" : 50\n        },\n        \"text\" : \"So be patient, [O Muhammad], over what they say and exalt [ Allah ] with praise of your Lord before the rising of the sun and before its setting,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 41,\n          \"sura\" : 50\n        },\n        \"text\" : \"And listen on the Day when the Caller will call out from a place that is near -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 51\n        },\n        \"text\" : \"And of all things We created two mates; perhaps you will remember.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 50,\n          \"sura\" : 51\n        },\n        \"text\" : \"So flee to Allah . Indeed, I am to you from Him a clear warner.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 51,\n          \"sura\" : 51\n        },\n        \"text\" : \"And do not make [as equal] with Allah another deity. Indeed, I am to you from Him a clear warner.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 51\n        },\n        \"text\" : \"Indeed, it is Allah who is the [continual] Provider, the firm possessor of strength.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 52\n        },\n        \"text\" : \"[Enter to] burn therein; then be patient or impatient -  it is all the same for you.  You are only being recompensed [for] what you used to do.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 52\n        },\n        \"text\" : \"There will circulate among them [servant] boys [especially] for them, as if they were pearls well-protected.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 52\n        },\n        \"text\" : \"They will say, \\\"Indeed, we were previously among our people fearful [of displeasing Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 52\n        },\n        \"text\" : \"So Allah conferred favor upon us and protected us from the punishment of the Scorching Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 43,\n          \"sura\" : 52\n        },\n        \"text\" : \"Or have they a deity other than Allah ? Exalted is Allah above whatever they associate with Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 44,\n          \"sura\" : 52\n        },\n        \"text\" : \"And if they were to see a fragment from the sky falling, they would say, \\\"[It is merely] clouds heaped up.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 46,\n          \"sura\" : 52\n        },\n        \"text\" : \"The Day their plan will not avail them at all, nor will they be helped.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 52\n        },\n        \"text\" : \"And be patient, [O Muhammad], for the decision of your Lord, for indeed, you are in Our eyes. And exalt [ Allah ] with praise of your Lord when you arise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 53\n        },\n        \"text\" : \"They are not but [mere] names you have named them -  you and your forefathers -  for which Allah has sent down no authority. They follow not except assumption and what [their] souls desire, and there has already come to them from their Lord guidance.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 53\n        },\n        \"text\" : \"Rather, to Allah belongs the Hereafter and the first [life].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 53\n        },\n        \"text\" : \"And how many angels there are in the heavens whose intercession will not avail at all except [only] after Allah has permitted [it] to whom He wills and approves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 53\n        },\n        \"text\" : \"And they have thereof no knowledge. They follow not except assumption, and indeed, assumption avails not against the truth at all.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 53\n        },\n        \"text\" : \"And to Allah belongs whatever is in the heavens and whatever is in the earth -  that He may recompense those who do evil with [the penalty of] what they have done and recompense those who do good with the best [reward] -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 58,\n          \"sura\" : 53\n        },\n        \"text\" : \"Of it, [from those] besides Allah, there is no remover.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 62,\n          \"sura\" : 53\n        },\n        \"text\" : \"So prostrate to Allah and worship [Him].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 54\n        },\n        \"text\" : \"So leave them, [O Muhammad]. The Day the Caller calls to something forbidding,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 54\n        },\n        \"text\" : \"Racing ahead toward the Caller. The disbelievers will say, \\\"This is a difficult Day.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 54\n        },\n        \"text\" : \"But they called their companion, and he dared and hamstrung [her].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 42,\n          \"sura\" : 54\n        },\n        \"text\" : \"They denied Our signs, all of them, so We seized them with a seizure of one Exalted in Might and Perfect in Ability.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 49,\n          \"sura\" : 54\n        },\n        \"text\" : \"Indeed, all things We created with predestination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 53,\n          \"sura\" : 54\n        },\n        \"text\" : \"And every small and great [thing] is inscribed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 55\n        },\n        \"text\" : \"O company of jinn and mankind, if you are able to pass beyond the regions of the heavens and the earth, then pass. You will not pass except by authority [from Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 56\n        },\n        \"text\" : \"Those are the ones brought near [to Allah ]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 88,\n          \"sura\" : 56\n        },\n        \"text\" : \"And if the deceased was of those brought near to Allah,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 57\n        },\n        \"text\" : \"Whatever is in the heavens and earth exalts Allah, and He is the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 57\n        },\n        \"text\" : \"His is the dominion of the heavens and earth. He gives life and causes death, and He is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 57\n        },\n        \"text\" : \"He is the First and the Last, the Ascendant and the Intimate, and He is, of all things, Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 57\n        },\n        \"text\" : \"It is He who created the heavens and earth in six days and then established Himself above the Throne.  He knows what penetrates into the earth and what emerges from it and what descends from the heaven and what ascends therein; and He is with you wherever you are. And Allah, of what you do, is Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 57\n        },\n        \"text\" : \"His is the dominion of the heavens and earth. And to Allah are returned [all] matters.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 57\n        },\n        \"text\" : \"Believe in Allah and His Messenger and spend out of that in which He has made you successors. For those who have believed among you and spent, there will be a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 57\n        },\n        \"text\" : \"And why do you not believe in Allah while the Messenger invites you to believe in your Lord and He has taken your covenant, if you should [truly] be believers?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 57\n        },\n        \"text\" : \"It is He who sends down upon His Servant [Muhammad] verses of clear evidence that He may bring you out from darknesses into the light. And indeed, Allah is to you Kind and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 57\n        },\n        \"text\" : \"And why do you not spend in the cause of Allah while to Allah belongs the heritage of the heavens and the earth? Not equal among you are those who spent before the conquest [of Makkah] and fought [and those who did so after it]. Those are greater in degree than they who spent afterwards and fought. But to all Allah has promised the best [reward]. And Allah, with what you do, is Acquainted.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 57\n        },\n        \"text\" : \"Who is it that would loan Allah a goodly loan so He will multiply it for him and he will have a noble reward?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 57\n        },\n        \"text\" : \"On the Day you see the believing men and believing women, their light proceeding before them and on their right, [it will be said], \\\"Your good tidings today are [of] gardens beneath which rivers flow, wherein you will abide eternally.\\\" That is what is the great attainment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 57\n        },\n        \"text\" : \"On the [same] Day the hypocrite men and hypocrite women will say to those who believed, \\\"Wait for us that we may acquire some of your light.\\\" It will be said, \\\"Go back behind you and seek light.\\\" And a wall will be placed between them with a door, its interior containing mercy, but on the outside of it is torment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 57\n        },\n        \"text\" : \"The hypocrites will call to the believers, \\\"Were we not with you?\\\" They will say, \\\"Yes, but you afflicted yourselves and awaited [misfortune for us] and doubted, and wishful thinking deluded you until there came the command of Allah . And the Deceiver deceived you concerning Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 57\n        },\n        \"text\" : \"Has the time not come for those who have believed that their hearts should become humbly submissive at the remembrance of Allah and what has come down of the truth? And let them not be like those who were given the Scripture before, and a long period passed over them, so their hearts hardened; and many of them are defiantly disobedient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 57\n        },\n        \"text\" : \"Know that Allah gives life to the earth after its lifelessness. We have made clear to you the signs; perhaps you will understand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 57\n        },\n        \"text\" : \"Indeed, the men who practice charity and the women who practice charity and [they who] have loaned Allah a goodly loan -  it will be multiplied for them, and they will have a noble reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 57\n        },\n        \"text\" : \"And those who have believed in Allah and His messengers -  those are [in the ranks of] the supporters of truth and the martyrs, with their Lord. For them is their reward and their light. But those who have disbelieved and denied Our verses -  those are the companions of Hellfire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 57\n        },\n        \"text\" : \"Know that the life of this world is but amusement and diversion and adornment and boasting to one another and competition in increase of wealth and children -  like the example of a rain whose [resulting] plant growth pleases the tillers; then it dries and you see it turned yellow; then it becomes [scattered] debris. And in the Hereafter is severe punishment and forgiveness from Allah and approval. And what is the worldly life except the enjoyment of delusion.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 57\n        },\n        \"text\" : \"Race toward forgiveness from your Lord and a Garden whose width is like the width of the heavens and earth, prepared for those who believed in Allah and His messengers. That is the bounty of Allah which He gives to whom He wills, and Allah is the possessor of great bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 57\n        },\n        \"text\" : \"No disaster strikes upon the earth or among yourselves except that it is in a register before We bring it into being -  indeed that, for Allah, is easy -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 57\n        },\n        \"text\" : \"In order that you not despair over what has eluded you and not exult [in pride] over what He has given you. And Allah does not like everyone self-deluded and boastful -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 57\n        },\n        \"text\" : \"[Those] who are stingy and enjoin upon people stinginess. And whoever turns away - then indeed, Allah is the Free of need, the Praiseworthy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 57\n        },\n        \"text\" : \"We have already sent Our messengers with clear evidences and sent down with them the Scripture and the balance that the people may maintain [their affairs] in justice. And We sent down iron, wherein is great military might and benefits for the people, and so that Allah may make evident those who support Him and His messengers unseen. Indeed, Allah is Powerful and Exalted in Might.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 57\n        },\n        \"text\" : \"Then We sent following their footsteps Our messengers and followed [them] with Jesus, the son of Mary, and gave him the Gospel. And We placed in the hearts of those who followed him compassion and mercy and monasticism, which they innovated; We did not prescribe it for them except [that they did so] seeking the approval of Allah . But they did not observe it with due observance. So We gave the ones who believed among them their reward, but many of them are defiantly disobedient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 57\n        },\n        \"text\" : \"O you who have believed, fear Allah and believe in His Messenger; He will [then] give you a double portion of His mercy and make for you a light by which you will walk and forgive you; and Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 57\n        },\n        \"text\" : \"[This is] so that the People of the Scripture may know that they are not able [to obtain] anything from the bounty of Allah and that [all] bounty is in the hand of Allah ; He gives it to whom He wills. And Allah is the possessor of great bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 58\n        },\n        \"text\" : \"Certainly has Allah heard the speech of the one who argues with you, [O Muhammad], concerning her husband and directs her complaint to Allah . And Allah hears your dialogue; indeed, Allah is Hearing and Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 58\n        },\n        \"text\" : \"Those who pronounce thihar among you [to separate] from their wives -  they are not [consequently] their mothers. Their mothers are none but those who gave birth to them. And indeed, they are saying an objectionable statement and a falsehood. But indeed, Allah is Pardoning and Forgiving.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 58\n        },\n        \"text\" : \"And those who pronounce thihar from their wives and then [wish to] go back on what they said -  then [there must be] the freeing of a slave before they touch one another. That is what you are admonished thereby; and Allah is Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 58\n        },\n        \"text\" : \"And he who does not find [a slave] -  then a fast for two months consecutively before they touch one another; and he who is unable -  then the feeding of sixty poor persons. That is for you to believe [completely] in Allah and His Messenger; and those are the limits [set by] Allah . And for the disbelievers is a painful punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 58\n        },\n        \"text\" : \"Indeed, those who oppose Allah and His Messenger are abased as those before them were abased. And We have certainly sent down verses of clear evidence. And for the disbelievers is a humiliating punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 58\n        },\n        \"text\" : \"On the Day when Allah will resurrect them all and inform them of what they did. Allah had enumerated it, while they forgot it; and Allah is, over all things, Witness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 58\n        },\n        \"text\" : \"Have you not considered that Allah knows what is in the heavens and what is on the earth? There is in no private conversation three but that He is the fourth of them, nor are there five but that He is the sixth of them -  and no less than that and no more except that He is with them [in knowledge] wherever they are. Then He will inform them of what they did, on the Day of Resurrection. Indeed Allah is, of all things, Knowing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 58\n        },\n        \"text\" : \"Have you not considered those who were forbidden from private conversation, then they return to that which they were forbidden and converse among themselves about sin and aggression and disobedience to the Messenger?  And when they come to you, they greet you with that [word] by which Allah does not greet you and say among themselves, \\\"Why does Allah not punish us for what we say?\\\" Sufficient for them is Hell, which they will [enter to] burn, and wretched is the destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 58\n        },\n        \"text\" : \"O you who have believed, when you converse privately, do not converse about sin and aggression and disobedience to the Messenger but converse about righteousness and piety. And fear Allah, to whom you will be gathered.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 58\n        },\n        \"text\" : \"Private conversation is only from Satan that he may grieve those who have believed, but he will not harm them at all except by permission of Allah . And upon Allah let the believers rely.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 58\n        },\n        \"text\" : \"O you who have believed, when you are told, \\\"Space yourselves\\\" in assemblies, then make space; Allah will make space for you. And when you are told, \\\"Arise,\\\" then arise; Allah will raise those who have believed among you and those who were given knowledge, by degrees. And Allah is Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 58\n        },\n        \"text\" : \"O you who have believed, when you [wish to] privately consult the Messenger, present before your consultation a charity. That is better for you and purer. But if you find not [the means] -  then indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 58\n        },\n        \"text\" : \"Have you feared to present before your consultation charities?  Then when you do not and Allah has forgiven you, then [at least] establish prayer and give zakah and obey Allah and His Messenger. And Allah is Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 58\n        },\n        \"text\" : \"Have you not considered those who make allies of a people with whom Allah has become angry? They are neither of you nor of them, and they swear to untruth while they know [they are lying].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 58\n        },\n        \"text\" : \"Allah has prepared for them a severe punishment. Indeed, it was evil that they were doing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 58\n        },\n        \"text\" : \"They took their [false] oaths as a cover, so they averted [people] from the way of Allah, and for them is a humiliating punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 58\n        },\n        \"text\" : \"Never will their wealth or their children avail them against Allah at all. Those are the companions of the Fire; they will abide therein eternally\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 58\n        },\n        \"text\" : \"On the Day Allah will resurrect them all, and they will swear to Him as they swear to you and think that they are [standing] on something. Unquestionably, it is they who are the liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 58\n        },\n        \"text\" : \"Satan has overcome them and made them forget the remembrance of Allah . Those are the party of Satan. Unquestionably, the party of Satan -  they will be the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 58\n        },\n        \"text\" : \"Indeed, the ones who oppose Allah and His Messenger -  those will be among the most humbled.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 58\n        },\n        \"text\" : \"Allah has written, \\\"I will surely overcome, I and My messengers.\\\"  Indeed, Allah is Powerful and Exalted in Might.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 58\n        },\n        \"text\" : \"You will not find a people who believe in Allah and the Last Day having affection for those who oppose Allah and His Messenger, even if they were their fathers or their sons or their brothers or their kindred. Those -  He has decreed within their hearts faith and supported them with spirit from Him. And We will admit them to gardens beneath which rivers flow, wherein they abide eternally. Allah is pleased with them, and they are pleased with Him -  those are the party of Allah . Unquestionably, the party of Allah - they are the successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 59\n        },\n        \"text\" : \"Whatever is in the heavens and whatever is on the earth exalts Allah, and He is the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 59\n        },\n        \"text\" : \"It is He who expelled the ones who disbelieved among the People of the Scripture from their homes at the first gathering. You did not think they would leave, and they thought that their fortresses would protect them from Allah ; but [the decree of] Allah came upon them from where they had not expected, and He cast terror into their hearts [so] they destroyed their houses by their [own] hands and the hands of the believers. So take warning, O people of vision.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 59\n        },\n        \"text\" : \"And if not that Allah had decreed for them evacuation, He would have punished them in [this] world, and for them in the Hereafter is the punishment of the Fire.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 59\n        },\n        \"text\" : \"That is because they opposed Allah and His Messenger. And whoever opposes Allah - then indeed, Allah is severe in penalty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 59\n        },\n        \"text\" : \"Whatever you have cut down of [their] palm trees or left standing on their trunks -  it was by permission of Allah and so He would disgrace the defiantly disobedient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 59\n        },\n        \"text\" : \"And what Allah restored [of property] to His Messenger from them -  you did not spur for it [in an expedition] any horses or camels, but Allah gives His messengers power over whom He wills, and Allah is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 59\n        },\n        \"text\" : \"And what Allah restored to His Messenger from the people of the towns -  it is for Allah and for the Messenger and for [his] near relatives and orphans and the needy and the [stranded] traveler -  so that it will not be a perpetual distribution among the rich from among you. And whatever the Messenger has given you -  take; and what he has forbidden you - refrain from. And fear Allah ; indeed, Allah is severe in penalty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 59\n        },\n        \"text\" : \"For the poor emigrants who were expelled from their homes and their properties, seeking bounty from Allah and [His] approval and supporting Allah and His Messenger, [there is also a share]. Those are the truthful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 59\n        },\n        \"text\" : \"Have you not considered those who practice hypocrisy, saying to their brothers who have disbelieved among the People of the Scripture, \\\"If you are expelled, we will surely leave with you, and we will not obey, in regard to you, anyone -  ever; and if you are fought, we will surely aid you.\\\" But Allah testifies that they are liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 59\n        },\n        \"text\" : \"You [believers] are more fearful within their breasts than Allah . That is because they are a people who do not understand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 59\n        },\n        \"text\" : \"They will not fight you all except within fortified cities or from behind walls. Their violence among themselves is severe. You think they are together, but their hearts are diverse. That is because they are a people who do not reason.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 59\n        },\n        \"text\" : \"[The hypocrites are] like the example of Satan when he says to man, \\\"Disbelieve.\\\" But when he disbelieves, he says, \\\"Indeed, I am disassociated from you. Indeed, I fear Allah, Lord of the worlds.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 59\n        },\n        \"text\" : \"So the outcome for both of them is that they will be in the Fire, abiding eternally therein. And that is the recompense of the wrong-doers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 59\n        },\n        \"text\" : \"O you who have believed, fear Allah . And let every soul look to what it has put forth for tomorrow -  and fear Allah . Indeed, Allah is Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 59\n        },\n        \"text\" : \"And be not like those who forgot Allah, so He made them forget themselves. Those are the defiantly disobedient.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 59\n        },\n        \"text\" : \"If We had sent down this Qur'an upon a mountain, you would have seen it humbled and coming apart from fear of Allah . And these examples We present to the people that perhaps they will give thought.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 59\n        },\n        \"text\" : \"He is Allah, other than whom there is no deity, Knower of the unseen and the witnessed. He is the Entirely Merciful, the Especially Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 59\n        },\n        \"text\" : \"He is Allah, other than whom there is no deity, the Sovereign, the Pure, the Perfection, the Bestower of Faith, the Overseer, the Exalted in Might, the Compeller, the Superior. Exalted is Allah above whatever they associate with Him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 59\n        },\n        \"text\" : \"He is Allah, the Creator, the Inventor, the Fashioner; to Him belong the best names. Whatever is in the heavens and earth is exalting Him. And He is the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 60\n        },\n        \"text\" : \"O you who have believed, do not take My enemies and your enemies as allies, extending to them affection while they have disbelieved in what came to you of the truth, having driven out the Prophet and yourselves [only] because you believe in Allah, your Lord. If you have come out for jihad in My cause and seeking means to My approval, [take them not as friends]. You confide to them affection, but I am most knowing of what you have concealed and what you have declared. And whoever does it among you has certainly strayed from the soundness of the way.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 60\n        },\n        \"text\" : \"Never will your relatives or your children benefit you; the Day of Resurrection He will judge between you. And Allah, of what you do, is Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 60\n        },\n        \"text\" : \"There has already been for you an excellent pattern in Abraham and those with him, when they said to their people, \\\"Indeed, we are disassociated from you and from whatever you worship other than Allah . We have denied you, and there has appeared between us and you animosity and hatred forever until you believe in Allah alone\\\" except for the saying of Abraham to his father, \\\"I will surely ask forgiveness for you, but I have not [power to do] for you anything against Allah . Our Lord, upon You we have relied, and to You we have returned, and to You is the destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 60\n        },\n        \"text\" : \"There has certainly been for you in them an excellent pattern for anyone whose hope is in Allah and the Last Day. And whoever turns away -  then indeed, Allah is the Free of need, the Praiseworthy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 60\n        },\n        \"text\" : \"Perhaps Allah will put, between you and those to whom you have been enemies among them, affection. And Allah is competent, and Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 60\n        },\n        \"text\" : \"Allah does not forbid you from those who do not fight you because of religion and do not expel you from your homes -  from being righteous toward them and acting justly toward them. Indeed, Allah loves those who act justly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 60\n        },\n        \"text\" : \"Allah only forbids you from those who fight you because of religion and expel you from your homes and aid in your expulsion -  [forbids] that you make allies of them. And whoever makes allies of them, then it is those who are the wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 60\n        },\n        \"text\" : \"O you who have believed, when the believing women come to you as emigrants, examine them. Allah is most knowing as to their faith. And if you know them to be believers, then do not return them to the disbelievers; they are not lawful [wives] for them, nor are they lawful [husbands] for them. But give the disbelievers what they have spent. And there is no blame upon you if you marry them when you have given them their due compensation. And hold not to marriage bonds with disbelieving women, but ask for what you have spent and let them ask for what they have spent. That is the judgement of Allah ; He judges between you. And Allah is Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 60\n        },\n        \"text\" : \"And if you have lost any of your wives to the disbelievers and you subsequently obtain [something], then give those whose wives have gone the equivalent of what they had spent. And fear Allah, in whom you are believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 60\n        },\n        \"text\" : \"O Prophet, when the believing women come to you pledging to you that they will not associate anything with Allah, nor will they steal, nor will they commit unlawful sexual intercourse, nor will they kill their children, nor will they bring forth a slander they have invented between their arms and legs, nor will they disobey you in what is right -  then accept their pledge and ask forgiveness for them of Allah .  Indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 60\n        },\n        \"text\" : \"O you who have believed, do not make allies of a people with whom Allah has become angry. They have despaired of [reward in] the Hereafter just as the disbelievers have despaired of [meeting] the inhabitants of the graves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 61\n        },\n        \"text\" : \"Whatever is in the heavens and whatever is on the earth exalts Allah, and He is the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 61\n        },\n        \"text\" : \"Great is hatred in the sight of Allah that you say what you do not do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 61\n        },\n        \"text\" : \"Indeed, Allah loves those who fight in His cause in a row as though they are a [single] structure joined firmly.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 61\n        },\n        \"text\" : \"And [mention, O Muhammad], when Moses said to his people, \\\"O my people, why do you harm me while you certainly know that I am the messenger of Allah to you?\\\" And when they deviated, Allah caused their hearts to deviate. And Allah does not guide the defiantly disobedient people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 61\n        },\n        \"text\" : \"And [mention] when Jesus, the son of Mary, said, \\\"O children of Israel, indeed I am the messenger of Allah to you confirming what came before me of the Torah and bringing good tidings of a messenger to come after me, whose name is Ahmad.\\\" But when he came to them with clear evidences, they said, \\\"This is obvious magic.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 61\n        },\n        \"text\" : \"And who is more unjust than one who invents about Allah untruth while he is being invited to Islam. And Allah does not guide the wrongdoing people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 61\n        },\n        \"text\" : \"They want to extinguish the light of Allah with their mouths, but Allah will perfect His light, although the disbelievers dislike it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 61\n        },\n        \"text\" : \"It is He who sent His Messenger with guidance and the religion of truth to manifest it over all religion, although those who associate others with Allah dislike it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 61\n        },\n        \"text\" : \"O you who have believed, shall I guide you to a transaction that will save you from a painful punishment?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 61\n        },\n        \"text\" : \"[It is that] you believe in Allah and His Messenger and strive in the cause of Allah with your wealth and your lives. That is best for you, if you should know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 61\n        },\n        \"text\" : \"And [you will obtain] another [favor] that you love -  victory from Allah and an imminent conquest; and give good tidings to the believers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 61\n        },\n        \"text\" : \"O you who have believed, be supporters of Allah, as when Jesus, the son of Mary, said to the disciples, \\\"Who are my supporters for Allah ?\\\" The disciples said, \\\"We are supporters of Allah .\\\" And a faction of the Children of Israel believed and a faction disbelieved. So We supported those who believed against their enemy, and they became dominant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 62\n        },\n        \"text\" : \"Whatever is in the heavens and whatever is on the earth is exalting Allah, the Sovereign, the Pure, the Exalted in Might, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 62\n        },\n        \"text\" : \"That is the bounty of Allah, which He gives to whom He wills, and Allah is the possessor of great bounty.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 62\n        },\n        \"text\" : \"The example of those who were entrusted with the Torah and then did not take it on is like that of a donkey who carries volumes [of books]. Wretched is the example of the people who deny the signs of Allah . And Allah does not guide the wrongdoing people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 62\n        },\n        \"text\" : \"Say, \\\"O you who are Jews, if you claim that you are allies of Allah, excluding the [other] people, then wish for death, if you should be truthful.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 62\n        },\n        \"text\" : \"But they will not wish for it, ever, because of what their hands have put forth. And Allah is Knowing of the wrongdoers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 62\n        },\n        \"text\" : \"O you who have believed, when [the adhan] is called for the prayer on the day of Jumu'ah [Friday], then proceed to the remembrance of Allah and leave trade. That is better for you, if you only knew.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 62\n        },\n        \"text\" : \"And when the prayer has been concluded, disperse within the land and seek from the bounty of Allah, and remember Allah often that you may succeed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 62\n        },\n        \"text\" : \"But when they saw a transaction or a diversion, [O Muhammad], they rushed to it and left you standing. Say, \\\"What is with Allah is better than diversion and than a transaction, and Allah is the best of providers.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 63\n        },\n        \"text\" : \"When the hypocrites come to you, [O Muhammad], they say, \\\"We testify that you are the Messenger of Allah .\\\" And Allah knows that you are His Messenger, and Allah testifies that the hypocrites are liars.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 63\n        },\n        \"text\" : \"They have taken their oaths as a cover, so they averted [people] from the way of Allah . Indeed, it was evil that they were doing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 63\n        },\n        \"text\" : \"And when you see them, their forms please you, and if they speak, you listen to their speech. [They are] as if they were pieces of wood propped up -  they think that every shout is against them. They are the enemy, so beware of them. May Allah destroy them; how are they deluded?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 63\n        },\n        \"text\" : \"And when it is said to them, \\\"Come, the Messenger of Allah will ask forgiveness for you,\\\" they turn their heads aside and you see them evading while they are arrogant.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 63\n        },\n        \"text\" : \"It is all the same for them whether you ask forgiveness for them or do not ask forgiveness for them; never will Allah forgive them. Indeed, Allah does not guide the defiantly disobedient people.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 63\n        },\n        \"text\" : \"They are the ones who say, \\\"Do not spend on those who are with the Messenger of Allah until they disband.\\\" And to Allah belongs the depositories of the heavens and the earth, but the hypocrites do not understand.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 63\n        },\n        \"text\" : \"They say, \\\"If we return to al-Madinah, the more honored [for power] will surely expel therefrom the more humble.\\\" And to Allah belongs [all] honor, and to His Messenger, and to the believers, but the hypocrites do not know.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 63\n        },\n        \"text\" : \"O you who have believed, let not your wealth and your children divert you from remembrance of Allah . And whoever does that -  then those are the losers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 63\n        },\n        \"text\" : \"And spend [in the way of Allah ] from what We have provided you before death approaches one of you and he says, \\\"My Lord, if only You would delay me for a brief term so I would give charity and be among the righteous.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 63\n        },\n        \"text\" : \"But never will Allah delay a soul when its time has come. And Allah is Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 64\n        },\n        \"text\" : \"Whatever is in the heavens and whatever is on the earth is exalting Allah . To Him belongs dominion, and to Him belongs [all] praise, and He is over all things competent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 64\n        },\n        \"text\" : \"It is He who created you, and among you is the disbeliever, and among you is the believer. And Allah, of what you do, is Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 64\n        },\n        \"text\" : \"He knows what is within the heavens and earth and knows what you conceal and what you declare. And Allah is Knowing of that within the breasts.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 64\n        },\n        \"text\" : \"That is because their messengers used to come to them with clear evidences, but they said, \\\"Shall human beings guide us?\\\" and disbelieved and turned away. And Allah dispensed [with them]; and Allah is Free of need and Praiseworthy.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 64\n        },\n        \"text\" : \"Those who disbelieve have claimed that they will never be resurrected. Say, \\\"Yes, by my Lord, you will surely be resurrected; then you will surely be informed of what you did. And that, for Allah, is easy.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 64\n        },\n        \"text\" : \"So believe in Allah and His Messenger and the Qur'an which We have sent down. And Allah is Acquainted with what you do.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 64\n        },\n        \"text\" : \"The Day He will assemble you for the Day of Assembly -  that is the Day of Deprivation. And whoever believes in Allah and does righteousness -  He will remove from him his misdeeds and admit him to gardens beneath which rivers flow, wherein they will abide forever. That is the great attainment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 64\n        },\n        \"text\" : \"But the ones who disbelieved and denied Our verses -  those are the companions of the Fire, abiding eternally therein; and wretched is the destination.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 64\n        },\n        \"text\" : \"No disaster strikes except by permission of Allah . And whoever believes in Allah -  He will guide his heart. And Allah is Knowing of all things.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 64\n        },\n        \"text\" : \"And obey Allah and obey the Messenger; but if you turn away -  then upon Our Messenger is only [the duty of] clear notification.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 64\n        },\n        \"text\" : \"Allah -  there is no deity except Him. And upon Allah let the believers rely.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 64\n        },\n        \"text\" : \"O you who have believed, indeed, among your wives and your children are enemies to you, so beware of them. But if you pardon and overlook and forgive -  then indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 64\n        },\n        \"text\" : \"Your wealth and your children are but a trial, and Allah has with Him a great reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 64\n        },\n        \"text\" : \"So fear Allah as much as you are able and listen and obey and spend [in the way of Allah ]; it is better for your selves. And whoever is protected from the stinginess of his soul -  it is those who will be the successful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 64\n        },\n        \"text\" : \"If you loan Allah a goodly loan, He will multiply it for you and forgive you. And Allah is Most Appreciative and Forbearing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 65\n        },\n        \"text\" : \"O Prophet, when you [Muslims] divorce women, divorce them for [the commencement of] their waiting period and keep count of the waiting period, and fear Allah, your Lord. Do not turn them out of their [husbands'] houses, nor should they [themselves] leave [during that period] unless they are committing a clear immorality. And those are the limits [set by] Allah . And whoever transgresses the limits of Allah has certainly wronged himself. You know not; perhaps Allah will bring about after that a [different] matter.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 65\n        },\n        \"text\" : \"And when they have [nearly] fulfilled their term, either retain them according to acceptable terms or part with them according to acceptable terms. And bring to witness two just men from among you and establish the testimony for [the acceptance of] Allah . That is instructed to whoever should believe in Allah and the Last day. And whoever fears Allah -  He will make for him a way out\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 65\n        },\n        \"text\" : \"And will provide for him from where he does not expect.  And whoever relies upon Allah -  then He is sufficient for him. Indeed, Allah will accomplish His purpose. Allah has already set for everything a [decreed] extent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 65\n        },\n        \"text\" : \"And those who no longer expect menstruation among your women -  if you doubt, then their period is three months, and [also for] those who have not menstruated. And for those who are pregnant, their term is until they give birth. And whoever fears Allah -  He will make for him of his matter ease.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 65\n        },\n        \"text\" : \"That is the command of Allah, which He has sent down to you; and whoever fears Allah -  He will remove for him his misdeeds and make great for him his reward.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 65\n        },\n        \"text\" : \"Let a man of wealth spend from his wealth, and he whose provision is restricted -  let him spend from what Allah has given him. Allah does not charge a soul except [according to] what He has given it. Allah will bring about, after hardship, ease.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 65\n        },\n        \"text\" : \"Allah has prepared for them a severe punishment; so fear Allah, O you of understanding who have believed. Allah has sent down to you the Qur'an.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 65\n        },\n        \"text\" : \"[He sent] a Messenger [Muhammad] reciting to you the distinct verses of Allah that He may bring out those who believe and do righteous deeds from darknesses into the light. And whoever believes in Allah and does righteousness -  He will admit him into gardens beneath which rivers flow to abide therein forever. Allah will have perfected for him a provision.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 65\n        },\n        \"text\" : \"It is Allah who has created seven heavens and of the earth, the like of them. [His] command descends among them so you may know that Allah is over all things competent and that Allah has encompassed all things in knowledge.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 66\n        },\n        \"text\" : \"O Prophet, why do you prohibit [yourself from] what Allah has made lawful for you, seeking the approval of your wives? And Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 66\n        },\n        \"text\" : \"Allah has already ordained for you [Muslims] the dissolution of your oaths. And Allah is your protector, and He is the Knowing, the Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 66\n        },\n        \"text\" : \"And [remember] when the Prophet confided to one of his wives a statement; and when she informed [another] of it and Allah showed it to him, he made known part of it and ignored a part. And when he informed her about it, she said, \\\"Who told you this?\\\" He said, \\\"I was informed by the Knowing, the Acquainted.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 66\n        },\n        \"text\" : \"If you two [wives] repent to Allah, [it is best], for your hearts have deviated. But if you cooperate against him -  then indeed Allah is his protector, and Gabriel and the righteous of the believers and the angels, moreover, are [his] assistants.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 66\n        },\n        \"text\" : \"Perhaps his Lord, if he divorced you [all], would substitute for him wives better than you -  submitting [to Allah ], believing, devoutly obedient, repentant, worshipping, and traveling -  [ones] previously married and virgins.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 66\n        },\n        \"text\" : \"O you who have believed, protect yourselves and your families from a Fire whose fuel is people and stones, over which are [appointed] angels, harsh and severe; they do not disobey Allah in what He commands them but do what they are commanded.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 66\n        },\n        \"text\" : \"O you who have believed, repent to Allah with sincere repentance. Perhaps your Lord will remove from you your misdeeds and admit you into gardens beneath which rivers flow [on] the Day when Allah will not disgrace the Prophet and those who believed with him. Their light will proceed before them and on their right; they will say, \\\"Our Lord, perfect for us our light and forgive us.  Indeed, You are over all things competent.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 66\n        },\n        \"text\" : \"Allah presents an example of those who disbelieved: the wife of Noah and the wife of Lot. They were under two of Our righteous servants but betrayed them, so those prophets did not avail them from Allah at all, and it was said, \\\"Enter the Fire with those who enter.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 66\n        },\n        \"text\" : \"And Allah presents an example of those who believed: the wife of Pharaoh, when she said, \\\"My Lord, build for me near You a house in Paradise and save me from Pharaoh and his deeds and save me from the wrongdoing people.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 67\n        },\n        \"text\" : \"Blessed is He in whose hand is dominion, and He is over all things competent -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 67\n        },\n        \"text\" : \"They will say,\\\" Yes, a warner had come to us, but we denied and said, ' Allah has not sent down anything. You are not but in great error.' \\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 67\n        },\n        \"text\" : \"Do you feel secure that He who [holds authority] in the heaven would not cause the earth to swallow you and suddenly it would sway?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 67\n        },\n        \"text\" : \"Do they not see the birds above them with wings outspread and [sometimes] folded in? None holds them [aloft] except the Most Merciful. Indeed He is, of all things, Seeing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 67\n        },\n        \"text\" : \"Then is one who walks fallen on his face better guided or one who walks erect on a straight path?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 67\n        },\n        \"text\" : \"Say, \\\"The knowledge is only with Allah, and I am only a clear warner.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 67\n        },\n        \"text\" : \"But when they see it approaching, the faces of those who disbelieve will be distressed, and it will be said, \\\"This is that for which you used to call.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 67\n        },\n        \"text\" : \"Say, [O Muhammad], \\\"Have you considered: whether Allah should cause my death and those with me or have mercy upon us, who can protect the disbelievers from a painful punishment?\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 68\n        },\n        \"text\" : \"And they called one another at morning,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 68\n        },\n        \"text\" : \"The most moderate of them said, \\\"Did I not say to you, 'Why do you not exalt [ Allah ]?' \\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 48,\n          \"sura\" : 68\n        },\n        \"text\" : \"Then be patient for the decision of your Lord, [O Muhammad], and be not like the companion of the fish when he called out while he was distressed.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 69\n        },\n        \"text\" : \"Which Allah imposed upon them for seven nights and eight days in succession, so you would see the people therein fallen as if they were hollow trunks of palm trees.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 69\n        },\n        \"text\" : \"[ Allah will say], \\\"Seize him and shackle him.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 33,\n          \"sura\" : 69\n        },\n        \"text\" : \"Indeed, he did not used to believe in Allah, the Most Great,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 70\n        },\n        \"text\" : \"[It is] from Allah, owner of the ways of ascent.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 40,\n          \"sura\" : 70\n        },\n        \"text\" : \"So I swear by the Lord of [all] risings and settings that indeed We are able\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 3,\n          \"sura\" : 71\n        },\n        \"text\" : \"[Saying], 'Worship Allah, fear Him and obey me.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 71\n        },\n        \"text\" : \"Allah will forgive you of your sins and delay you for a specified term.  Indeed, the time [set by] Allah, when it comes, will not be delayed, if you only knew.' \\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 71\n        },\n        \"text\" : \"What is [the matter] with you that you do not attribute to Allah [due] grandeur\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 15,\n          \"sura\" : 71\n        },\n        \"text\" : \"Do you not consider how Allah has created seven heavens in layers\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 71\n        },\n        \"text\" : \"And Allah has caused you to grow from the earth a [progressive] growth.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 71\n        },\n        \"text\" : \"And Allah has made for you the earth an expanse\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 71\n        },\n        \"text\" : \"Because of their sins they were drowned and put into the Fire, and they found not for themselves besides Allah [any] helpers.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 4,\n          \"sura\" : 72\n        },\n        \"text\" : \"And that our foolish one has been saying about Allah an excessive transgression.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 72\n        },\n        \"text\" : \"And we had thought that mankind and the jinn would never speak about Allah a lie.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 72\n        },\n        \"text\" : \"And they had thought, as you thought, that Allah would never send anyone [as a messenger].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 12,\n          \"sura\" : 72\n        },\n        \"text\" : \"And we have become certain that we will never cause failure to Allah upon earth, nor can we escape Him by flight.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 72\n        },\n        \"text\" : \"And among us are Muslims [in submission to Allah ], and among us are the unjust. And whoever has become Muslim -  those have sought out the right course.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 72\n        },\n        \"text\" : \"And [ Allah revealed] that if they had remained straight on the way, We would have given them abundant provision\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 72\n        },\n        \"text\" : \"And [He revealed] that the masjids are for Allah, so do not invoke with Allah anyone.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 72\n        },\n        \"text\" : \"And that when the Servant of Allah stood up supplicating Him, they almost became about him a compacted mass.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 72\n        },\n        \"text\" : \"Say, \\\"Indeed, there will never protect me from Allah anyone [if I should disobey], nor will I find in other than Him a refuge.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 72\n        },\n        \"text\" : \"But [I have for you] only notification from Allah, and His messages.\\\" And whoever disobeys Allah and His Messenger -  then indeed, for him is the fire of Hell; they will abide therein forever.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 72\n        },\n        \"text\" : \"That he may know that they have conveyed the messages of their Lord; and He has encompassed whatever is with them and has enumerated all things in number.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 73\n        },\n        \"text\" : \"And leave Me with [the matter of] the deniers, those of ease [in life], and allow them respite a little.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 73\n        },\n        \"text\" : \"Indeed, your Lord knows, [O Muhammad], that you stand [in prayer] almost two thirds of the night or half of it or a third of it, and [so do] a group of those with you. And Allah determines [the extent of] the night and the day. He has known that you [Muslims] will not be able to do it and has turned to you in forgiveness, so recite what is easy [for you] of the Qur'an. He has known that there will be among you those who are ill and others traveling throughout the land seeking [something] of the bounty of Allah and others fighting for the cause of Allah . So recite what is easy from it and establish prayer and give zakah and loan Allah a goodly loan. And whatever good you put forward for yourselves -  you will find it with Allah . It is better and greater in reward. And seek forgiveness of Allah . Indeed, Allah is Forgiving and Merciful.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 31,\n          \"sura\" : 74\n        },\n        \"text\" : \"And We have not made the keepers of the Fire except angels. And We have not made their number except as a trial for those who disbelieve -  that those who were given the Scripture will be convinced and those who have believed will increase in faith and those who were given the Scripture and the believers will not doubt and that those in whose hearts is hypocrisy and the disbelievers will say, \\\"What does Allah intend by this as an example?\\\" Thus does Allah leave astray whom He wills and guides whom He wills. And none knows the soldiers of your Lord except Him. And mention of the Fire is not but a reminder to humanity.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 56,\n          \"sura\" : 74\n        },\n        \"text\" : \"And they will not remember except that Allah wills. He is worthy of fear and adequate for [granting] forgiveness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 38,\n          \"sura\" : 75\n        },\n        \"text\" : \"Then he was a clinging clot, and [ Allah ] created [his form] and proportioned [him]\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 76\n        },\n        \"text\" : \"A spring of which the [righteous] servants of Allah will drink; they will make it gush forth in force [and abundance].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 76\n        },\n        \"text\" : \"[Saying], \\\"We feed you only for the countenance of Allah . We wish not from you reward or gratitude.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 76\n        },\n        \"text\" : \"So Allah will protect them from the evil of that Day and give them radiance and happiness\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 30,\n          \"sura\" : 76\n        },\n        \"text\" : \"And you do not will except that Allah wills. Indeed, Allah is ever Knowing and Wise.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 78\n        },\n        \"text\" : \"But all things We have enumerated in writing.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 16,\n          \"sura\" : 79\n        },\n        \"text\" : \"When his Lord called to him in the sacred valley of Tuwa,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 79\n        },\n        \"text\" : \"And he gathered [his people] and called out\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 25,\n          \"sura\" : 79\n        },\n        \"text\" : \"So Allah seized him in exemplary punishment for the last and the first [transgression].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 26,\n          \"sura\" : 79\n        },\n        \"text\" : \"Indeed in that is a warning for whoever would fear [ Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 27,\n          \"sura\" : 79\n        },\n        \"text\" : \"Are you a more difficult creation or is the heaven? Allah constructed it.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 36,\n          \"sura\" : 79\n        },\n        \"text\" : \"And Hellfire will be exposed for [all] those who see -\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 80\n        },\n        \"text\" : \"While he fears [ Allah ],\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 81\n        },\n        \"text\" : \"And when the stars fall, dispersing,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 22,\n          \"sura\" : 81\n        },\n        \"text\" : \"And your companion is not [at all] mad.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 29,\n          \"sura\" : 81\n        },\n        \"text\" : \"And you do not will except that Allah wills -  Lord of the worlds.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 82\n        },\n        \"text\" : \"And when the stars fall, scattering,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 82\n        },\n        \"text\" : \"It is the Day when a soul will not possess for another soul [power to do] a thing; and the command, that Day, is [entirely] with Allah .\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 83\n        },\n        \"text\" : \"Which is witnessed by those brought near [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 28,\n          \"sura\" : 83\n        },\n        \"text\" : \"A spring from which those near [to Allah ] drink.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 84\n        },\n        \"text\" : \"Indeed, he had thought he would never return [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 21,\n          \"sura\" : 84\n        },\n        \"text\" : \"And when the Qur'an is recited to them, they do not prostrate [to Allah ]?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 23,\n          \"sura\" : 84\n        },\n        \"text\" : \"And Allah is most knowing of what they keep within themselves.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 85\n        },\n        \"text\" : \"And they resented them not except because they believed in Allah, the Exalted in Might, the Praiseworthy,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 85\n        },\n        \"text\" : \"To whom belongs the dominion of the heavens and the earth. And Allah, over all things, is Witness.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 20,\n          \"sura\" : 85\n        },\n        \"text\" : \"While Allah encompasses them from behind.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 86\n        },\n        \"text\" : \"Indeed, Allah, to return him [to life], is Able.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 86\n        },\n        \"text\" : \"So allow time for the disbelievers. Leave them awhile.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 7,\n          \"sura\" : 87\n        },\n        \"text\" : \"Except what Allah should will. Indeed, He knows what is declared and what is hidden.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 10,\n          \"sura\" : 87\n        },\n        \"text\" : \"He who fears [ Allah ] will be reminded.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 24,\n          \"sura\" : 88\n        },\n        \"text\" : \"Then Allah will punish him with the greatest punishment.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 89\n        },\n        \"text\" : \"Is there [not] in [all] that an oath [sufficient] for one of perception?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 9,\n          \"sura\" : 89\n        },\n        \"text\" : \"And [with] Thamud, who carved out the rocks in the valley?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 89\n        },\n        \"text\" : \"[All of] whom oppressed within the lands\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 13,\n          \"sura\" : 91\n        },\n        \"text\" : \"And the messenger of Allah [Salih] said to them, \\\"[Do not harm] the she-camel of Allah or [prevent her from] her drink.\\\"\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 91\n        },\n        \"text\" : \"But they denied him and hamstrung her. So their Lord brought down upon them destruction for their sin and made it equal [upon all of them].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 92\n        },\n        \"text\" : \"As for he who gives and fears Allah\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 11,\n          \"sura\" : 92\n        },\n        \"text\" : \"And what will his wealth avail him when he falls?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 95\n        },\n        \"text\" : \"Is not Allah the most just of judges?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 14,\n          \"sura\" : 96\n        },\n        \"text\" : \"Does he not know that Allah sees?\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 17,\n          \"sura\" : 96\n        },\n        \"text\" : \"Then let him call his associates;\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 18,\n          \"sura\" : 96\n        },\n        \"text\" : \"We will call the angels of Hell.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 19,\n          \"sura\" : 96\n        },\n        \"text\" : \"No! Do not obey him. But prostrate and draw near [to Allah ].\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 98\n        },\n        \"text\" : \"A Messenger from Allah, reciting purified scriptures\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 5,\n          \"sura\" : 98\n        },\n        \"text\" : \"And they were not commanded except to worship Allah, [being] sincere to Him in religion, inclining to truth, and to establish prayer and to give zakah. And that is the correct religion.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 98\n        },\n        \"text\" : \"Indeed, they who disbelieved among the People of the Scripture and the polytheists will be in the fire of Hell, abiding eternally therein. Those are the worst of creatures.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 8,\n          \"sura\" : 98\n        },\n        \"text\" : \"Their reward with Allah will be gardens of perpetual residence beneath which rivers flow, wherein they will abide forever, Allah being pleased with them and they with Him. That is for whoever has feared his Lord.\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 6,\n          \"sura\" : 104\n        },\n        \"text\" : \"It is the fire of Allah, [eternally] fueled,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 110\n        },\n        \"text\" : \"When the victory of Allah has come and the conquest,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 110\n        },\n        \"text\" : \"And you see the people entering into the religion of Allah in multitudes,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 112\n        },\n        \"text\" : \"Say, \\\"He is Allah, [who is] One,\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 2,\n          \"sura\" : 112\n        },\n        \"text\" : \"Allah, the Eternal Refuge.\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"translation: 2\"\n    }\n  }\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testNumbers.1.json",
    "content": "[\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 1\n        },\n        \"text\" : \"Surah Al-Fātihah\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 1\n        },\n        \"text\" : \"Juz' 1\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 1\n        },\n        \"text\" : \"Hizb 1\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 1\n        },\n        \"text\" : \"Page 1\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"quran\"\n    }\n  }\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testNumbers.2.json",
    "content": "[\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 33\n        },\n        \"text\" : \"Surah Al-Aḥzāb\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 21\n        },\n        \"text\" : \"Hizb 33\"\n      },\n      {\n        \"ayah\" : {\n          \"ayah\" : 211,\n          \"sura\" : 2\n        },\n        \"text\" : \"Page 33\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"quran\"\n    }\n  }\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/CompositeSearcherTests/testNumbers.3.json",
    "content": "[\n  {\n    \"items\" : [\n      {\n        \"ayah\" : {\n          \"ayah\" : 1,\n          \"sura\" : 68\n        },\n        \"text\" : \"نٓۚ وَٱلۡقَلَمِ وَمَا يَسۡطُرُونَ\"\n      }\n    ],\n    \"source\" : {\n      \"rawKey\" : \"quran\"\n    }\n  }\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/SearchRecentsServiceTests/testPopularTerms.1.json",
    "content": "[\n  \"الرحمن\",\n  \"الحي القيوم\",\n  \"يس\",\n  \"7\",\n  \"5:88\",\n  \"تبارك\",\n  \"عم\",\n  \"أعوذ\"\n]"
  },
  {
    "path": "Domain/QuranTextKit/Tests/__Snapshots__/SearchRecentsServiceTests/testPopularTerms.2.json",
    "content": "[\n  \"الرحمن\",\n  \"الحي القيوم\",\n  \"يس\",\n  \"7\",\n  \"5:88\",\n  \"تبارك\",\n  \"عم\",\n  \"أعوذ\"\n]"
  },
  {
    "path": "Domain/ReadingService/Sources/ReadingPreferences.swift",
    "content": "//\n//  ReadingPreferences.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-02-14.\n//\n\nimport Preferences\nimport QuranKit\n\npublic struct ReadingPreferences {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Public\n\n    public static let shared = ReadingPreferences()\n\n    @TransformedPreference(reading, transformer: .rawRepresentable(defaultValue: defaultQuranReading))\n    public var reading: Reading\n\n    // MARK: Private\n\n    private static let defaultQuranReading = Reading.hafs_1405\n    private static let reading = PreferenceKey<Int>(key: \"quranReading\", defaultValue: defaultQuranReading.rawValue)\n}\n"
  },
  {
    "path": "Domain/ReadingService/Sources/ReadingRemoteResources.swift",
    "content": "//\n//  ReadingRemoteResources.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-11-20.\n//\n\nimport Foundation\nimport QuranKit\nimport SystemDependencies\nimport Utilities\n\npublic protocol ReadingRemoteResources {\n    func resource(for reading: Reading) -> RemoteResource?\n}\n\npublic struct RemoteResource {\n    // MARK: Lifecycle\n\n    public init(url: URL, reading: Reading, version: Int) {\n        self.url = url\n        self.reading = reading\n        self.version = version\n        downloadDestination = Reading.readingsPath.appendingPathComponent(reading.localPath, isDirectory: true)\n    }\n\n    // MARK: Public\n\n    public let downloadDestination: RelativeFilePath\n\n    public func isDownloaded(fileSystem: FileSystem = DefaultFileSystem()) -> Bool {\n        if hasSuccessFile(fileSystem: fileSystem) {\n            return true\n        }\n        return canRecoverSuccessFile(fileSystem: fileSystem)\n    }\n\n    // MARK: Internal\n\n    let url: URL\n    let reading: Reading\n    let version: Int\n\n    var zipFile: RelativeFilePath {\n        downloadDestination.appendingPathComponent(url.lastPathComponent, isDirectory: false)\n    }\n\n    var successFilePath: RelativeFilePath {\n        downloadDestination.appendingPathComponent(\"success-v\\(version).txt\", isDirectory: false)\n    }\n\n    var extractedVersionFileURL: URL {\n        reading.imagesDirectory(in: downloadDestination.url)\n            .appendingPathComponent(\".v\\(version)\")\n    }\n\n    func hasSuccessFile(fileSystem: FileSystem = DefaultFileSystem()) -> Bool {\n        fileSystem.fileExists(at: successFilePath)\n    }\n\n    func canRecoverSuccessFile(fileSystem: FileSystem = DefaultFileSystem()) -> Bool {\n        // The CDN can serve a newer dataset under the same URL before the app\n        // updates its bundled version number. A matching .vN marker tells us\n        // that newer dataset landed, and any older success-vK.txt confirms a\n        // prior unzip completed successfully on this device.\n        guard fileSystem.fileExists(at: extractedVersionFileURL) else {\n            return false\n        }\n        return hasSuccessFile(forAnyVersionBefore: version, fileSystem: fileSystem)\n    }\n\n    // MARK: Private\n\n    private func hasSuccessFile(forAnyVersionBefore version: Int, fileSystem: FileSystem) -> Bool {\n        guard version > 1 else {\n            return false\n        }\n        for previousVersion in 1 ..< version {\n            if fileSystem.fileExists(at: successFilePath(for: previousVersion)) {\n                return true\n            }\n        }\n        return false\n    }\n\n    private func successFilePath(for version: Int) -> RelativeFilePath {\n        downloadDestination.appendingPathComponent(\"success-v\\(version).txt\", isDirectory: false)\n    }\n}\n\nprivate extension Reading {\n    static let readingsPath = RelativeFilePath(\"readings\", isDirectory: true)\n}\n\nextension Reading {\n    public var localPath: String {\n        switch self {\n        case .hafs_1405: return \"hafs_1405\"\n        case .hafs_1440: return \"hafs_1440\"\n        case .hafs_1421: return \"hafs_1421\"\n        case .hafs_1439: return \"hafs_1439\"\n        case .hafs_1441: return \"hafs_1441\"\n        case .tajweed: return \"tajweed\"\n        }\n    }\n\n    static func isDownloadDesitnationPath(_ path: RelativeFilePath) -> Bool {\n        readingsPath.isParent(of: path)\n    }\n}\n"
  },
  {
    "path": "Domain/ReadingService/Sources/ReadingResourceDownloader.swift",
    "content": "//\n//  ReadingResourceDownloader.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-11-20.\n//\n\nimport BatchDownloader\nimport QuranKit\n\nstruct ReadingResourceDownloader {\n    // MARK: Lifecycle\n\n    init(downloader: DownloadManager, remoteResources: ReadingRemoteResources?) {\n        self.downloader = downloader\n        self.remoteResources = remoteResources\n    }\n\n    // MARK: Internal\n\n    let downloader: DownloadManager\n    let remoteResources: ReadingRemoteResources?\n\n    func download(\n        _ reading: Reading,\n        onProgressChange: @Sendable @escaping (Double) -> Void\n    ) async throws {\n        // If nil, then it's a local resource\n        guard let remoteResource = remoteResources?.resource(for: reading) else {\n            return\n        }\n\n        let download: DownloadBatchResponse\n\n        // If already downloading, use it (e.g. waking up from background), otherwise download.\n        let runningReadings = await runningReadings()\n        if let runningReading = runningReadings.first(where: { remoteResource.matches($0) }) {\n            download = runningReading\n        } else {\n            let request = DownloadRequest(url: remoteResource.url, destination: remoteResource.zipFile)\n            download = try await downloader.download(DownloadBatchRequest(requests: [request]))\n        }\n\n        for try await progress in download.progress {\n            onProgressChange(progress.progress)\n        }\n\n        try Task.checkCancellation()\n    }\n\n    func cancelDownload(exclude reading: Reading) async {\n        let execludedResource = remoteResources?.resource(for: reading)\n        let runningReadings = await runningReadings()\n        for runningReading in runningReadings {\n            if let execludedResource, execludedResource.matches(runningReading) {\n                continue\n            }\n            await runningReading.cancel()\n        }\n    }\n\n    // MARK: Private\n\n    private func runningReadings() async -> [DownloadBatchResponse] {\n        let allDownloads = await downloader.getOnGoingDownloads()\n        let downloads = allDownloads.filter { isReading($0) }\n        return downloads\n    }\n\n    private func isReading(_ response: DownloadBatchResponse) -> Bool {\n        response.requests.count == 1 &&\n            response.requests.contains { Reading.isDownloadDesitnationPath($0.destination) }\n    }\n}\n\nprivate extension RemoteResource {\n    func matches(_ batch: DownloadBatchResponse) -> Bool {\n        if let request = batch.requests.first, batch.requests.count == 1 {\n            return matches(request)\n        }\n        return false\n    }\n\n    func matches(_ request: DownloadRequest) -> Bool {\n        request.destination == downloadDestination\n    }\n}\n"
  },
  {
    "path": "Domain/ReadingService/Sources/ReadingResourcesService.swift",
    "content": "//\n//  ReadingResourcesService.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-02-20.\n//\n\nimport BatchDownloader\nimport Combine\nimport CombineSchedulers\nimport Crashing\nimport Foundation\nimport QuranKit\nimport SystemDependencies\nimport Utilities\nimport VLogging\n\npublic actor ReadingResourcesService {\n    // MARK: Lifecycle\n\n    public init(\n        fileManager: FileSystem = DefaultFileSystem(),\n        zipper: Zipper = DefaultZipper(),\n        scheduler: AnySchedulerOf<DispatchQueue> = .main,\n        throttleInterval: DispatchQueue.SchedulerTimeType.Stride = .seconds(0.1),\n        preferencesObservingStarted: EventObserver? = nil,\n        preferenceLoadingCompleted: EventObserver? = nil,\n        downloader: DownloadManager,\n        remoteResources: ReadingRemoteResources?\n    ) {\n        self.zipper = zipper\n        self.fileManager = fileManager\n        self.preferencesObservingStarted = preferencesObservingStarted\n        self.preferenceLoadingCompleted = preferenceLoadingCompleted\n        self.remoteResources = remoteResources\n        self.downloader = ReadingResourceDownloader(downloader: downloader, remoteResources: remoteResources)\n        self.scheduler = scheduler\n        self.throttleInterval = throttleInterval\n    }\n\n    // MARK: Public\n\n    public enum ResourceStatus: Equatable {\n        case downloading(progress: Double)\n        case ready\n        case error(NSError)\n    }\n\n    public nonisolated var publisher: AnyPublisher<ResourceStatus, Never> {\n        let base = subject.compactMap { $0 }\n        guard throttleInterval > .zero else {\n            return base.eraseToAnyPublisher()\n        }\n        // It helps slow down download progress a little, otherwise the UI may keep rendering progress after the download completes.\n        return base\n            .throttle(for: throttleInterval, scheduler: scheduler, latest: true)\n            .eraseToAnyPublisher()\n    }\n\n    public func startLoadingResources() {\n        let initialReading = preferences.reading\n        readingsTask = Task { [weak self] in\n            guard let readings = self?.preferences.$reading.prepend(initialReading).values() else {\n                return\n            }\n            await self?.preferencesObservingStarted?()\n            for await reading in readings {\n                await self?.loadResourceInAsyncTask(reading)\n            }\n        }\n        .asCancellableTask()\n    }\n\n    public func retry() async {\n        loadResourceInAsyncTask(preferences.reading)\n    }\n\n    // MARK: Internal\n\n    let preferenceLoadingCompleted: EventObserver?\n    let preferencesObservingStarted: EventObserver?\n\n    // MARK: Private\n\n    private nonisolated let preferences = ReadingPreferences.shared\n\n    private var readingTask: CancellableTask?\n    private var readingsTask: CancellableTask?\n\n    private nonisolated let subject = CurrentValueSubject<ResourceStatus?, Never>(nil)\n    private let scheduler: AnySchedulerOf<DispatchQueue>\n    private let throttleInterval: DispatchQueue.SchedulerTimeType.Stride\n    private let zipper: Zipper\n    private let fileManager: FileSystem\n    private let downloader: ReadingResourceDownloader\n    private let remoteResources: ReadingRemoteResources?\n\n    private func loadResourceInAsyncTask(_ reading: Reading) {\n        readingTask = Task {\n            let status = await self.loadResource(of: reading)\n            self.send(status, from: reading)\n            await self.preferenceLoadingCompleted?()\n        }\n        .asCancellableTask()\n    }\n\n    private func loadResource(of reading: Reading) async -> ResourceStatus {\n        removePreviouslyDownloadedResources(exclude: reading)\n        await downloader.cancelDownload(exclude: reading)\n\n        logger.info(\"Resources: Start loading reading resources of: \\(reading)\")\n        guard let remoteResource = remoteResources?.resource(for: reading) else {\n            logger.info(\"Resources: Reading \\(reading) is bundled with the app.\")\n            return .ready\n        }\n\n        if remoteResource.hasSuccessFile(fileSystem: fileManager) {\n            logger.info(\"Resources: Reading \\(reading) has been downloaded and saved locally before\")\n            return .ready\n        }\n\n        if recoverDownloadedResourceIfNeeded(remoteResource) {\n            logger.info(\"Resources: Reading \\(reading) has extracted resources and a previous success marker. Regenerated success marker.\")\n            return .ready\n        }\n\n        removeDownloadedResource(for: reading)\n\n        do {\n            // start the download\n            try await downloader.download(reading) { progress in\n                self.send(.downloading(progress: progress), from: reading)\n            }\n\n            // Unzip file after download completes.\n            try unzipFileIfNeeded(remoteResource)\n\n            return .ready\n        } catch {\n            crasher.recordError(error, reason: \"Failed to download \\(reading). Error: \\(error)\")\n            return .error(error as NSError)\n        }\n    }\n\n    private func recoverDownloadedResourceIfNeeded(_ remoteResource: RemoteResource) -> Bool {\n        guard remoteResource.canRecoverSuccessFile(fileSystem: fileManager) else {\n            return false\n        }\n\n        do {\n            try fileManager.writeToFile(at: remoteResource.successFilePath.url, content: \"Downloaded\")\n        } catch {\n            crasher.recordError(\n                error,\n                reason: \"Cannot write recovered success marker for '\\(remoteResource.successFilePath.url)'\"\n            )\n        }\n        return true\n    }\n\n    private func unzipFileIfNeeded(_ remoteResource: RemoteResource) throws {\n        let zipFile = remoteResource.zipFile.url\n        let destination = remoteResource.downloadDestination\n            .appendingPathComponent(zipFile.lastPathComponent.stringByDeletingPathExtension, isDirectory: false).url\n\n        // Delete the zip either we were able to download it or not.\n        defer { try? fileManager.removeItem(at: zipFile) }\n\n        do {\n            try zipper.unzipFile(zipFile, destination: destination, overwrite: true, password: nil)\n\n            // Write a success file to make it easy to verify if file is downloaded and unzipped successfully.\n            try fileManager.writeToFile(at: remoteResource.successFilePath.url, content: \"Downloaded\")\n        } catch {\n            crasher.recordError(error, reason: \"Cannot unzip file '\\(zipFile)' to '\\(destination)'\")\n            throw error\n        }\n    }\n\n    private func removePreviouslyDownloadedResources(exclude reading: Reading) {\n        let readings = Reading.allReadings.filter { $0 != reading }\n        for reading in readings {\n            removeDownloadedResource(for: reading)\n        }\n    }\n\n    private func removeDownloadedResource(for reading: Reading) {\n        guard let resource = remoteResources?.resource(for: reading) else {\n            return\n        }\n        try? fileManager.removeItem(at: resource.downloadDestination)\n    }\n\n    private nonisolated func send(_ status: ResourceStatus, from reading: Reading) {\n        if preferences.reading != reading {\n            return\n        }\n        subject.send(status)\n    }\n}\n"
  },
  {
    "path": "Domain/ReadingService/Tests/ReadingRemoteResourcesFake.swift",
    "content": "//\n//  ReadingRemoteResourcesFake.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-11-22.\n//\n\nimport Foundation\nimport QuranKit\nimport ReadingService\n\nfinal class ReadingRemoteResourcesFake: ReadingRemoteResources {\n    var versions: [Reading: Int] = [:]\n\n    func resource(for reading: Reading) -> RemoteResource? {\n        let url: String? = {\n            switch reading {\n            case .hafs_1405:\n                return nil\n            case .hafs_1421:\n                return \"https://quran.com/hafs_1421.zip\"\n            case .hafs_1440:\n                return \"https://quran.com/hafs_1440.zip\"\n            case .hafs_1439:\n                return \"https://quran.com/hafs_1439.zip\"\n            case .hafs_1441:\n                return \"https://quran.com/hafs_1441.zip\"\n            case .tajweed:\n                return \"https://quran.com/tajweed.zip\"\n            }\n        }()\n\n        let version = versions[reading] ?? 0\n        return url.map { RemoteResource(url: URL(validURL: $0), reading: reading, version: version) }\n    }\n}\n"
  },
  {
    "path": "Domain/ReadingService/Tests/ReadingResourcesServiceTests.swift",
    "content": "//\n//  ReadingResourcesServiceTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-02-20.\n//\n\nimport AsyncAlgorithms\nimport AsyncUtilitiesForTesting\nimport BatchDownloader\nimport BatchDownloaderFake\nimport CombineSchedulers\nimport NetworkSupport\nimport NetworkSupportFake\nimport QuranKit\nimport SystemDependenciesFake\nimport XCTest\n@testable import ReadingService\n\nfinal class ReadingResourcesServiceTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUp() async throws {\n        ReadingPreferences.shared.reading = .hafs_1405\n\n        testScheduler = .immediate\n        fileManager = FileSystemFake()\n        remoteResources = ReadingRemoteResourcesFake()\n        preferencesObservingStarted = AsyncChannelEventObserver()\n        preferenceLoadingCompleted = AsyncChannelEventObserver()\n        zipper = ZipperFake(fileManager: fileManager)\n\n        testContext = BatchDownloaderFake.makeContext()\n        (downloader, session) = await testContext.makeDownloader(fileManager: fileManager)\n\n        downloadsObserver = AsyncChannel<SessionTask>()\n        session.downloadsObserver = downloadsObserver\n\n        service = ReadingResourcesService(\n            fileManager: fileManager,\n            zipper: zipper,\n            scheduler: testScheduler,\n            throttleInterval: .zero,\n            preferencesObservingStarted: preferencesObservingStarted,\n            preferenceLoadingCompleted: preferenceLoadingCompleted,\n            downloader: downloader,\n            remoteResources: remoteResources\n        )\n        collector = PublisherCollector(service.publisher)\n    }\n\n    override func tearDown() {\n        testContext.tearDown()\n        testContext = nil\n        downloader = nil\n        session = nil\n        service = nil\n    }\n\n    func test_bundledResource() async throws {\n        // Given\n        ReadingPreferences.shared.reading = .hafs_1405\n        // Assume all reading directories exist.\n        fileManager.files = Set(Reading.allReadings.compactMap {\n            remoteResources.resource(for: $0)?.downloadDestination.url\n        })\n\n        // Test\n        await service.startLoadingResources()\n        await finishLoadingNoDownload()\n\n        // Then\n        XCTAssertEqual(collector.items, [.ready])\n        XCTAssertEqual(fileManager.files, []) // Delete other readings directories\n    }\n\n    func test_bundledResourceDeletesPreviouslyDownloadedReadingResources() async throws {\n        // Given\n        ReadingPreferences.shared.reading = .hafs_1405\n        let downloadedReadingDirectory = try XCTUnwrap(remoteResources.resource(for: .hafs_1441)?.downloadDestination.url)\n        fileManager.files = [downloadedReadingDirectory]\n\n        // Test\n        await service.startLoadingResources()\n        await finishLoadingNoDownload()\n\n        // Then\n        XCTAssertEqual(collector.items, [.ready])\n        XCTAssertEqual(fileManager.files, [])\n    }\n\n    func test_resourceDownloadedWhenExtractedVersionFileExistsAndPreviousSuccessFileExists() async throws {\n        // Given\n        let reading = Reading.tajweed\n        remoteResources.versions[reading] = 2\n        let remoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n        ReadingPreferences.shared.reading = reading\n        fileManager.files = [remoteResource.extractedVersionFileURL, successFileURL(for: remoteResource, version: 1)]\n\n        // Test\n        await service.startLoadingResources()\n        await finishLoadingNoDownload()\n\n        // Then\n        XCTAssertEqual(collector.items, [.ready])\n        XCTAssertFalse(fileManager.removedItems.contains(remoteResource.downloadDestination.url))\n        XCTAssertEqual(zipper.unzippedFiles, [])\n        XCTAssertTrue(fileManager.files.contains(remoteResource.successFilePath.url))\n    }\n\n    func test_remoteResourceIsDownloadedWhenSuccessFileExists() throws {\n        let reading = Reading.hafs_1441\n        remoteResources.versions[reading] = 2\n        let remoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n\n        fileManager.files.insert(remoteResource.successFilePath.url)\n\n        XCTAssertTrue(remoteResource.isDownloaded(fileSystem: fileManager))\n    }\n\n    func test_remoteResourceIsDownloadedWhenExtractedVersionFileExists() throws {\n        let reading = Reading.hafs_1441\n        remoteResources.versions[reading] = 2\n        let remoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n        fileManager.files = [remoteResource.extractedVersionFileURL, successFileURL(for: remoteResource, version: 1)]\n\n        XCTAssertTrue(remoteResource.isDownloaded(fileSystem: fileManager))\n    }\n\n    func test_remoteResourceIsDownloadedWhenExtractedVersionFileExistsAndAnyOlderSuccessFileExists() throws {\n        let reading = Reading.hafs_1441\n        remoteResources.versions[reading] = 7\n        let remoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n        fileManager.files = [remoteResource.extractedVersionFileURL, successFileURL(for: remoteResource, version: 3)]\n\n        XCTAssertTrue(remoteResource.isDownloaded(fileSystem: fileManager))\n    }\n\n    func test_remoteResourceIsNotDownloadedWhenExtractedVersionFileExistsWithoutPreviousSuccessFile() throws {\n        let reading = Reading.hafs_1441\n        remoteResources.versions[reading] = 2\n        let remoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n        fileManager.files = [remoteResource.extractedVersionFileURL]\n\n        XCTAssertFalse(remoteResource.isDownloaded(fileSystem: fileManager))\n    }\n\n    func test_remoteResourceIsNotDownloadedWithoutSuccessFile() throws {\n        let reading = Reading.hafs_1441\n        remoteResources.versions[reading] = 2\n        let remoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n\n        XCTAssertFalse(remoteResource.isDownloaded(fileSystem: fileManager))\n    }\n\n    func test_downloadResourceSuccessfully() async throws {\n        // Given\n        let reading = Reading.hafs_1440\n        let remoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n        ReadingPreferences.shared.reading = reading\n\n        // Test\n        await service.startLoadingResources()\n        try await completeRunningDownload()\n\n        // Then\n        await waitForReady()\n        XCTAssertEqual(collector.items.last, .ready)\n\n        var lastProgress = 0.0\n        for status in collector.items.dropLast() {\n            switch status {\n            case .downloading(let progress):\n                XCTAssertGreaterThanOrEqual(progress, lastProgress)\n                XCTAssertLessThanOrEqual(progress, 1)\n                lastProgress = progress\n            case .ready, .error:\n                XCTFail(\"Unexpected statuses: \\(collector.items)\")\n            }\n        }\n\n        try assertDownloadedFiles(reading)\n        XCTAssertEqual(zipper.unzippedFiles, [remoteResource.zipFile.url])\n    }\n\n    func test_downloadUpgrade() async throws {\n        // Given\n        let reading = Reading.hafs_1440\n        ReadingPreferences.shared.reading = reading\n        remoteResources.versions[reading] = 1\n        let remoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n\n        // Already downloaded\n        fileManager.files.insert(remoteResource.successFilePath.url)\n        await service.startLoadingResources()\n        await finishLoadingNoDownload()\n        XCTAssertEqual(collector.items.last, .ready)\n        collector.items = []\n\n        // Test upgrade\n        remoteResources.versions[reading] = 2\n        await service.retry()\n\n        // Then\n        try await completeRunningDownload(initial: false)\n        XCTAssertEqual(collector.items.last, .ready)\n        try assertDownloadedFiles(reading)\n    }\n\n    func test_downloadUpgrade_skipsRedownloadWhenExtractedVersionFileExists() async throws {\n        // Given\n        let reading = Reading.hafs_1440\n        ReadingPreferences.shared.reading = reading\n        remoteResources.versions[reading] = 1\n        let initialRemoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n\n        fileManager.files.insert(initialRemoteResource.successFilePath.url)\n        await service.startLoadingResources()\n        await finishLoadingNoDownload()\n        XCTAssertEqual(collector.items.last, .ready)\n        collector.items = []\n\n        // Test upgrade\n        remoteResources.versions[reading] = 2\n        let upgradedRemoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n        fileManager.files.insert(upgradedRemoteResource.extractedVersionFileURL)\n        await service.retry()\n        await finishLoadingNoDownload(initial: false)\n\n        // Then\n        XCTAssertEqual(collector.items.last, .ready)\n        XCTAssertFalse(fileManager.removedItems.contains(upgradedRemoteResource.downloadDestination.url))\n        XCTAssertEqual(zipper.unzippedFiles, [])\n        XCTAssertTrue(fileManager.files.contains(upgradedRemoteResource.successFilePath.url))\n    }\n\n    func test_downloadUpgrade_skipsRedownloadWhenExtractedVersionFileExistsAndOlderSuccessFileExists() async throws {\n        // Given\n        let reading = Reading.hafs_1440\n        ReadingPreferences.shared.reading = reading\n        remoteResources.versions[reading] = 3\n        let initialRemoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n\n        fileManager.files.insert(initialRemoteResource.successFilePath.url)\n        await service.startLoadingResources()\n        await finishLoadingNoDownload()\n        XCTAssertEqual(collector.items.last, .ready)\n        collector.items = []\n\n        // Test upgrade\n        remoteResources.versions[reading] = 7\n        let upgradedRemoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n        fileManager.files.insert(upgradedRemoteResource.extractedVersionFileURL)\n        await service.retry()\n        await finishLoadingNoDownload(initial: false)\n\n        // Then\n        XCTAssertEqual(collector.items.last, .ready)\n        XCTAssertFalse(fileManager.removedItems.contains(upgradedRemoteResource.downloadDestination.url))\n        XCTAssertEqual(zipper.unzippedFiles, [])\n        XCTAssertTrue(fileManager.files.contains(upgradedRemoteResource.successFilePath.url))\n    }\n\n    func test_downloadResource_redownloadsWhenExtractedVersionFileExistsWithoutPreviousSuccessFile() async throws {\n        // Given\n        let reading = Reading.hafs_1440\n        ReadingPreferences.shared.reading = reading\n        remoteResources.versions[reading] = 2\n        let remoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n        fileManager.files = [remoteResource.extractedVersionFileURL]\n\n        // Test\n        await service.startLoadingResources()\n        try await completeRunningDownload()\n\n        // Then\n        await waitForReady()\n        XCTAssertEqual(collector.items.last, .ready)\n        XCTAssertEqual(zipper.unzippedFiles, [remoteResource.zipFile.url])\n        try assertDownloadedFiles(reading)\n    }\n\n    func test_downloadUpgrade_doesNotSkipForWrongExtractedVersionFile() async throws {\n        // Given\n        let reading = Reading.hafs_1440\n        ReadingPreferences.shared.reading = reading\n        remoteResources.versions[reading] = 2\n        let remoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n        let wrongVersionMarker = remoteResource.downloadDestination\n            .appendingPathComponent(\"images_1352\", isDirectory: true)\n            .appendingPathComponent(\"width_1352\", isDirectory: true)\n            .appendingPathComponent(\".v1\", isDirectory: false)\n        fileManager.files = [remoteResource.downloadDestination.url, wrongVersionMarker.url]\n\n        // Test\n        await service.startLoadingResources()\n        try await completeRunningDownload()\n\n        // Then\n        await waitForReady()\n        XCTAssertEqual(collector.items.last, .ready)\n        XCTAssertEqual(zipper.unzippedFiles, [remoteResource.zipFile.url])\n        try assertDownloadedFiles(reading)\n    }\n\n    func test_downloadResource_failedUnzip() async throws {\n        // Given\n        let reading = Reading.hafs_1440\n        ReadingPreferences.shared.reading = reading\n        let remoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n        let error = FileSystemError.noDiskSpace\n        zipper.failures = [error]\n\n        // Test\n        await service.startLoadingResources()\n        try await completeRunningDownload()\n\n        // Then\n        XCTAssertEqual(collector.items.last, .error(error as NSError))\n        XCTAssertEqual(fileManager.files, [remoteResource.downloadDestination.url])\n\n        // Retry should fix it\n        await service.retry()\n        try await completeRunningDownload(initial: false)\n        XCTAssertEqual(collector.items.last, .ready)\n        try assertDownloadedFiles(reading)\n    }\n\n    func test_downloadFailure() async throws {\n        // Given\n        let error = NetworkError.notConnectedToInternet\n        let reading = Reading.tajweed\n        let remoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n        ReadingPreferences.shared.reading = reading\n\n        fileManager.files = [\n            // Old resources to delete\n            remoteResource.downloadDestination.url,\n        ]\n\n        // Test\n        await service.startLoadingResources()\n        try await failRunningDownload(error)\n\n        // Then\n        XCTAssertEqual(collector.items.last, .error(error as NSError))\n        XCTAssertEqual(fileManager.files, [])\n        XCTAssertEqual(zipper.unzippedFiles, [])\n    }\n\n    func test_switch_bundleToRemote() async throws {\n        // Given: Start with bundled reading\n        let firstReading = Reading.hafs_1405\n        ReadingPreferences.shared.reading = firstReading\n\n        // Test: Complete the first reading.\n        await service.startLoadingResources()\n        await finishLoadingNoDownload()\n\n        // Then\n        XCTAssertEqual(collector.items.last, .ready)\n        collector.items = []\n        XCTAssertEqual(fileManager.files, []) // No files since it's bundled\n\n        // Given: Switch to remote\n        let secondReading = Reading.hafs_1421\n        ReadingPreferences.shared.reading = secondReading\n\n        // Test\n        try await completeRunningDownload(initial: false)\n\n        // Then\n        XCTAssertEqual(collector.items.last, .ready)\n        try assertDownloadedFiles(secondReading)\n    }\n\n    func test_switch_remoteToBundle() async throws {\n        // Given: Start with remote resource\n        let firstReading = Reading.tajweed\n        ReadingPreferences.shared.reading = firstReading\n\n        // Test: Complete the first reading.\n        await service.startLoadingResources()\n        try await completeRunningDownload(initial: true)\n\n        // Then\n        XCTAssertEqual(collector.items.last, .ready)\n        collector.items = []\n        try assertDownloadedFiles(firstReading)\n\n        // Given: Switch to bundled\n        let secondReading = Reading.hafs_1405\n        ReadingPreferences.shared.reading = secondReading\n\n        // Test\n        await finishLoadingNoDownload(initial: false)\n\n        // Then\n        XCTAssertEqual(collector.items.last, .ready)\n        XCTAssertEqual(fileManager.files, []) // No files since it's bundled\n    }\n\n    func test_switch_remoteToRemote_cancelFirstDownload() async throws {\n        // Given: Start with remote resource\n        let firstReading = Reading.hafs_1440\n        ReadingPreferences.shared.reading = firstReading\n        await service.startLoadingResources()\n        let firstDownload = try await runningDownload()\n\n        // Given: Switch to bundled\n        let secondReading = Reading.tajweed\n        ReadingPreferences.shared.reading = secondReading\n\n        // Test\n        try await completeRunningDownload(initial: false)\n\n        // Then\n        XCTAssertTrue(firstDownload.isCancelled)\n        await waitForReady()\n        try assertDownloadedFiles(secondReading)\n    }\n\n    // MARK: Private\n\n    private var service: ReadingResourcesService!\n    private var collector: PublisherCollector<ReadingResourcesService.ResourceStatus>!\n    private var remoteResources: ReadingRemoteResourcesFake!\n    private var downloader: DownloadManager!\n    private var downloadsObserver: AsyncChannel<SessionTask>!\n    private var session: NetworkSessionFake!\n    private var testContext: BatchDownloaderTestContext!\n    private var zipper: ZipperFake!\n    private var fileManager: FileSystemFake!\n    private var preferenceLoadingCompleted: AsyncChannelEventObserver!\n    private var preferencesObservingStarted: AsyncChannelEventObserver!\n    private var testScheduler: AnySchedulerOf<DispatchQueue>!\n    private let downloadURL = URL(validURL: \"https://quran.com/xyz.zip\")\n\n    private func runningDownload(initial: Bool = true) async throws -> SessionTask {\n        if initial {\n            await preferencesObservingStarted.waitForNextEvent()\n        }\n        let nextDownload = await downloadsObserver.next()\n        return try XCTUnwrap(nextDownload)\n    }\n\n    private func completeRunningDownload(initial: Bool = true) async throws {\n        let download = try await runningDownload(initial: initial)\n        fileManager.files.insert(downloadURL)\n        await session.completeDownloadTask(\n            download,\n            location: downloadURL,\n            totalBytes: 100,\n            progressLoops: 1\n        )\n        await preferenceLoadingCompleted.waitForNextEvent()\n    }\n\n    private func failRunningDownload(_ error: Error) async throws {\n        await preferencesObservingStarted.waitForNextEvent()\n        let nextDownload = await downloadsObserver.next()\n        let download = try XCTUnwrap(nextDownload)\n        session.failDownloadTask(download, error: error)\n        await preferenceLoadingCompleted.waitForNextEvent()\n    }\n\n    private func finishLoadingNoDownload(initial: Bool = true) async {\n        if initial {\n            await preferencesObservingStarted.waitForNextEvent()\n        }\n        await preferenceLoadingCompleted.waitForNextEvent()\n    }\n\n    private func assertDownloadedFiles(\n        _ reading: Reading,\n        file: StaticString = #filePath, line: UInt = #line\n    ) throws {\n        let remoteResource = try XCTUnwrap(remoteResources.resource(for: reading))\n        var downloadedFiles: Set<URL> = [remoteResource.successFilePath.url,\n                                         remoteResource.downloadDestination.url]\n        downloadedFiles.formUnion(zipper.zipContents(remoteResource.zipFile.url))\n        XCTAssertEqual(fileManager.files, downloadedFiles, file: file, line: line)\n    }\n\n    private func successFileURL(for remoteResource: RemoteResource, version: Int) -> URL {\n        remoteResource.downloadDestination\n            .appendingPathComponent(\"success-v\\(version).txt\", isDirectory: false)\n            .url\n    }\n\n    private func waitForReady(file: StaticString = #filePath, line: UInt = #line) async {\n        for _ in 0 ..< 10 {\n            if collector.items.last == .ready {\n                return\n            }\n            await Task.megaYield()\n        }\n        XCTAssertEqual(collector.items.last, .ready, file: file, line: line)\n    }\n}\n"
  },
  {
    "path": "Domain/ReciterService/Sources/AudioFileListRetriever.swift",
    "content": "//\n//  AudioFileListRetriever.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/17/17.\n//\n\nimport Foundation\nimport QuranAudio\nimport QuranKit\nimport Utilities\n\npublic struct ReciterAudioFile: Sendable, Hashable {\n    public var remote: URL\n    public var local: RelativeFilePath\n    public var sura: Sura? = nil\n}\n\nprivate protocol AudioFileListRetriever {\n    func get(for reciter: Reciter, from start: AyahNumber, to end: AyahNumber) -> [ReciterAudioFile]\n}\n\nprivate struct GaplessAudioFileListRetriever: AudioFileListRetriever {\n    let baseURL: URL\n\n    func get(for reciter: Reciter, from start: AyahNumber, to end: AyahNumber) -> [ReciterAudioFile] {\n        guard let databaseRemoteURL = reciter.databaseRemoteURL(baseURL: baseURL),\n              let localDatabasePath = reciter.localZipPath\n        else {\n            fatalError(\"Unsupported reciter type gapped. Only gapless reciters can be downloaded here.\")\n        }\n\n        let dbFile = ReciterAudioFile(remote: databaseRemoteURL, local: localDatabasePath)\n\n        // loop over the files\n        var files = Set<ReciterAudioFile>()\n\n        for sura in start.sura.array(to: end.sura) {\n            let remoteURL = reciter.remoteURL(sura: sura)\n            let localPath = reciter.localURL(sura: sura)\n            files.insert(ReciterAudioFile(remote: remoteURL, local: localPath, sura: sura))\n        }\n        return Array(files) + [dbFile]\n    }\n}\n\nprivate struct GappedAudioFileListRetriever: AudioFileListRetriever {\n    // MARK: Internal\n\n    func get(for reciter: Reciter, from start: AyahNumber, to end: AyahNumber) -> [ReciterAudioFile] {\n        guard case AudioType.gapped = reciter.audioType else {\n            fatalError(\"Unsupported reciter type gapless. Only gapless reciters can be downloaded here.\")\n        }\n\n        var files = Set<ReciterAudioFile>()\n\n        // add besm Allah for all gapped audio\n        files.insert(createRequestInfo(reciter: reciter, ayah: start.quran.firstVerse))\n\n        for ayah in start.array(to: end) {\n            files.insert(createRequestInfo(reciter: reciter, ayah: ayah))\n        }\n        return Array(files)\n    }\n\n    // MARK: Private\n\n    private func createRequestInfo(reciter: Reciter, ayah: AyahNumber) -> ReciterAudioFile {\n        let remoteURL = reciter.remoteURL(ayah: ayah)\n        let localURL = reciter.localURL(ayah: ayah)\n        return ReciterAudioFile(remote: remoteURL, local: localURL, sura: ayah.sura)\n    }\n}\n\nextension Reciter {\n    public func audioFiles(baseURL: URL, from: AyahNumber, to: AyahNumber) -> [ReciterAudioFile] {\n        let retriever = retriever(baseURL: baseURL)\n        return retriever.get(for: self, from: from, to: to)\n    }\n\n    private func retriever(baseURL: URL) -> AudioFileListRetriever {\n        switch audioType {\n        case .gapped: return GappedAudioFileListRetriever()\n        case .gapless: return GaplessAudioFileListRetriever(baseURL: baseURL)\n        }\n    }\n}\n"
  },
  {
    "path": "Domain/ReciterService/Sources/AudioUnzipper.swift",
    "content": "//\n//  AudioUnzipper.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/28/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport Crashing\nimport Foundation\nimport QuranAudio\nimport VLogging\nimport Zip\n\npublic struct AudioUnzipper {\n    // MARK: Lifecycle\n\n    public init() {\n    }\n\n    // MARK: Public\n\n    public func unzip(reciter: Reciter) async throws {\n        guard let dbFile = reciter.localDatabasePath?.url, let zipFile = reciter.localZipPath?.url else {\n            return\n        }\n\n        guard !dbFile.isReachable else {\n            return\n        }\n\n        logger.info(\"Unzipping audio file. Reciter=\\(reciter.nameKey) file=\\(zipFile).\")\n        do {\n            try Zip.unzipFile(zipFile, destination: reciter.localFolder().url, overwrite: true, password: nil, progress: nil)\n        } catch {\n            crasher.recordError(error, reason: \"Cannot unzip file '\\(zipFile)' to '\\(reciter.localFolder())'\")\n            // delete the zip and try to re-download it again, next time.\n            try? FileManager.default.removeItem(at: zipFile)\n            throw error\n        }\n    }\n}\n"
  },
  {
    "path": "Domain/ReciterService/Sources/DownloadedRecitersService.swift",
    "content": "//\n//  DownloadedRecitersService.swift\n//\n//\n//  Created by Zubair Khan on 12/31/22.\n//\n\nimport Foundation\nimport QuranAudio\n\npublic class DownloadedRecitersService {\n    // MARK: Lifecycle\n\n    public init() {\n    }\n\n    // MARK: Public\n\n    public func downloadedReciters(_ allReciters: [Reciter]) -> [Reciter] {\n        guard let downloadedRecitersURLs = try? FileManager.default.contentsOfDirectory(\n            at: Reciter.audioFiles.url,\n            includingPropertiesForKeys: nil\n        ) else {\n            return []\n        }\n\n        var downloadedReciters: [Reciter] = []\n        for reciter in allReciters {\n            for downloadedReciterURL in downloadedRecitersURLs {\n                if isDownloadedReciter(reciter, at: downloadedReciterURL) {\n                    downloadedReciters.append(reciter)\n                }\n            }\n        }\n        return downloadedReciters\n    }\n\n    // MARK: Private\n\n    private func isDownloadedReciter(_ reciter: Reciter, at downloadedReciterURL: URL) -> Bool {\n        if reciter.isReciterDirectory(downloadedReciterURL) {\n            // ensure the reciter's directory is not empty and has some downloads\n            if let reciterDirContents = try? FileManager.default.contentsOfDirectory(\n                at: downloadedReciterURL,\n                includingPropertiesForKeys: nil\n            ) {\n                if !reciterDirContents.isEmpty {\n                    return true\n                }\n            }\n        }\n        return false\n    }\n}\n"
  },
  {
    "path": "Domain/ReciterService/Sources/RecentRecitersService.swift",
    "content": "//\n//  RecentRecitersService.swift\n//\n//\n//  Created by Zubair Khan on 12/6/22.\n//\n\nimport QuranAudio\n\npublic class RecentRecitersService {\n    // MARK: Lifecycle\n\n    public init() {\n    }\n\n    // MARK: Public\n\n    public func recentReciters(_ allReciters: [Reciter]) -> [Reciter] {\n        var recentReciters: [Reciter] = []\n        for recentReciterId in preferences.recentReciterIds {\n            if let recentReciter = allReciters.first(where: { $0.id == recentReciterId }) {\n                recentReciters.append(recentReciter)\n            }\n        }\n        recentReciters.reverse()\n        return recentReciters\n    }\n\n    public func updateRecentRecitersList(_ reciter: Reciter) {\n        var recentReciterIds = preferences.recentReciterIds\n\n        // Remove from the set if it exists in the set so it can go to the front (recently selected)\n        recentReciterIds.remove(reciter.id)\n\n        // Remove the least recently selected reciter if the list contains max reciters\n        if !recentReciterIds.isEmpty && recentReciterIds.count >= Self.maxNumOfRecentReciters {\n            recentReciterIds.remove(at: 0)\n        }\n        recentReciterIds.append(reciter.id)\n\n        preferences.recentReciterIds = recentReciterIds\n    }\n\n    // MARK: Private\n\n    private static let maxNumOfRecentReciters: Int = 3\n\n    private let preferences = ReciterPreferences.shared\n}\n"
  },
  {
    "path": "Domain/ReciterService/Sources/Reciter+Localization.swift",
    "content": "//\n//  Reciter+Localization.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-04.\n//\n\nimport Localization\nimport QuranAudio\n\nextension Reciter {\n    public var localizedName: String {\n        l(nameKey, table: .readers)\n    }\n}\n"
  },
  {
    "path": "Domain/ReciterService/Sources/ReciterAudioDeleter.swift",
    "content": "//\n//  ReciterAudioDeleter.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/23/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\nimport QuranAudio\n\npublic struct ReciterAudioDeleter: Sendable {\n    // MARK: Lifecycle\n\n    public init() {\n    }\n\n    // MARK: Public\n\n    public func deleteAudioFiles(for reciter: Reciter) async throws {\n        try FileManager.default.removeItem(at: reciter.localFolder().url)\n    }\n}\n"
  },
  {
    "path": "Domain/ReciterService/Sources/ReciterDataRetriever.swift",
    "content": "//\n//  ReciterDataRetriever.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/27/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\nimport QuranAudio\nimport SystemDependencies\nimport Utilities\n\npublic struct ReciterDataRetriever: Sendable {\n    // MARK: Lifecycle\n\n    public init(bundle: SystemBundle = DefaultSystemBundle()) {\n        self.bundle = bundle\n    }\n\n    // MARK: Public\n\n    public func getReciters() async -> [Reciter] {\n        let array = bundle.readArray(resource: \"reciters\", withExtension: \"plist\")\n        // swiftlint:disable force_cast\n        let recitersArray = array as! [NSDictionary]\n        let reciters: [Reciter] = recitersArray.map { item in\n            Reciter(\n                id: item[\"id\"] as! Int,\n                nameKey: item[\"name\"] as! String,\n                directory: item[\"path\"] as! String,\n                audioURL: URL(validURL: item[\"url\"] as! String),\n                audioType: Self.audioType(item[\"databaseName\"] as! String),\n                hasGaplessAlternative: item[\"hasGaplessAlternative\"] as! Bool,\n                category: Reciter.Category(rawValue: item[\"category\"] as! String)!\n            )\n        }\n        // swiftlint:enable force_cast\n\n        return reciters.filter { reciter in\n            !reciter.hasGaplessAlternative || reciter.localFolder().isReachable\n        }\n        .sorted {\n            $0.localizedName.localizedCaseInsensitiveCompare($1.localizedName) == .orderedAscending\n        }\n    }\n\n    // MARK: Private\n\n    private let bundle: SystemBundle\n\n    private static func audioType(_ db: String) -> AudioType {\n        if db.isEmpty {\n            return .gapped\n        }\n        return .gapless(databaseName: db)\n    }\n}\n"
  },
  {
    "path": "Domain/ReciterService/Sources/ReciterPreferences.swift",
    "content": "//\n//  ReciterPreferences.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-04.\n//\n\nimport OrderedCollections\nimport Preferences\n\npublic class ReciterPreferences {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Public\n\n    public static let shared = ReciterPreferences()\n\n    @Preference(lastSelectedReciterId)\n    public var lastSelectedReciterId: Int\n\n    @TransformedPreference(recentReciterIds, transformer: recentReciterIdsTransfomer)\n    public var recentReciterIds: OrderedSet<Int>\n\n    public func reset() {\n        Preferences.shared.removeValueForKey(Self.lastSelectedReciterId)\n        Preferences.shared.removeValueForKey(Self.recentReciterIds)\n    }\n\n    // MARK: Private\n\n    private static let lastSelectedReciterId = PreferenceKey<Int>(key: \"LastSelectedQariId\", defaultValue: 1)\n    private static let recentReciterIds = PreferenceKey<[Int]>(key: \"recentRecitersIdsKey\", defaultValue: [])\n    private static let recentReciterIdsTransfomer = PreferenceTransformer<[Int], OrderedSet<Int>>(\n        rawToValue: { OrderedSet($0) },\n        valueToRaw: { Array($0) }\n    )\n}\n"
  },
  {
    "path": "Domain/ReciterService/Sources/ReciterSizeInfoRetriever.swift",
    "content": "//\n//  ReciterSizeInfoRetriever.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/17/17.\n//\n\nimport Foundation\nimport QuranAudio\nimport QuranKit\nimport SystemDependencies\nimport VLogging\n\npublic struct ReciterSizeInfoRetriever: Sendable {\n    // MARK: Lifecycle\n\n    public init(baseURL: URL) {\n        self.init(baseURL: baseURL, fileSystem: DefaultFileSystem())\n    }\n\n    public init(baseURL: URL, fileSystem: FileSystem = DefaultFileSystem()) {\n        self.baseURL = baseURL\n        self.fileSystem = fileSystem\n    }\n\n    // MARK: Public\n\n    public func getDownloadedSizes(for reciters: [Reciter], quran: Quran) async -> [Reciter: AudioDownloadedSize] {\n        await withTaskGroup(of: (Reciter, AudioDownloadedSize).self) { group in\n            for reciter in reciters {\n                group.addTask {\n                    (reciter, await getDownloadedSize(for: reciter, quran: quran))\n                }\n            }\n\n            var downloads: [Reciter: AudioDownloadedSize] = [:]\n            for await download in group {\n                downloads[download.0] = download.1\n            }\n            return downloads\n        }\n    }\n\n    public func getDownloadedSize(for reciter: Reciter, quran: Quran) async -> AudioDownloadedSize {\n        let fileList = reciter.audioFiles(baseURL: baseURL, from: quran.firstVerse, to: quran.lastVerse)\n\n        guard let fileURLs = try? fileSystem.contentsOfDirectory(at: reciter.localFolder().url, includingPropertiesForKeys: [.fileSizeKey]) else {\n            return .zero(quran: quran)\n        }\n\n        // sum the sizes of downloaded files\n        let sizeInBytes = sizeInBytes(of: fileURLs)\n\n        // remove suras that we didn't find dowonloaded files for\n        let fileURLPaths = Set(fileURLs.map(\\.lastPathComponent))\n        let fileListsNotDownloaded = fileList.filter { !fileURLPaths.contains($0.local.lastPathComponent) }\n        var suras = Set(quran.suras)\n        for file in fileListsNotDownloaded {\n            // remove the suras from being downloaded.\n            // For gapless, that's enough.\n            // for gapped, we consider if one ayah is not downloaded that the entire sura is not downloaded.\n            if let sura = file.sura {\n                suras.remove(sura)\n            }\n        }\n\n        return AudioDownloadedSize(\n            downloadedSizeInBytes: sizeInBytes,\n            downloadedSuraCount: suras.count,\n            surasCount: quran.suras.count\n        )\n    }\n\n    // MARK: Internal\n\n    let baseURL: URL\n    let fileSystem: FileSystem\n\n    // MARK: Private\n\n    private func sizeInBytes(of fileURLs: [URL]) -> UInt64 {\n        var sizeInBytes: UInt64 = 0\n        for fileURL in fileURLs {\n            do {\n                let resourceValues = try fileSystem.resourceValues(at: fileURL, forKeys: Set([.fileSizeKey]))\n                sizeInBytes += UInt64(resourceValues.fileSize ?? 0)\n            } catch {\n                logger.error(\"Unexpected error while getting resourceValues. Error: \\(error)\")\n            }\n        }\n        return sizeInBytes\n    }\n}\n"
  },
  {
    "path": "Domain/ReciterService/Tests/DownloadedRecitersServiceTests.swift",
    "content": "//\n//  DownloadedRecitersServiceTests.swift\n//\n//\n//  Created by Zubair Khan on 1/2/23.\n//\n\nimport Foundation\nimport QuranAudio\nimport SystemDependencies\nimport XCTest\n@testable import ReciterService\n\nclass DownloadedRecitersServiceTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUpWithError() throws {\n        service = DownloadedRecitersService()\n    }\n\n    func testFilterDownloadedReciters() {\n        let reciter1 = createReciter(id: 1)\n        let reciter2 = createReciter(id: 2)\n        let reciter3 = createReciter(id: 3)\n        let reciter4 = createReciter(id: 4)\n        let reciter5 = createReciter(id: 5)\n        let allReciters = Array(arrayLiteral: reciter1, reciter2, reciter3, reciter4, reciter5)\n\n        // Cleanup existing directories\n        deleteReciterDirs(allReciters)\n\n        // Should return empty list when no downloads exist\n        var downloadedReciters = service.downloadedReciters(allReciters)\n        XCTAssertEqual(downloadedReciters, [])\n\n        createReciterDir(reciter2)\n        createReciterDir(reciter4)\n        createReciterDir(reciter5)\n\n        // Reciter2's directory will be empty, therefore it shouldn't be considered a downloaded reciter\n        createReciterFile(reciter4)\n        createReciterFile(reciter5)\n\n        downloadedReciters = service.downloadedReciters(allReciters)\n        XCTAssertEqual(downloadedReciters, [reciter4, reciter5])\n    }\n\n    // MARK: Private\n\n    private var service: DownloadedRecitersService!\n    private var fileManager = DefaultFileSystem()\n\n    private func deleteReciterDirs(_ reciters: [Reciter]) {\n        for reciter in reciters {\n            try? fileManager.removeItem(at: reciter.localFolder())\n        }\n    }\n\n    private func createReciterDir(_ reciter: Reciter) {\n        try? fileManager.createDirectory(at: reciter.localFolder(), withIntermediateDirectories: true)\n    }\n\n    private func createReciterFile(_ reciter: Reciter) {\n        let fileURL = reciter.localFolder().appendingPathComponent(\"surah1\", isDirectory: false)\n        try? \"testing123\".write(to: fileURL, atomically: true, encoding: .utf8)\n    }\n\n    private func createReciter(id: Int) -> Reciter {\n        let name = \"reciter\" + String(id)\n        return Reciter(\n            id: id,\n            nameKey: name,\n            directory: String(id),\n            audioURL: URL(validURL: \"http://example.com\"),\n            audioType: .gapless(databaseName: name),\n            hasGaplessAlternative: false,\n            category: .arabic\n        )\n    }\n}\n"
  },
  {
    "path": "Domain/ReciterService/Tests/RecentRecitersServiceTests.swift",
    "content": "//\n//  RecentRecitersServiceTests.swift\n//\n//\n//  Created by Zubair Khan on 12/5/22.\n//\n\nimport Foundation\nimport QuranAudio\nimport XCTest\n@testable import ReciterService\n\nclass RecentRecitersServiceTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUpWithError() throws {\n        service = RecentRecitersService()\n        ReciterPreferences.shared.reset()\n    }\n\n    func testRecentReciters() {\n        let reciter1 = createReciter(id: 1)\n        let reciter2 = createReciter(id: 2)\n        let reciter3 = createReciter(id: 3)\n        let reciter4 = createReciter(id: 4)\n        let reciter5 = createReciter(id: 5)\n        let invalidReciter = createReciter(id: 6)\n\n        let allReciters: [Reciter] = Array(arrayLiteral: reciter1, reciter2, reciter3, reciter4, reciter5)\n\n        // Test empty reciters list is returned when none are added\n        XCTAssertEqual(getRecentRecitersIds(allReciters), [])\n\n        // Edge case: if recentReciterIds ends up with an ID that's not present in allReciters\n        service.updateRecentRecitersList(invalidReciter)\n        XCTAssertEqual(getRecentRecitersIds(allReciters), [])\n\n        // Add one reciter\n        service.updateRecentRecitersList(reciter1)\n        XCTAssertEqual(getRecentRecitersIds(allReciters), [1])\n\n        // Add two more reciters\n        service.updateRecentRecitersList(reciter2)\n        service.updateRecentRecitersList(reciter3)\n        XCTAssertEqual(getRecentRecitersIds(allReciters), [3, 2, 1])\n\n        // Add one more and make sure we do not exceed more than 3 recent reciters\n        service.updateRecentRecitersList(reciter4)\n        XCTAssertEqual(getRecentRecitersIds(allReciters), [4, 3, 2])\n\n        // make reciter3 be the most recent\n        service.updateRecentRecitersList(reciter3)\n        XCTAssertEqual(getRecentRecitersIds(allReciters), [3, 4, 2])\n\n        // repeatedly selecting the same reciter should not remove others\n        service.updateRecentRecitersList(reciter4)\n        service.updateRecentRecitersList(reciter4)\n        service.updateRecentRecitersList(reciter4)\n        XCTAssertEqual(getRecentRecitersIds(allReciters), [4, 3, 2])\n    }\n\n    // MARK: Private\n\n    private var service: RecentRecitersService!\n\n    private func getRecentRecitersIds(_ allReciters: [Reciter]) -> [Int] {\n        service.recentReciters(allReciters).map(\\.id)\n    }\n\n    private func createReciter(id: Int) -> Reciter {\n        let name: String = \"reciter\" + String(id)\n        return Reciter(\n            id: id,\n            nameKey: name,\n            directory: \"dir\",\n            audioURL: URL(validURL: \"http://example.com\"),\n            audioType: .gapless(databaseName: name),\n            hasGaplessAlternative: false,\n            category: .arabic\n        )\n    }\n}\n"
  },
  {
    "path": "Domain/ReciterService/Tests/ReciterSizeInfoRetrieverTests.swift",
    "content": "//\n//  ReciterSizeInfoRetrieverTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-14.\n//\n\nimport QuranKit\nimport ReciterServiceFake\nimport SystemDependenciesFake\nimport XCTest\n@testable import QuranAudio\n@testable import ReciterService\n\nclass ReciterSizeInfoRetrieverTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUp() async throws {\n        fileSystem = FileSystemFake()\n        service = ReciterSizeInfoRetriever(baseURL: baseURL, fileSystem: fileSystem)\n    }\n\n    // MARK: - No Download\n\n    func test_bothRecitersInitiallyNoDownloads() async throws {\n        try await runNoDownloadsTest([gappedReciter, gaplessReciter])\n    }\n\n    func test_gappedInitiallyNoDownloads() async throws {\n        try await runNoDownloadsTest([gappedReciter])\n    }\n\n    func test_gaplessInitiallyNoDownloads() async throws {\n        try await runNoDownloadsTest([gaplessReciter])\n    }\n\n    // MARK: - Fully Downloaded\n\n    func test_gappedFullyDownloaded() async throws {\n        try await runFullDownloadedTest([gappedReciter])\n    }\n\n    func test_gaplessFullyDownloaded() async throws {\n        try await runFullDownloadedTest([gaplessReciter])\n    }\n\n    func test_bothRecitersFullyDownloaded() async throws {\n        try await runFullDownloadedTest([gaplessReciter, gappedReciter])\n    }\n\n    // MARK: - Partial Downloaded Gapped\n\n    func test_gappedSingleSuraDownloaded() async throws {\n        let firstSuraAyahs = quran.suras[0].verses\n        try await runPartialDownloadedGappedTest(\n            ayahs: firstSuraAyahs,\n            downloadedSuraCount: 1\n        )\n        try await runPartialDownloadedGappedTest(\n            ayahs: firstSuraAyahs.dropLast(),\n            downloadedSuraCount: 0\n        )\n    }\n\n    // MARK: - Partial Downloaded Gapless\n\n    func test_gaplessSingleSuraDownloaded() async throws {\n        try await runPartialDownloadedGaplessTest(\n            suras: [quran.suras[0]],\n            dbDownloaded: true,\n            downloadedSuraCount: 1\n        )\n        try await runPartialDownloadedGaplessTest(\n            suras: [quran.suras[0]],\n            dbDownloaded: false,\n            downloadedSuraCount: 1\n        )\n        try await runPartialDownloadedGaplessTest(\n            suras: [],\n            dbDownloaded: true,\n            downloadedSuraCount: 0\n        )\n        try await runPartialDownloadedGaplessTest(\n            suras: quran.suras,\n            dbDownloaded: true,\n            downloadedSuraCount: quran.suras.count\n        )\n    }\n\n    // MARK: Private\n\n    private var service: ReciterSizeInfoRetriever!\n    private var fileSystem: FileSystemFake!\n\n    private let baseURL = URL(validURL: \"http://example.com\")\n\n    private let quran = Quran.hafsMadani1405\n    private let gappedReciter: Reciter = .gappedReciter\n    private let gaplessReciter: Reciter = .gaplessReciter\n\n    private func runNoDownloadsTest(\n        _ reciters: [Reciter],\n        file: StaticString = #filePath,\n        line: UInt = #line\n    ) async throws {\n        let sizeInfo = await service.getDownloadedSizes(for: reciters, quran: quran)\n\n        let expectedDownloads = reciters.map { reciter in\n            (reciter, AudioDownloadedSize.zero(quran: quran))\n        }\n        XCTAssertEqual(sizeInfo, expectedDownloads.toDictionary(), file: file, line: line)\n    }\n\n    private func runFullDownloadedTest(\n        _ reciters: [Reciter],\n        file: StaticString = #filePath,\n        line: UInt = #line\n    ) async throws {\n        let expectedDownloads = reciters.map { reciter in (reciter, simulateAllFilesDownloaded(reciter)) }\n\n        let sizeInfo = await service.getDownloadedSizes(for: reciters, quran: quran)\n        XCTAssertEqual(sizeInfo, expectedDownloads.toDictionary(), file: file, line: line)\n    }\n\n    private func simulateAllFilesDownloaded(_ reciter: Reciter, fileSize: Int = 100) -> AudioDownloadedSize {\n        let files = reciter.audioFiles(baseURL: baseURL, from: quran.firstVerse, to: quran.lastVerse)\n\n        let directory = reciter.localFolder()\n        let fileURLs = files.map(\\.local)\n        fileSystem.filesInDirectory[directory.url] = fileURLs.map(\\.url)\n        fileURLs.forEach { fileSystem.setResourceValues($0.url, fileSize: fileSize) }\n\n        return AudioDownloadedSize(\n            downloadedSizeInBytes: UInt64(fileSize * files.count),\n            downloadedSuraCount: quran.suras.count,\n            surasCount: quran.suras.count\n        )\n    }\n\n    private func runPartialDownloadedGappedTest(\n        ayahs: [AyahNumber],\n        fileSize: Int = 100,\n        downloadedSuraCount: Int,\n        file: StaticString = #filePath, line: UInt = #line\n    ) async throws {\n        let reciter = gappedReciter\n        let files = ayahs.map { ayah in\n            reciter.localFolder()\n                .appendingPathComponent(ayah.sura.suraNumber.as3DigitString() + ayah.ayah.as3DigitString(), isDirectory: true)\n                .appendingPathExtension(\"mp3\")\n        }\n\n        let directory = reciter.localFolder()\n        let fileURLs = files.map(\\.url)\n        fileSystem.filesInDirectory[directory.url] = fileURLs\n        fileURLs.forEach { fileSystem.setResourceValues($0, fileSize: fileSize) }\n\n        let expectedDownload = AudioDownloadedSize(\n            downloadedSizeInBytes: UInt64(fileSize * files.count),\n            downloadedSuraCount: downloadedSuraCount,\n            surasCount: quran.suras.count\n        )\n\n        let sizeInfo = await service.getDownloadedSizes(for: [reciter], quran: quran)\n        XCTAssertEqual(sizeInfo, [reciter: expectedDownload], file: file, line: line)\n    }\n\n    private func runPartialDownloadedGaplessTest(\n        suras: [Sura],\n        dbDownloaded: Bool,\n        fileSize: Int = 100,\n        downloadedSuraCount: Int,\n        file: StaticString = #filePath, line: UInt = #line\n    ) async throws {\n        let reciter = gaplessReciter\n        let dbFiles = dbDownloaded ? [reciter.localFolder().appendingPathComponent(reciter.gaplessDatabaseDB, isDirectory: false)] : []\n        let files = suras.map { sura in\n            reciter.localFolder()\n                .appendingPathComponent(sura.suraNumber.as3DigitString(), isDirectory: true)\n                .appendingPathExtension(\"mp3\")\n        } + dbFiles\n\n        let directory = reciter.localFolder()\n        let fileURLs = files.map(\\.url)\n        fileSystem.filesInDirectory[directory.url] = fileURLs\n        fileURLs.forEach { fileSystem.setResourceValues($0, fileSize: fileSize) }\n\n        let expectedDownload = AudioDownloadedSize(\n            downloadedSizeInBytes: UInt64(fileSize * files.count),\n            downloadedSuraCount: downloadedSuraCount,\n            surasCount: quran.suras.count\n        )\n\n        let sizeInfo = await service.getDownloadedSizes(for: [reciter], quran: quran)\n        XCTAssertEqual(sizeInfo, [reciter: expectedDownload], file: file, line: line)\n    }\n}\n\nprivate extension [(Reciter, AudioDownloadedSize)] {\n    func toDictionary() -> [Reciter: AudioDownloadedSize] {\n        Dictionary(uniqueKeysWithValues: map { ($0.0, $0.1) })\n    }\n}\n"
  },
  {
    "path": "Domain/ReciterServiceFake/Reciter+Fixture.swift",
    "content": "//\n//  Reciter+Fixture.swift\n//\n//\n//  Created by Mohammad Abdurraafay on 2023-02-11.\n//\n\nimport Foundation\n@testable import QuranAudio\n\nextension Reciter {\n    private static let baseURL = URL(validURL: \"http://example.com\")\n    private static let gaplessDatabaseName = \"mishari_alafasy\"\n\n    public static var gappedReciter: Reciter {\n        Reciter(\n            id: 11,\n            nameKey: \"reciter1\",\n            directory: \"reciter1\",\n            audioURL: baseURL.appendingPathComponent(\"reciter1\"),\n            audioType: .gapped,\n            hasGaplessAlternative: false,\n            category: .arabic\n        )\n    }\n\n    public static var gaplessReciter: Reciter {\n        Reciter(\n            id: 22,\n            nameKey: \"qari_afasy_gapless\",\n            directory: \"mishari_alafasy\",\n            audioURL: baseURL.appendingPathComponent(\"mishari_alafasy\"),\n            audioType: .gapless(databaseName: gaplessDatabaseName),\n            hasGaplessAlternative: false,\n            category: .arabic\n        )\n    }\n\n    public func toPlistDictionary() -> [String: Any] {\n        let databaseName: String = switch audioType {\n        case .gapless(let db): db\n        case .gapped: \"\"\n        }\n        return [\n            \"id\": id,\n            \"name\": nameKey,\n            \"path\": directory,\n            \"url\": audioURL.absoluteString,\n            \"databaseName\": databaseName,\n            \"hasGaplessAlternative\": hasGaplessAlternative,\n            \"category\": category.rawValue,\n        ]\n    }\n}\n"
  },
  {
    "path": "Domain/ReciterServiceFake/Reciter+Preparation.swift",
    "content": "//\n//  Reciter+Preparation.swift\n//\n//\n//  Created by Mohammad Abdurraafay on 2023-02-11.\n//\n\nimport Foundation\nimport QuranAudio\nimport SystemDependencies\nimport TestResources\nimport Utilities\nimport Zip\n\nextension Reciter {\n    public var gaplessDatabaseZip: String {\n        guard case .gapless(databaseName: let databaseName) = audioType else { fatalError() }\n        return databaseName + \".zip\"\n    }\n\n    public var gaplessDatabaseDB: String {\n        guard case .gapless(databaseName: let databaseName) = audioType else { fatalError() }\n        return databaseName + \".db\"\n    }\n\n    public var gaplessDatabaseZipPath: RelativeFilePath {\n        localFolder().appendingPathComponent(gaplessDatabaseZip, isDirectory: false)\n    }\n\n    public var gaplessDatabasePath: RelativeFilePath {\n        localFolder().appendingPathComponent(gaplessDatabaseDB, isDirectory: false)\n    }\n\n    public func prepareGaplessReciterForTests(unZip: Bool = false) throws {\n        let directory = localFolder()\n        try DefaultFileSystem().createDirectory(at: directory, withIntermediateDirectories: true)\n        let dbSource = resource(gaplessDatabaseZip)\n        let zipDestination = gaplessDatabaseZipPath\n        try FileManager.default.copyItem(at: dbSource, to: gaplessDatabaseZipPath)\n        if unZip {\n            try Zip.unzipFile(zipDestination.url, destination: directory.url, overwrite: true, password: nil, progress: nil)\n        }\n    }\n\n    public static func cleanUpAudio() {\n        try? FileManager.default.removeItem(at: audioFiles)\n    }\n\n    private func resource(_ path: String) -> URL {\n        TestResources.resourceURL(path)\n    }\n}\n"
  },
  {
    "path": "Domain/SettingsService/ReviewPersistence.swift",
    "content": "//\n//  ReviewPersistence.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2021-12-14.\n//  Copyright © 2021 Quran.com. All rights reserved.\n//\n\nimport Foundation\nimport Preferences\n\nfinal class ReviewPersistence {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Public\n\n    public static let shared = ReviewPersistence()\n\n    // MARK: Internal\n\n    @Preference(appOpenedCounter)\n    var appOpenedCounter: Int\n\n    @TransformedPreference(appInstalledDate, transformer: dateTransfomer)\n    var appInstalledDate: Date\n\n    @TransformedPreference(requestReviewDate, transformer: optionalTransfomer(of: dateTransfomer))\n    var requestReviewDate: Date?\n\n    // MARK: Private\n\n    private static let appOpenedCounter = PreferenceKey<Int>(key: \"appOpenedCounter\", defaultValue: 0)\n    private static let appInstalledDate = PreferenceKey<TimeInterval>(key: \"appInstalledDate\", defaultValue: 0)\n    private static let requestReviewDate = PreferenceKey<TimeInterval?>(key: \"requestReviewDate\", defaultValue: nil)\n\n    private static let dateTransfomer = PreferenceTransformer<TimeInterval, Date>(\n        rawToValue: { Date(timeIntervalSince1970: $0) },\n        valueToRaw: { $0.timeIntervalSince1970 }\n    )\n}\n"
  },
  {
    "path": "Domain/SettingsService/ReviewService.swift",
    "content": "//\n//  ReviewService.swift\n//  Quran\n//\n//  Created by Muhammad Umer on 4/11/18.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Analytics\nimport Foundation\nimport StoreKit\nimport Utilities\n\n@MainActor\npublic struct ReviewService {\n    // MARK: Lifecycle\n\n    public init(analytics: AnalyticsLibrary) {\n        self.analytics = analytics\n    }\n\n    // MARK: Public\n\n    public func checkForReview(in window: UIWindow) {\n        var appOpenedCounter = persistence.appOpenedCounter\n\n        if appOpenedCounter == 0 {\n            persistence.appInstalledDate = Date()\n        } else {\n            let requestReviewDate = persistence.requestReviewDate\n\n            if requestReviewDate == nil {\n                let oldDate = persistence.appInstalledDate\n                let today = Date()\n                let difference = Calendar.current.dateComponents([.day], from: oldDate, to: today)\n\n                if let daysCount = difference.day {\n                    if daysCount >= 7, appOpenedCounter >= 10 {\n                        requestReview(in: window)\n                        persistence.requestReviewDate = Date()\n                    }\n                }\n            }\n        }\n\n        appOpenedCounter += 1\n        persistence.appOpenedCounter = appOpenedCounter\n    }\n\n    public func openAppReview() {\n        let url = URL(validURL: \"itms-apps://itunes.apple.com/app/id1118663303?action=write-review\")\n        application.open(url)\n        analytics.review(automatic: false)\n    }\n\n    // MARK: Internal\n\n    let analytics: AnalyticsLibrary\n    let persistence = ReviewPersistence.shared\n    let application: UIApplication = .shared\n\n    // MARK: Private\n\n    private func requestReview(in window: UIWindow) {\n        guard let windowScene = window.windowScene else { return }\n        SKStoreReviewController.requestReview(in: windowScene)\n        analytics.review(automatic: true)\n    }\n}\n\nprivate extension AnalyticsLibrary {\n    func review(automatic: Bool) {\n        logEvent(\"RequestReviewAutomatic\", value: automatic.description)\n    }\n}\n"
  },
  {
    "path": "Domain/TestResources/TestResources.swift",
    "content": "//\n//  TestResources.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-21.\n//\n\nimport Foundation\n\npublic enum TestResources {\n    public static var testDataURL: URL {\n        Bundle.module.url(forResource: \"test_data\", withExtension: \"\")!\n    }\n\n    public static func resourceURL(_ path: String) -> URL {\n        Bundle.module.url(forResource: \"test_data/\" + path, withExtension: nil)!\n    }\n}\n"
  },
  {
    "path": "Domain/TranslationService/Sources/LocalTranslationsRetriever.swift",
    "content": "//\n//  LocalTranslationsRetriever.swift\n//\n//\n//  Created by Afifi, Mohamed on 10/29/21.\n//\n\nimport Foundation\nimport QuranText\nimport SystemDependencies\nimport TranslationPersistence\nimport VerseTextPersistence\n\npublic struct LocalTranslationsRetriever {\n    // MARK: Lifecycle\n\n    public init(databasesURL: URL, fileSystem: FileSystem = DefaultFileSystem()) {\n        let versionPersistenceFactory = { (translation: Translation) in\n            GRDBDatabaseVersionPersistence(fileURL: translation.localPath.url)\n        }\n\n        self.init(\n            databasesURL: databasesURL,\n            fileSystem: fileSystem,\n            versionPersistenceFactory: versionPersistenceFactory\n        )\n    }\n\n    init(\n        databasesURL: URL,\n        fileSystem: FileSystem,\n        versionPersistenceFactory: @escaping VersionPersistenceFactory\n    ) {\n        persistence = GRDBActiveTranslationsPersistence(directory: databasesURL)\n        versionUpdater = TranslationsVersionUpdater(\n            persistence: persistence,\n            versionPersistenceFactory: versionPersistenceFactory,\n            unzipper: DefaultTranslationUnzipper(),\n            fileSystem: fileSystem\n        )\n    }\n\n    // MARK: Public\n\n    public func getLocalTranslations() async throws -> [Translation] {\n        let translations = try await persistence.retrieveAll()\n\n        return try await withThrowingTaskGroup(of: Translation.self) { group in\n            for translation in translations {\n                group.addTask {\n                    try await updateInstalledVersion(of: translation)\n                }\n            }\n            let result = try await group.collect()\n            return result.sortedAs(translations.map(\\.id), by: \\.id)\n        }\n    }\n\n    // MARK: Internal\n\n    let persistence: ActiveTranslationsPersistence\n    let versionUpdater: TranslationsVersionUpdater\n\n    // MARK: Private\n\n    private func updateInstalledVersion(of translation: Translation) async throws -> Translation {\n        try await versionUpdater.updateInstalledVersion(for: translation)\n    }\n}\n"
  },
  {
    "path": "Domain/TranslationService/Sources/SelectedTranslationsPreferences.swift",
    "content": "//\n//  SelectedTranslationsPreferences.swift\n//\n//\n//  Created by Afifi, Mohamed on 10/30/21.\n//\n\nimport Preferences\nimport QuranText\n\npublic class SelectedTranslationsPreferences {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Public\n\n    public static let shared = SelectedTranslationsPreferences()\n\n    @Preference(selectedTranslations)\n    public var selectedTranslationIds: [Translation.ID]\n\n    public func remove(_ translationId: Int) {\n        if let index = selectedTranslationIds.firstIndex(of: translationId) {\n            selectedTranslationIds.remove(at: index)\n        }\n    }\n\n    public func isSelected(_ translationId: Translation.ID) -> Bool {\n        selectedTranslationIds.contains(translationId)\n    }\n\n    public func toggleSelection(_ translationId: Translation.ID) {\n        if let index = selectedTranslationIds.firstIndex(of: translationId) {\n            selectedTranslationIds.remove(at: index)\n        } else {\n            selectedTranslationIds.append(translationId)\n        }\n    }\n\n    public func select(_ id: Translation.ID) {\n        if !selectedTranslationIds.contains(id) {\n            selectedTranslationIds.append(id)\n        }\n    }\n\n    public func deselect(_ id: Translation.ID) {\n        if let index = selectedTranslationIds.firstIndex(of: id) {\n            selectedTranslationIds.remove(at: index)\n        }\n    }\n\n    public func selectedTranslations(from localTranslations: [Translation]) -> [Translation] {\n        let selected = selectedTranslationIds\n        let translationsById = Dictionary(uniqueKeysWithValues: localTranslations.map { ($0.id, $0) })\n        return selected.compactMap { translationsById[$0] }\n    }\n\n    // MARK: Internal\n\n    func reset() {\n        Preferences.shared.removeValueForKey(Self.selectedTranslations)\n    }\n\n    // MARK: Private\n\n    private static let selectedTranslations = PreferenceKey<[Translation.ID]>(key: \"selectedTranslations\", defaultValue: [])\n}\n"
  },
  {
    "path": "Domain/TranslationService/Sources/TranslationDeleter.swift",
    "content": "//\n//  TranslationDeleter.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 3/12/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\nimport QuranText\nimport SystemDependencies\nimport TranslationPersistence\n\npublic struct TranslationDeleter {\n    // MARK: Lifecycle\n\n    public init(databasesURL: URL, fileSystem: FileSystem = DefaultFileSystem()) {\n        persistence = GRDBActiveTranslationsPersistence(directory: databasesURL)\n        self.fileSystem = fileSystem\n    }\n\n    // MARK: Public\n\n    public func deleteTranslation(_ translation: Translation) async throws -> Translation {\n        // update the selected translations\n        selectedTranslationsPreferences.remove(translation.id)\n\n        // delete from disk\n        for url in translation.localFiles {\n            try? fileSystem.removeItem(at: url)\n        }\n\n        var translation = translation\n        translation.installedVersion = nil\n        try await persistence.update(translation)\n        return translation\n    }\n\n    // MARK: Internal\n\n    let persistence: ActiveTranslationsPersistence\n    let selectedTranslationsPreferences = SelectedTranslationsPreferences.shared\n    let fileSystem: FileSystem\n}\n"
  },
  {
    "path": "Domain/TranslationService/Sources/TranslationNetworkManager.swift",
    "content": "//\n//  TranslationNetworkManager.swift\n//\n//\n//  Created by Afifi, Mohamed on 10/30/21.\n//\n\nimport NetworkSupport\nimport QuranText\n\nstruct TranslationNetworkManager {\n    static let path = \"/data/translations.php\"\n\n    let networkManager: NetworkManager\n    let parser: TranslationsParser\n\n    func getTranslations() async throws -> [Translation] {\n        let data = try await networkManager.request(Self.path, parameters: [(\"v\", \"5\")])\n        return try parser.parse(data)\n    }\n}\n"
  },
  {
    "path": "Domain/TranslationService/Sources/TranslationUnzipper.swift",
    "content": "//\n//  TranslationUnzipper.swift\n//\n//\n//  Created by Afifi, Mohamed on 10/30/21.\n//\n\nimport Foundation\nimport QuranText\nimport Utilities\nimport Zip\n\nprotocol TranslationUnzipper {\n    func unzipIfNeeded(_ translation: Translation) throws\n}\n\nstruct DefaultTranslationUnzipper: TranslationUnzipper {\n    func unzipIfNeeded(_ translation: Translation) throws {\n        // installed latest version\n        guard translation.version != translation.installedVersion else {\n            return\n        }\n\n        // states:\n        //\n        // Is Zip, zip exists  , db exists\n        // false,  x           , false     // Not Downloaded\n        // false,  x           , true      // need to check version (might be download/updgrade)\n        // true,   false       , false     // Not Downloaded\n        // true,   false       , true      // need to check version (might be download/updgrade)\n        // true,   true        , false     // Unzip, delete zip, check version\n        // true,   true        , true      // Unzip, delete zip, check version | Probably upgrade\n\n        // unzip if needed\n        if translation.isUnprocessedFileZip {\n            let zipFile = translation.unprocessedLocalPath.url\n            if zipFile.isReachable {\n                // delete the zip in both cases (success or failure)\n                // success: to save space\n                // failure: to redownload it again\n                defer {\n                    try? FileManager.default.removeItem(at: zipFile)\n                }\n                try attempt(times: 3) {\n                    try Zip.unzipFile(zipFile, destination: zipFile.deletingLastPathComponent(), overwrite: true, password: nil, progress: nil)\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Domain/TranslationService/Sources/TranslationsDownloader.swift",
    "content": "//\n//  TranslationsDownloader.swift\n//\n//\n//  Created by Afifi, Mohamed on 10/30/21.\n//\n\nimport BatchDownloader\nimport QuranText\n\npublic struct TranslationsDownloader {\n    // MARK: Lifecycle\n\n    public init(downloader: DownloadManager) {\n        self.downloader = downloader\n    }\n\n    // MARK: Public\n\n    public func download(_ translation: Translation) async throws -> DownloadBatchResponse {\n        // download the translation\n        let download = DownloadRequest(url: translation.fileURL, destination: translation.unprocessedLocalPath)\n        let response = try await downloader.download(DownloadBatchRequest(requests: [download]))\n        return response\n    }\n\n    public func runningTranslationDownloads() async -> [DownloadBatchResponse] {\n        let allDownloads = await downloader.getOnGoingDownloads()\n        let downloads = allDownloads.filter(\\.isTranslation)\n        return downloads\n    }\n\n    // MARK: Internal\n\n    let downloader: DownloadManager\n}\n\nextension Set<DownloadBatchResponse> {\n    public nonisolated func firstMatches(_ translation: Translation) -> DownloadBatchResponse? {\n        for batch in self {\n            if let request = batch.requests.first {\n                if translation.matches(request) {\n                    return batch\n                }\n            }\n        }\n        return nil\n    }\n}\n\nextension [Translation] {\n    public func firstMatches(_ batch: DownloadBatchResponse) -> Translation? {\n        guard let request = batch.requests.first else {\n            return nil\n        }\n\n        return first { $0.matches(request) }\n    }\n}\n\nprivate extension Translation {\n    func matches(_ request: DownloadRequest) -> Bool {\n        request.destination == unprocessedLocalPath\n    }\n}\n"
  },
  {
    "path": "Domain/TranslationService/Sources/TranslationsParser.swift",
    "content": "//\n//  TranslationsParser.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2/23/17.\n//\n\nimport Foundation\nimport QuranText\n\nprotocol TranslationsParser {\n    func parse(_ data: Data) throws -> [Translation]\n}\n\nstruct JSONTranslationsParser: TranslationsParser {\n    func parse(_ data: Data) throws -> [Translation] {\n        let decoder = JSONDecoder()\n        let decodedResponse = try decoder.decode(TranslationsResponse.self, from: data)\n        let translations = decodedResponse.data.map { Translation($0) }\n        return translations\n    }\n}\n\nstruct TranslationsResponse: Codable {\n    let data: [TranslationResponse]\n}\n\nstruct TranslationResponse: Codable {\n    let id: Int\n    let displayName: String\n    let translator: String?\n    let translatorForeign: String?\n    let fileUrl: URL\n    let fileName: String\n    let languageCode: String\n    let currentVersion: Int\n}\n\nprivate extension Translation {\n    init(_ response: TranslationResponse) {\n        self.init(\n            id: response.id,\n            displayName: response.displayName,\n            translator: response.translator,\n            translatorForeign: response.translatorForeign,\n            fileURL: response.fileUrl,\n            fileName: response.fileName,\n            languageCode: response.languageCode,\n            version: response.currentVersion,\n            installedVersion: nil\n        )\n    }\n}\n"
  },
  {
    "path": "Domain/TranslationService/Sources/TranslationsRepository.swift",
    "content": "//\n//  TranslationsRepository.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2/26/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\nimport NetworkSupport\nimport QuranText\nimport TranslationPersistence\n\npublic struct TranslationsRepository {\n    // MARK: Lifecycle\n\n    public init(databasesURL: URL, baseURL: URL) {\n        self.init(databasesURL: databasesURL, networkManager: NetworkManager(baseURL: baseURL))\n    }\n\n    init(databasesURL: URL, networkManager: NetworkManager) {\n        self.networkManager = TranslationNetworkManager(networkManager: networkManager, parser: JSONTranslationsParser())\n        persistence = GRDBActiveTranslationsPersistence(directory: databasesURL)\n    }\n\n    // MARK: Public\n\n    public func downloadAndSyncTranslations() async throws {\n        async let local = persistence.retrieveAll()\n        async let remote = networkManager.getTranslations()\n\n        let (translations, map) = try await combine(local: local, remote: remote)\n        try await saveCombined(translations: translations, localMap: map)\n    }\n\n    // MARK: Internal\n\n    let networkManager: TranslationNetworkManager\n    let persistence: ActiveTranslationsPersistence\n\n    // MARK: Private\n\n    private func combine(local: [Translation], remote: [Translation]) -> ([Translation], [String: Translation]) {\n        let localMapConstant = Dictionary(uniqueKeysWithValues: local.map { ($0.fileName, $0) })\n        var localMap = localMapConstant\n\n        var combinedList: [Translation] = []\n        for remote in remote {\n            var combined = remote\n            if let local = localMap[remote.fileName] {\n                combined.installedVersion = local.installedVersion\n                localMap[remote.fileName] = nil\n            }\n            combinedList.append(combined)\n        }\n        combinedList.append(contentsOf: localMap.map { $1 })\n        return (combinedList, localMapConstant)\n    }\n\n    private func saveCombined(translations: [Translation], localMap: [String: Translation]) async throws {\n        for translation in translations {\n            if let oldTranslation = localMap[translation.fileName] {\n                try await persistence.remove(oldTranslation)\n            }\n            try await persistence.insert(translation)\n        }\n    }\n}\n"
  },
  {
    "path": "Domain/TranslationService/Sources/TranslationsVersionUpdater.swift",
    "content": "//\n//  TranslationsVersionUpdater.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 3/12/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport BatchDownloader\nimport QuranText\nimport SystemDependencies\nimport TranslationPersistence\nimport VerseTextPersistence\n\ntypealias VersionPersistenceFactory = (Translation) -> DatabaseVersionPersistence\n\nstruct TranslationsVersionUpdater {\n    // MARK: Internal\n\n    let selectedTranslationsPreferences = SelectedTranslationsPreferences.shared\n    let persistence: ActiveTranslationsPersistence\n    let versionPersistenceFactory: VersionPersistenceFactory\n    let unzipper: TranslationUnzipper\n    let fileSystem: FileSystem\n\n    func updateInstalledVersion(for translation: Translation) async throws -> Translation {\n        try unzipper.unzipIfNeeded(translation) // unzip if needed\n        return try await updateInstalledVersion(translation) // update versions\n    }\n\n    // MARK: Private\n\n    private func updateInstalledVersion(_ translation: Translation) async throws -> Translation {\n        var translation = translation\n        let isReachable = fileSystem.fileExists(at: translation.localPath)\n        let previousInstalledVersion = translation.installedVersion\n\n        // installed on the latest version & the db file exists\n        if translation.version != translation.installedVersion, isReachable {\n            do {\n                let versionPersistence = versionPersistenceFactory(translation)\n                let version = try await versionPersistence.getTextVersion()\n                translation.installedVersion = version\n            } catch {\n                // if an error occurred while getting the version\n                // that means the db file is corrupted.\n                translation.installedVersion = nil\n            }\n        } else if translation.installedVersion != nil, !isReachable {\n            translation.installedVersion = nil\n        }\n\n        if previousInstalledVersion != translation.installedVersion {\n            try await persistence.update(translation)\n\n            // remove the translation from selected translations\n            if translation.installedVersion == nil {\n                var selectedTranslations = selectedTranslationsPreferences.selectedTranslationIds\n                if let index = selectedTranslations.firstIndex(of: translation.id) {\n                    selectedTranslations.remove(at: index)\n                    selectedTranslationsPreferences.selectedTranslationIds = selectedTranslations\n                }\n            }\n        }\n        return translation\n    }\n}\n\nextension DownloadRequest {\n    var isTranslation: Bool {\n        Translation.isLocalTranslationPath(destination)\n    }\n}\n\nextension DownloadBatchResponse {\n    nonisolated var isTranslation: Bool {\n        requests.count == 1 && requests.contains(where: \\.isTranslation)\n    }\n}\n"
  },
  {
    "path": "Domain/TranslationService/Tests/LocalTranslationsRetrieverTests.swift",
    "content": "//\n//  LocalTranslationsRetrieverTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-21.\n//\n\nimport QuranText\nimport SystemDependenciesFake\nimport TranslationPersistence\nimport TranslationServiceFake\nimport XCTest\n@testable import TranslationService\n\nclass LocalTranslationsRetrieverTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUp() {\n        super.setUp()\n        localTranslationsFake = LocalTranslationsFake(useFactory: true)\n    }\n\n    override func tearDown() {\n        super.tearDown()\n        localTranslationsFake.tearDown()\n        preferences.reset()\n        localTranslationsFake = nil\n    }\n\n    func test_retrievingLocalTranslations_allDownloaded() async throws {\n        for translation in translations {\n            try await localTranslationsFake.insertTranslation(\n                translation, installedVersion: translation.version, downloaded: true\n            )\n        }\n\n        let localTranslations = try await service.getLocalTranslations()\n        XCTAssertEqual(Set(localTranslations), Set(translations))\n    }\n\n    func test_retrievingLocalTranslations_someDownloaded() async throws {\n        var downloadedTranslation = translations[0]\n        downloadedTranslation.installedVersion = downloadedTranslation.version\n\n        var notDownloadedTranslation = translations[1]\n        notDownloadedTranslation.installedVersion = nil\n\n        let translations = [downloadedTranslation, notDownloadedTranslation]\n\n        for translation in translations {\n            try await persistence.insert(translation)\n        }\n\n        fileSystem.files = [downloadedTranslation.localPath.url]\n\n        let localTranslations = try await service.getLocalTranslations()\n        XCTAssertEqual(Set(localTranslations), Set(translations))\n    }\n\n    func test_retrievingLocalTranslations_deletedTranslation() async throws {\n        try await localTranslationsFake.insertTranslation(\n            translations[0], installedVersion: translations[0].version, downloaded: false\n        )\n        let expectedTranslation = expectedTranslation(translations[0], installedVersion: nil)\n\n        let localTranslations = try await service.getLocalTranslations()\n        XCTAssertEqual(Set(localTranslations), [expectedTranslation])\n    }\n\n    func test_retrievingLocalTranslations_initialDownload() async throws {\n        try await localTranslationsFake.insertTranslation(\n            translations[0], installedVersion: nil, downloaded: true\n        )\n        let expectedTranslation = expectedTranslation(translations[0], installedVersion: 5)\n\n        let localTranslations = try await service.getLocalTranslations()\n        XCTAssertEqual(Set(localTranslations), [expectedTranslation])\n    }\n\n    func test_retrievingLocalTranslations_upgradeDownloaded() async throws {\n        try await localTranslationsFake.insertTranslation(\n            translations[0], installedVersion: 2, downloaded: true\n        )\n        let expectedTranslation = expectedTranslation(translations[0], installedVersion: 5)\n\n        let localTranslations = try await service.getLocalTranslations()\n        XCTAssertEqual(Set(localTranslations), [expectedTranslation])\n    }\n\n    func test_retrievingLocalTranslations_errorAfterDownload() async throws {\n        localTranslationsFake = LocalTranslationsFake(useFactory: false)\n        try await localTranslationsFake.insertTranslation(\n            translations[0], installedVersion: 2, downloaded: true\n        )\n\n        let expectedTranslation = expectedTranslation(translations[0], installedVersion: nil)\n\n        XCTAssertTrue(preferences.isSelected(expectedTranslation.id))\n        let localTranslations = try await service.getLocalTranslations()\n        XCTAssertEqual(Set(localTranslations), [expectedTranslation])\n        XCTAssertFalse(preferences.isSelected(expectedTranslation.id))\n    }\n\n    // MARK: Private\n\n    private var localTranslationsFake: LocalTranslationsFake!\n    private let preferences = SelectedTranslationsPreferences.shared\n\n    private let translations = [\n        TranslationTestData.khanTranslation,\n        TranslationTestData.sahihTranslation,\n    ]\n\n    private var service: LocalTranslationsRetriever {\n        localTranslationsFake.retriever\n    }\n\n    private var persistence: ActiveTranslationsPersistence {\n        localTranslationsFake.persistence\n    }\n\n    private var fileSystem: FileSystemFake {\n        localTranslationsFake.fileSystem\n    }\n\n    // MARK: - Helpers\n\n    private func expectedTranslation(_ translation: Translation, installedVersion: Int?) -> Translation {\n        var translation = translation\n        translation.installedVersion = installedVersion\n        return translation\n    }\n}\n"
  },
  {
    "path": "Domain/TranslationService/Tests/SelectedTranslationsPreferencesTests.swift",
    "content": "//\n//  SelectedTranslationsPreferencesTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-21.\n//\n\nimport XCTest\n@testable import TranslationService\n\nclass SelectedTranslationsPreferencesTests: XCTestCase {\n    // MARK: Internal\n\n    override func tearDown() {\n        super.tearDown()\n        preferences.reset()\n    }\n\n    func testPreferences() {\n        XCTAssertEqual(preferences.selectedTranslationIds, [])\n\n        preferences.toggleSelection(45)\n        preferences.toggleSelection(10)\n        preferences.toggleSelection(20)\n        XCTAssertEqual(preferences.selectedTranslationIds, [45, 10, 20])\n        XCTAssertTrue(preferences.isSelected(10))\n\n        preferences.toggleSelection(10)\n        XCTAssertEqual(preferences.selectedTranslationIds, [45, 20])\n        XCTAssertFalse(preferences.isSelected(10))\n    }\n\n    // MARK: Private\n\n    private let preferences = SelectedTranslationsPreferences.shared\n}\n"
  },
  {
    "path": "Domain/TranslationService/Tests/TranslationDeleterTests.swift",
    "content": "//\n//  TranslationDeleterTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-21.\n//\n\nimport SystemDependenciesFake\nimport TranslationServiceFake\nimport XCTest\n@testable import TranslationService\n\nclass TranslationDeleterTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUp() {\n        super.setUp()\n        localTranslationsFake = LocalTranslationsFake(useFactory: true)\n        service = TranslationDeleter(\n            databasesURL: LocalTranslationsFake.databasesURL,\n            fileSystem: fileSystem\n        )\n    }\n\n    override func tearDown() {\n        super.tearDown()\n        localTranslationsFake.tearDown()\n        preferences.reset()\n        localTranslationsFake = nil\n        service = nil\n    }\n\n    func test_deleteDownloadedTranslation() async throws {\n        let translation = TranslationTestData.khanTranslation\n        XCTAssertNotNil(translation.installedVersion)\n        try await localTranslationsFake.setTranslations([translation])\n        XCTAssertEqual(preferences.selectedTranslationIds, [translation.id])\n\n        let initialLocalTranslations = try await retriever.getLocalTranslations()\n        XCTAssertEqual(initialLocalTranslations, [translation])\n\n        let deletedTranslation = try await service.deleteTranslation(translation)\n\n        var expected = translation\n        expected.installedVersion = nil\n        XCTAssertEqual(expected, deletedTranslation)\n        XCTAssertEqual(fileSystem.removedItems, [expected.localPath.url])\n        XCTAssertEqual(preferences.selectedTranslationIds, [])\n\n        let localTranslations = try await retriever.getLocalTranslations()\n        XCTAssertEqual(localTranslations, [expected])\n    }\n\n    func test_deleteDownloadedTranslationAndZip() async throws {\n        let translation = TranslationTestData.sahihTranslation\n        XCTAssertNotNil(translation.installedVersion)\n        try await localTranslationsFake.setTranslations([translation])\n        XCTAssertEqual(preferences.selectedTranslationIds, [translation.id])\n\n        let initialLocalTranslations = try await retriever.getLocalTranslations()\n        XCTAssertEqual(initialLocalTranslations, [translation])\n\n        let deletedTranslation = try await service.deleteTranslation(translation)\n\n        var expected = translation\n        expected.installedVersion = nil\n        XCTAssertEqual(expected, deletedTranslation)\n        let zipURL = expected.localPath.deletingPathExtension().appendingPathExtension(\"zip\")\n        XCTAssertEqual(fileSystem.removedItems, [expected.localPath, zipURL].map(\\.url))\n        XCTAssertEqual(preferences.selectedTranslationIds, [])\n\n        let localTranslations = try await retriever.getLocalTranslations()\n        XCTAssertEqual(localTranslations, [expected])\n    }\n\n    func test_deleteNotDownloadedTranslation() async throws {\n        var translation = TranslationTestData.khanTranslation\n        translation.installedVersion = nil\n\n        try await localTranslationsFake.insertTranslation(translation, installedVersion: nil, downloaded: false)\n        XCTAssertEqual(preferences.selectedTranslationIds, [])\n\n        let initialLocalTranslations = try await retriever.getLocalTranslations()\n        XCTAssertEqual(initialLocalTranslations, [translation])\n\n        let deletedTranslation = try await service.deleteTranslation(translation)\n\n        XCTAssertEqual(translation, deletedTranslation)\n        XCTAssertEqual(fileSystem.removedItems, [translation.localPath.url])\n        XCTAssertEqual(preferences.selectedTranslationIds, [])\n\n        let localTranslations = try await retriever.getLocalTranslations()\n        XCTAssertEqual(localTranslations, [translation])\n    }\n\n    // MARK: Private\n\n    private var service: TranslationDeleter!\n    private var localTranslationsFake: LocalTranslationsFake!\n    private let preferences = SelectedTranslationsPreferences.shared\n\n    private var retriever: LocalTranslationsRetriever {\n        localTranslationsFake.retriever\n    }\n\n    private var fileSystem: FileSystemFake {\n        localTranslationsFake.fileSystem\n    }\n}\n"
  },
  {
    "path": "Domain/TranslationService/Tests/TranslationsDownloaderTests.swift",
    "content": "//\n//  TranslationsDownloaderTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-21.\n//\n\nimport BatchDownloaderFake\nimport NetworkSupportFake\nimport SystemDependenciesFake\nimport TranslationServiceFake\nimport Utilities\nimport XCTest\n@testable import BatchDownloader\n@testable import TranslationService\n\nclass TranslationsDownloaderTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUp() async throws {\n        fileSystem = FileSystemFake()\n        testContext = BatchDownloaderFake.makeContext()\n        (batchDownloader, session) = await testContext.makeDownloader()\n        downloader = TranslationsDownloader(downloader: batchDownloader)\n    }\n\n    override func tearDownWithError() throws {\n        testContext.tearDown()\n        testContext = nil\n        downloader = nil\n        batchDownloader = nil\n        session = nil\n    }\n\n    func test_download_newTranslation() async throws {\n        let translation = TranslationTestData.khanTranslation\n\n        let response = try await downloader.download(translation)\n        XCTAssertEqual(response.urls, [translation.fileURL])\n        XCTAssertEqual(response.destinations, [translation.localPath])\n    }\n\n    func test_runningDownloads_empty() async throws {\n        let downloads = await downloader.runningTranslationDownloads()\n        XCTAssertEqual(downloads, [])\n    }\n\n    func test_runningDownloads_downloading() async throws {\n        let translation = TranslationTestData.khanTranslation\n\n        let response = try await downloader.download(translation)\n\n        let downloads = await downloader.runningTranslationDownloads()\n        XCTAssertEqual(downloads, [response])\n    }\n\n    // MARK: Private\n\n    private var downloader: TranslationsDownloader!\n    private var batchDownloader: DownloadManager!\n    private var session: NetworkSessionFake!\n    private var fileSystem: FileSystemFake!\n    private var testContext: BatchDownloaderTestContext!\n}\n\nprivate extension DownloadBatchResponse {\n    nonisolated var urls: [URL?] {\n        requests.map(\\.request.url)\n    }\n\n    nonisolated var destinations: [RelativeFilePath] {\n        requests.map(\\.destination)\n    }\n}\n"
  },
  {
    "path": "Domain/TranslationService/Tests/TranslationsRepositoryTests.swift",
    "content": "//\n//  TranslationsRepositoryTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-21.\n//\n\nimport NetworkSupportFake\nimport QuranText\nimport TranslationServiceFake\nimport XCTest\n@testable import NetworkSupport\n@testable import TranslationService\n\nclass TranslationsRepositoryTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUp() {\n        super.setUp()\n        session = NetworkSessionFake(queue: .main, delegate: nil)\n        localTranslationsFake = LocalTranslationsFake(useFactory: true)\n        service = TranslationsRepository(\n            databasesURL: LocalTranslationsFake.databasesURL,\n            networkManager: NetworkManager(session: session, baseURL: baseURL)\n        )\n    }\n\n    override func tearDown() {\n        super.tearDown()\n        localTranslationsFake.tearDown()\n        service = nil\n        localTranslationsFake = nil\n    }\n\n    func test_firstTimeDownload() async throws {\n        try nextResponse(TranslationsResponse(\n            data: translations.map { TranslationResponse($0) }))\n\n        try await service.downloadAndSyncTranslations()\n\n        let localResults = try await retriever.getLocalTranslations()\n        let expectedTranslations = translations.map {\n            expectedTranslation($0, installedVersion: nil)\n        }\n        XCTAssertEqual(localResults, expectedTranslations)\n    }\n\n    func test_updatedVersion() async throws {\n        let translation = translations[0]\n        let updatedTranslation = Translation(\n            id: translation.id + 45,\n            displayName: translation.displayName,\n            translator: translation.translator,\n            translatorForeign: translation.translatorForeign,\n            fileURL: translation.fileURL,\n            fileName: translation.fileName,\n            languageCode: translation.languageCode,\n            version: 1000\n        )\n\n        try nextResponse(TranslationsResponse(data: [TranslationResponse(translation)]))\n        try await service.downloadAndSyncTranslations()\n\n        try nextResponse(TranslationsResponse(data: [TranslationResponse(updatedTranslation)]))\n        try await service.downloadAndSyncTranslations()\n\n        let localResults = try await retriever.getLocalTranslations()\n        XCTAssertEqual(localResults, [updatedTranslation])\n    }\n\n    func test_updatedFileName() async throws {\n        let translation = translations[0]\n        let updatedTranslation = Translation(\n            id: translation.id + 19,\n            displayName: translation.displayName,\n            translator: translation.translator,\n            translatorForeign: translation.translatorForeign,\n            fileURL: translation.fileURL,\n            fileName: \"updatedFileName.db\",\n            languageCode: translation.languageCode,\n            version: translation.version\n        )\n\n        try nextResponse(TranslationsResponse(data: [TranslationResponse(translation)]))\n        try await service.downloadAndSyncTranslations()\n\n        try nextResponse(TranslationsResponse(data: [TranslationResponse(updatedTranslation)]))\n        try await service.downloadAndSyncTranslations()\n\n        let localResults = try await retriever.getLocalTranslations()\n\n        // Expected to create a duplicate entry if fileName changed,\n        // fileName should not change to upgrade, it's a unique value\n        // per translation\n        XCTAssertEqual(localResults.sorted(), [\n            expectedTranslation(translation, installedVersion: nil),\n            expectedTranslation(updatedTranslation, installedVersion: nil),\n        ].sorted())\n    }\n\n    // MARK: Private\n\n    private var session: NetworkSessionFake!\n    private var service: TranslationsRepository!\n    private var localTranslationsFake: LocalTranslationsFake!\n\n    private let baseURL = URL(validURL: \"http://example.com\")\n\n    private let translations = [\n        TranslationTestData.khanTranslation,\n        TranslationTestData.sahihTranslation,\n    ]\n\n    private var retriever: LocalTranslationsRetriever {\n        localTranslationsFake.retriever\n    }\n\n    // MARK: - Helpers\n\n    private func nextResponse(_ response: TranslationsResponse) throws {\n        let encoder = JSONEncoder()\n        let parameters = [(\"v\", \"5\")]\n        let request = NetworkManager.request(\n            baseURL: baseURL,\n            path: TranslationNetworkManager.path,\n            parameters: parameters\n        )\n        session.dataResults[request.url!] = .success(try encoder.encode(response))\n    }\n\n    private func expectedTranslation(_ translation: Translation, installedVersion: Int?) -> Translation {\n        var translation = translation\n        translation.installedVersion = installedVersion\n        return translation\n    }\n}\n\nprivate extension TranslationResponse {\n    init(_ translation: Translation) {\n        self.init(\n            id: translation.id,\n            displayName: translation.displayName,\n            translator: translation.translator,\n            translatorForeign: translation.translatorForeign,\n            fileUrl: translation.fileURL,\n            fileName: translation.fileName,\n            languageCode: translation.languageCode,\n            currentVersion: translation.version\n        )\n    }\n}\n"
  },
  {
    "path": "Domain/TranslationServiceFake/LocalTranslationsFake.swift",
    "content": "//\n//  LocalTranslationsFake.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-20.\n//\n\nimport Foundation\nimport QuranText\nimport SystemDependenciesFake\nimport TestResources\nimport TranslationPersistence\nimport VerseTextPersistence\n@testable import TranslationService\n\npublic struct LocalTranslationsFake {\n    // MARK: Lifecycle\n\n    public init(useFactory: Bool = false) {\n        persistence = GRDBActiveTranslationsPersistence(directory: Self.databasesURL)\n        if useFactory {\n            let persistenceFactory = { (translation: Translation) in\n                let url = TestResources.resourceURL(translation.fileName)\n                return GRDBDatabaseVersionPersistence(fileURL: url)\n            }\n            retriever = LocalTranslationsRetriever(databasesURL: Self.databasesURL, fileSystem: fileSystem, versionPersistenceFactory: persistenceFactory)\n        } else {\n            retriever = LocalTranslationsRetriever(databasesURL: Self.databasesURL, fileSystem: fileSystem)\n        }\n    }\n\n    // MARK: Public\n\n    public static let databasesURL = FileManager.documentsURL.appendingPathComponent(\"databases\", isDirectory: true)\n\n    public let fileSystem = FileSystemFake()\n    public let persistence: ActiveTranslationsPersistence\n\n    public let retriever: LocalTranslationsRetriever\n\n    public func tearDown() {\n        try? FileManager.default.removeItem(at: Self.databasesURL)\n    }\n\n    public func setTranslations(_ translations: [Translation]) async throws {\n        let oldTranslations = try await persistence.retrieveAll()\n        for oldTranslation in oldTranslations {\n            try await persistence.remove(oldTranslation)\n        }\n        for translation in translations {\n            try await persistence.insert(translation)\n        }\n        preferences.selectedTranslationIds = translations.map(\\.id)\n        fileSystem.files = Set(translations.map(\\.localPath.url))\n    }\n\n    public func insertTranslation(\n        _ translation: Translation,\n        installedVersion: Int?,\n        downloaded: Bool\n    ) async throws {\n        var translation = translation\n        translation.installedVersion = installedVersion\n        try await persistence.insert(translation)\n\n        if installedVersion != nil {\n            preferences.toggleSelection(translation.id)\n        }\n\n        if downloaded {\n            fileSystem.files.insert(translation.localPath.url)\n        }\n    }\n\n    // MARK: Internal\n\n    let preferences = SelectedTranslationsPreferences.shared\n}\n"
  },
  {
    "path": "Domain/TranslationServiceFake/TranslationTestData.swift",
    "content": "//\n//  TranslationTestData.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-05-21.\n//\n\nimport Foundation\nimport QuranText\n\npublic enum TranslationTestData {\n    public static let khanTranslation = Translation(\n        id: 1,\n        displayName: \"\",\n        translator: \"\",\n        translatorForeign: \"Khan & Hilai\",\n        fileURL: URL(validURL: \"a\"),\n        fileName: \"quran.en.khanhilali.db\",\n        languageCode: \"\",\n        version: 5,\n        installedVersion: 5\n    )\n\n    public static let sahihTranslation = Translation(\n        id: 2,\n        displayName: \"\",\n        translator: \"\",\n        translatorForeign: \"Sahih International\",\n        fileURL: URL(validURL: \"quran.ensi.zip\"),\n        fileName: \"quran.ensi.db\",\n        languageCode: \"\",\n        version: 1,\n        installedVersion: 1\n    )\n}\n"
  },
  {
    "path": "Domain/WordFrameService/WordFrame+Extension.swift",
    "content": "//\n//  WordFrame+Extension.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-26.\n//\n\nimport QuranGeometry\nimport QuranKit\n\nextension WordFrame {\n    mutating func normalize() {\n        // Ensure minX is less than or equal to maxX\n        if minX > maxX {\n            swap(&minX, &maxX)\n        }\n\n        // Ensure minY is less than or equal to maxY\n        if minY > maxY {\n            swap(&minY, &maxY)\n        }\n    }\n\n    static func alignedVertically(_ list: [WordFrame]) -> [WordFrame] {\n        let minY = list.map(\\.minY).min() ?? 0\n        let maxY = list.map(\\.maxY).max() ?? 0\n        var result: [WordFrame] = []\n        for var frame in list {\n            frame.minY = minY\n            frame.maxY = maxY\n            result.append(frame)\n        }\n        return result\n    }\n\n    static func unionHorizontally(leftFrame: inout WordFrame, rightFrame: inout WordFrame) {\n        if leftFrame.maxX < rightFrame.minX {\n            // If there's a gap, middleX is halfway between the left frame's maxX and the right frame's minX\n            let middleX = (leftFrame.maxX + rightFrame.minX) / 2\n            rightFrame.minX = middleX\n            leftFrame.maxX = middleX\n        } else {\n            // If there's an overlap or the frames are touching, leftFrame.maxX is set to rightFrame.minX\n            leftFrame.maxX = rightFrame.minX\n        }\n    }\n\n    /// Adjusts the top and bottom arrays of WordFrame instances to meet vertically with an equal gap between them,\n    /// but only if they belong to the same sura.\n    ///\n    /// - Parameters:\n    ///   - top: An array of WordFrame instances representing the top line, to be adjusted downwards.\n    ///   - bottom: An array of WordFrame instances representing the bottom line, to be adjusted upwards.\n    static func unionVertically(top: inout [WordFrame], bottom: inout [WordFrame]) {\n        // Early return if not continuous lines (different suras).\n        guard top.last?.word.verse.sura == bottom.first?.word.verse.sura else {\n            return\n        }\n\n        let topMaxY = top.map(\\.maxY).max() ?? 0\n        let bottomMinY = bottom.map(\\.minY).min() ?? 0\n        let middleY = (topMaxY + bottomMinY) / 2\n\n        for i in 0 ..< top.count {\n            top[i].maxY = middleY\n        }\n        for i in 0 ..< bottom.count {\n            bottom[i].minY = middleY\n        }\n    }\n\n    private static func unionEdge(\n        _ list: inout [WordFrame],\n        keyPath: WritableKeyPath<WordFrame, Int>,\n        reduce: ([Int]) -> Int?\n    ) {\n        let value = reduce(list.map { $0[keyPath: keyPath] })!\n        for i in 0 ..< list.count {\n            list[i][keyPath: keyPath] = value\n        }\n    }\n\n    static func unionLeftEdge(_ list: inout [WordFrame]) {\n        unionEdge(&list, keyPath: \\.minX, reduce: { $0.min() })\n    }\n\n    static func unionRightEdge(_ list: inout [WordFrame]) {\n        unionEdge(&list, keyPath: \\.maxX, reduce: { $0.max() })\n    }\n}\n"
  },
  {
    "path": "Domain/WordFrameService/WordFrameProcessor.swift",
    "content": "//\n//  WordFrameProcessor.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/22/16.\n//\n\nimport QuranGeometry\n\npublic struct WordFrameProcessor {\n    // MARK: Lifecycle\n\n    public init() {\n    }\n\n    // MARK: Public\n\n    public func processWordFrames(_ frames: [WordFrame]) -> WordFrameCollection {\n        guard !frames.isEmpty else {\n            return WordFrameCollection(lines: [])\n        }\n\n        // group by line\n        let framesByLines = Dictionary(grouping: frames, by: { $0.line })\n        var lines = framesByLines\n            .sorted { $0.key < $1.key }\n            .map { _, wordFrames in wordFrames }\n\n        normalize(&lines)\n        alignFramesVerticallyInEachLine(&lines)\n        unionLinesVertically(&lines)\n        unionFramesHorizontallyInEachLine(&lines)\n        alignLineEdges(&lines)\n\n        return WordFrameCollection(lines: lines.map { WordFrameLine(frames: $0) })\n    }\n\n    // MARK: Private\n\n    private func normalize(_ lines: inout [[WordFrame]]) {\n        for i in 0 ..< lines.count {\n            for j in 0 ..< lines[i].count {\n                lines[i][j].normalize()\n            }\n        }\n    }\n\n    private func alignFramesVerticallyInEachLine(_ lines: inout [[WordFrame]]) {\n        // align vertically each line\n        for i in 0 ..< lines.count {\n            lines[i] = WordFrame.alignedVertically(lines[i])\n        }\n    }\n\n    private func unionLinesVertically(_ lines: inout [[WordFrame]]) {\n        // union each line with its neighbors\n        for i in 0 ..< lines.count - 1 {\n            // Create temporary copies\n            var topFrames = lines[i]\n            var bottomFrames = lines[i + 1]\n\n            WordFrame.unionVertically(top: &topFrames, bottom: &bottomFrames)\n\n            // Assign the modified copies back to the original array\n            lines[i] = topFrames\n            lines[i + 1] = bottomFrames\n        }\n    }\n\n    private func unionFramesHorizontallyInEachLine(_ lines: inout [[WordFrame]]) {\n        for lineIndex in 0 ..< lines.count {\n            // Sort frames in the current line based on minX to ensure they are in decreasing order\n            lines[lineIndex].sort(by: { $0.minX > $1.minX })\n\n            for frameIndex in 0 ..< lines[lineIndex].count - 1 {\n                var leftFrame = lines[lineIndex][frameIndex + 1]\n                var rightFrame = lines[lineIndex][frameIndex + 0]\n\n                // Ensure the frames touch each other without gaps or overlaps\n                WordFrame.unionHorizontally(leftFrame: &leftFrame, rightFrame: &rightFrame)\n\n                // Update the frames in the current line\n                lines[lineIndex][frameIndex + 1] = leftFrame\n                lines[lineIndex][frameIndex + 0] = rightFrame\n            }\n        }\n    }\n\n    private func alignLineEdges(_ lines: inout [[WordFrame]]) {\n        // align the edges\n        var rightEdge = lines.map { $0[0] }\n        var leftEdge = lines.map { $0[$0.count - 1] }\n        WordFrame.unionLeftEdge(&leftEdge)\n        WordFrame.unionRightEdge(&rightEdge)\n\n        for i in 0 ..< lines.count {\n            lines[i][0] = rightEdge[i]\n            lines[i][lines[i].count - 1] = leftEdge[i]\n        }\n    }\n}\n"
  },
  {
    "path": "Domain/WordTextService/Sources/WordTextPreferences.swift",
    "content": "//\n//  WordTextPreferences.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-08.\n//\n\nimport Preferences\nimport QuranText\n\npublic struct WordTextPreferences {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Public\n\n    public static let shared = WordTextPreferences()\n\n    @TransformedPreference(wordTextType, transformer: .rawRepresentable(defaultValue: defaultWordTextType))\n    public var wordTextType: WordTextType\n\n    // MARK: Private\n\n    private static let defaultWordTextType = WordTextType.translation\n    private static let wordTextType = PreferenceKey<Int>(key: \"wordTranslationType\", defaultValue: defaultWordTextType.rawValue)\n}\n"
  },
  {
    "path": "Domain/WordTextService/Sources/WordTextService.swift",
    "content": "//\n//  WordTextService.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-17.\n//\n\nimport Foundation\nimport QuranKit\nimport WordTextPersistence\n\npublic struct WordTextService {\n    // MARK: Lifecycle\n\n    public init(fileURL: URL) {\n        persistence = GRDBWordTextPersistence(fileURL: fileURL)\n    }\n\n    // MARK: Public\n\n    public func textForWord(_ word: Word) async throws -> String? {\n        let textType = preferences.wordTextType\n        let text: String? = switch textType {\n        case .translation:\n            try await persistence.translationForWord(word)\n        case .transliteration:\n            try await persistence.transliterationForWord(word)\n        }\n        return text\n    }\n\n    // MARK: Private\n\n    private let preferences = WordTextPreferences.shared\n    private let persistence: WordTextPersistence\n}\n"
  },
  {
    "path": "Domain/WordTextService/Tests/WordTextServiceTests.swift",
    "content": "//\n//  WordTextServiceTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-01-17.\n//\n\nimport QuranKit\nimport TestResources\nimport XCTest\n@testable import WordTextService\n\nclass WordTextServiceTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUpWithError() throws {\n        service = WordTextService(fileURL: TestResources.resourceURL(\"words.db\"))\n    }\n\n    func testWordEnglishTranslation() async throws {\n        preferences.wordTextType = .translation\n        let text = try await service.textForWord(word)\n        XCTAssertEqual(text, \"(of) your Lord\")\n    }\n\n    func testWordEnglishTransliteration() async throws {\n        preferences.wordTextType = .transliteration\n        let text = try await service.textForWord(word)\n        XCTAssertEqual(text, \"rabbika\")\n    }\n\n    // MARK: Private\n\n    private var service: WordTextService!\n    private let word = Word(verse: AyahNumber(quran: Quran.hafsMadani1405, sura: 110, ayah: 3)!, wordNumber: 3)\n    private let preferences = WordTextPreferences.shared\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Classes/Analytics.swift",
    "content": "//\n//  Analytics.swift\n//  QuranEngineApp\n//\n//  Created by Mohamed Afifi on 2023-06-24.\n//\n\nimport Analytics\nimport Logging\nimport VLogging\n\nstruct LoggingAnalyticsLibrary: AnalyticsLibrary {\n    func logEvent(_ name: String, value: String) {\n        logger.info(\"[Analytics] \\(name)=\\(value)\")\n    }\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Classes/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  QuranEngineApp\n//\n//  Created by Mohamed Afifi on 2023-06-24.\n//\n\nimport AppStructureFeature\nimport Logging\nimport NoorFont\nimport NoorUI\nimport UIKit\n\n@main\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n    // MARK: Internal\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n        print(\"Documents directory: \", FileManager.documentsURL)\n\n        FontName.registerFonts()\n        LoggingSystem.bootstrap(StreamLogHandler.standardError)\n\n        Task {\n            // Eagerly load download manager to handle any background downloads.\n            await container.downloadManager.start()\n\n            // Begin fetching resources immediately after download manager is initialized.\n            await container.readingResources.startLoadingResources()\n        }\n\n        return true\n    }\n\n    // MARK: UISceneSession Lifecycle\n\n    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {\n        UISceneConfiguration(name: \"Default Configuration\", sessionRole: connectingSceneSession.role)\n    }\n\n    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {\n    }\n\n    func application(\n        _ application: UIApplication,\n        handleEventsForBackgroundURLSession identifier: String,\n        completionHandler: @escaping () -> Void\n    ) {\n        let downloadManager = container.downloadManager\n        downloadManager.setBackgroundSessionCompletion(completionHandler)\n    }\n\n    // MARK: Private\n\n    private let container = Container.shared\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Classes/Container.swift",
    "content": "//\n//  Container.swift\n//  QuranEngineApp\n//\n//  Created by Mohamed Afifi on 2023-06-24.\n//\n\nimport Analytics\nimport AppDependencies\nimport AuthenticationClient\nimport BatchDownloader\nimport CoreDataModel\nimport CoreDataPersistence\nimport Foundation\nimport LastPagePersistence\n#if QURAN_SYNC\n    import MobileSync\n#endif\nimport NotePersistence\nimport PageBookmarkPersistence\nimport ReadingService\nimport UIKit\n\n/// Hosts singleton dependencies\nclass Container: AppDependencies {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Internal\n\n    static let shared = Container()\n\n    let remoteResources: ReadingRemoteResources? = nil\n    private(set) lazy var readingResources = ReadingResourcesService(downloader: downloadManager, remoteResources: remoteResources)\n\n    let analytics: AnalyticsLibrary = LoggingAnalyticsLibrary()\n\n    private(set) lazy var lastPagePersistence: LastPagePersistence = CoreDataLastPagePersistence(stack: coreDataStack)\n    private(set) lazy var pageBookmarkPersistence: PageBookmarkPersistence = {\n        #if QURAN_SYNC\n            if let syncService = mobileSyncServices?.syncService {\n                return MobileSyncPageBookmarkPersistence(syncService: syncService)\n            }\n        #endif\n        return CoreDataPageBookmarkPersistence(stack: coreDataStack)\n    }()\n\n    private(set) lazy var notePersistence: NotePersistence = CoreDataNotePersistence(stack: coreDataStack)\n    private(set) lazy var authenticationClient: (any AuthenticationClient)? = {\n        #if QURAN_SYNC\n            if let authService = mobileSyncServices?.authService {\n                return AuthenticationClientMobileSyncImpl(authService: authService)\n            }\n        #endif\n\n        guard let configurations = Self.quranOAuthConfiguration() else {\n            return nil\n        }\n\n        return AuthenticationClientImpl(configurations: configurations)\n    }()\n\n    private(set) lazy var downloadManager: DownloadManager = {\n        let configuration = URLSessionConfiguration.background(withIdentifier: \"DownloadsBackgroundIdentifier\")\n        configuration.timeoutIntervalForRequest = 60 * 5 // 5 minutes\n        return DownloadManager(\n            maxSimultaneousDownloads: 600,\n            configuration: configuration,\n            downloadsURL: Constant.databasesURL.appendingPathComponent(\"downloads.db\", isDirectory: false)\n        )\n    }()\n\n    var databasesURL: URL { Constant.databasesURL }\n    var wordsDatabase: URL { Constant.wordsDatabase }\n    var filesAppHost: URL { Constant.filesAppHost }\n    var quranProfileURL: URL { Self.quranProfileURL() }\n    var appHost: URL { Constant.appHost }\n    var databasesDirectory: URL { Constant.databasesURL }\n    var logsDirectory: URL { FileManager.documentsURL.appendingPathComponent(\"logs\") }\n\n    var supportsCloudKit: Bool { false }\n\n    // MARK: Private\n\n    #if QURAN_SYNC\n        private static let mobileSyncRedirectURI = \"com.quran.oauth://callback\"\n        private static let mobileSyncScopes = [\n            \"openid\",\n            \"offline_access\",\n            \"content\",\n            \"user\",\n            \"bookmark\",\n            \"sync\",\n            \"collection\",\n            \"reading_session\",\n            \"preference\",\n            \"note\",\n        ]\n\n        private lazy var mobileSyncServices: (authService: AuthService, syncService: SyncService)? = {\n            guard let authConfig = Self.mobileSyncAuthConfiguration() else {\n                return nil\n            }\n\n            let synchronizationEnvironment = Self.makeSynchronizationEnvironment(usePreProduction: Self.usePreProductionSyncEnvironment())\n\n            AuthFlowFactoryProvider.shared.doInitialize()\n\n            let driverFactory = DriverFactory()\n            let graph = SharedDependencyGraph.shared.doInit(\n                driverFactory: driverFactory,\n                environment: synchronizationEnvironment,\n                authEnvironment: authConfig.environment\n            )\n\n            let json = AuthModule.companion.provideJson()\n            let settings = AuthModule.companion.provideSettings()\n            let httpClient = AuthModule.companion.provideHttpClient(json: json, config: authConfig)\n            let oidcClient = AuthModule.companion.provideOpenIdConnectClient(\n                config: authConfig,\n                httpClient: httpClient\n            )\n            let authStorage = AuthStorage(settings: settings, json: json)\n            let authNetworkDataSource = AuthNetworkDataSource(\n                authConfig: authConfig,\n                httpClient: httpClient\n            )\n            let logger = KermitLogger.companion.withTag(tag: \"quran-ios\")\n            let authRepository = OidcAuthRepository(\n                authConfig: authConfig,\n                authStorage: authStorage,\n                oidcClient: oidcClient,\n                networkDataSource: authNetworkDataSource,\n                logger: logger\n            )\n            let authService = AuthService(authRepository: authRepository)\n            let syncService = SyncService(\n                authService: authService,\n                pipeline: graph.syncService.pipelineForIos,\n                environment: synchronizationEnvironment,\n                settings: SyncServiceKt.makeSettings()\n            )\n\n            return (authService, syncService)\n        }()\n\n        private static func mobileSyncAuthConfiguration() -> AuthConfig? {\n            guard let clientID = nonEmptyEnvironmentValue(\"QURAN_OAUTH_CLIENT_ID\") else {\n                return nil\n            }\n\n            let usePreProduction = usePreProductionSyncEnvironment()\n            let authEnvironment: AuthEnvironment = usePreProduction ? .prelive : .production\n\n            return AuthConfig(\n                environment: authEnvironment,\n                clientId: clientID,\n                clientSecret: nonEmptyEnvironmentValue(\"QURAN_OAUTH_CLIENT_SECRET\"),\n                redirectUri: mobileSyncRedirectURI,\n                postLogoutRedirectUri: mobileSyncRedirectURI,\n                scopes: mobileSyncScopes\n            )\n        }\n\n        private static func makeSynchronizationEnvironment(usePreProduction: Bool) -> SynchronizationEnvironment {\n            let endpoint = usePreProduction\n                ? \"https://apis-prelive.quran.foundation/auth\"\n                : \"https://apis.quran.foundation/auth\"\n            return SynchronizationEnvironment(endPointURL: endpoint)\n        }\n    #endif\n\n    private lazy var coreDataStack: CoreDataStack = {\n        let stack = CoreDataStack(name: \"Quran\", modelUrl: CoreDataModelResources.quranModel) {\n            let lastPage = CoreDataLastPageUniquifier()\n            let pageBookmark = CoreDataPageBookmarkUniquifier()\n            let note = CoreDataNoteUniquifier()\n            return [lastPage, pageBookmark, note]\n        }\n        return stack\n    }()\n\n    private static func quranOAuthConfiguration() -> AuthenticationClientConfiguration? {\n        guard\n            let clientID = nonEmptyEnvironmentValue(\"QURAN_OAUTH_CLIENT_ID\"),\n            let issuerURL = URL(string: nonEmptyEnvironmentValue(\"QURAN_OAUTH_ISSUER_URL\") ?? \"\"),\n            let redirectURL = URL(string: nonEmptyEnvironmentValue(\"QURAN_OAUTH_REDIRECT_URL\") ?? \"\"),\n            let scopesValue = nonEmptyEnvironmentValue(\"QURAN_OAUTH_SCOPES\")\n        else {\n            return nil\n        }\n\n        let scopes = scopesValue\n            .split(separator: \",\")\n            .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) }\n            .filter { !$0.isEmpty }\n\n        guard !scopes.isEmpty else {\n            return nil\n        }\n\n        return AuthenticationClientConfiguration(\n            clientID: clientID,\n            clientSecret: nonEmptyEnvironmentValue(\"QURAN_OAUTH_CLIENT_SECRET\") ?? \"\",\n            redirectURL: redirectURL,\n            scopes: scopes,\n            authorizationIssuerURL: issuerURL\n        )\n    }\n\n    private static func nonEmptyEnvironmentValue(_ key: String) -> String? {\n        guard let value = ProcessInfo.processInfo.environment[key]?.trimmingCharacters(in: .whitespacesAndNewlines), !value.isEmpty else {\n            return nil\n        }\n        return value\n    }\n\n    private static func quranProfileURL() -> URL {\n        let url = usePreProductionSyncEnvironment()\n            ? \"https://prelive.quran.com/profile\"\n            : \"https://quran.com/profile\"\n        return URL(validURL: url)\n    }\n\n    private static func usePreProductionSyncEnvironment() -> Bool {\n        guard let issuer = nonEmptyEnvironmentValue(\"QURAN_OAUTH_ISSUER_URL\")?.lowercased() else {\n            return false\n        }\n        return issuer.contains(\"staging\") || issuer.contains(\"preprod\") || issuer.contains(\"prelive\") || issuer.contains(\"dev\")\n    }\n}\n\nprivate enum Constant {\n    static let wordsDatabase = Bundle.main\n        .url(forResource: \"words\", withExtension: \"db\")!\n\n    static let appHost: URL = URL(validURL: \"https://quran.app/\")\n\n    static let filesAppHost: URL = URL(validURL: \"https://files.quran.app/\")\n\n    static let databasesURL = FileManager.documentsURL\n        .appendingPathComponent(\"databases\", isDirectory: true)\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Classes/QuranEngineApp-Bridging-Header.h",
    "content": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n"
  },
  {
    "path": "Example/QuranEngineApp/Classes/SceneDelegate.swift",
    "content": "//\n//  SceneDelegate.swift\n//  QuranEngineApp\n//\n//  Created by Mohamed Afifi on 2023-06-24.\n//\n\nimport AppStructureFeature\nimport NoorUI\nimport UIKit\n\nclass SceneDelegate: UIResponder, UIWindowSceneDelegate {\n    // MARK: Internal\n\n    var window: UIWindow?\n    private var launchBuilder: LaunchBuilder?\n\n    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {\n        guard let windowScene = (scene as? UIWindowScene) else { return }\n\n        let window = UIWindow(windowScene: windowScene)\n        window.overrideUserInterfaceStyle = ThemeService.shared.userInterfaceStyle\n        self.window = window\n\n        launchBuilder = LaunchBuilder(container: container)\n        let launchStartup = launchBuilder?.launchStartup()\n        launchStartup?.launch(from: window)\n\n        self.launchStartup = launchStartup\n    }\n\n    func sceneDidDisconnect(_ scene: UIScene) {\n        // Called as the scene is being released by the system.\n        // This occurs shortly after the scene enters the background, or when its session is discarded.\n        // Release any resources associated with this scene that can be re-created the next time the scene connects.\n        // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).\n    }\n\n    func sceneDidBecomeActive(_ scene: UIScene) {\n        // Called when the scene has moved from an inactive state to an active state.\n        // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.\n    }\n\n    func sceneWillResignActive(_ scene: UIScene) {\n        // Called when the scene will move from an active state to an inactive state.\n        // This may occur due to temporary interruptions (ex. an incoming phone call).\n    }\n\n    func sceneWillEnterForeground(_ scene: UIScene) {\n        // Called as the scene transitions from the background to the foreground.\n        // Use this method to undo the changes made on entering the background.\n    }\n\n    func sceneDidEnterBackground(_ scene: UIScene) {\n        // Called as the scene transitions from the foreground to the background.\n        // Use this method to save data, release shared resources, and store enough scene-specific state information\n        // to restore the scene back to its current state.\n    }\n\n    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {\n        guard let urlContext: UIOpenURLContext = URLContexts.first else {\n            return\n        }\n        launchBuilder?.handleIncomingUrl(urlContext: urlContext)\n    }\n\n    // MARK: Private\n\n    private var launchStartup: LaunchStartup?\n    private let container = Container.shared\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>CFBundleURLTypes</key>\n    <array>\n        <dict>\n            <key>CFBundleURLName</key>\n            <string>com.quran.QuranEngineApp</string>\n            <key>CFBundleURLSchemes</key>\n            <array>\n                <string>com.quran.oauth</string>\n                <string>quran</string>\n                <string>quran-ios</string>\n            </array>\n        </dict>\n    </array>\n\t<key>UIApplicationSceneManifest</key>\n\t<dict>\n\t\t<key>UIApplicationSupportsMultipleScenes</key>\n\t\t<false/>\n\t\t<key>UISceneConfigurations</key>\n\t\t<dict>\n\t\t\t<key>UIWindowSceneSessionRoleApplication</key>\n\t\t\t<array>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>UISceneConfigurationName</key>\n\t\t\t\t\t<string>Default Configuration</string>\n\t\t\t\t\t<key>UISceneDelegateClassName</key>\n\t\t\t\t\t<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>\n\t\t\t\t</dict>\n\t\t\t</array>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/QuranEngineApp/Resources/Assets.xcassets/AccentColor.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"platform\" : \"universal\",\n        \"reference\" : \"systemOrangeColor\"\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"quran-engine2.png\",\n      \"idiom\" : \"universal\",\n      \"platform\" : \"ios\",\n      \"size\" : \"1024x1024\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Resources/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Resources/Assets.xcassets/app-image.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"quran-engine2.png\",\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Resources/Assets.xcassets/quran-engine2.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"quran-engine2.png\",\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Resources/Assets.xcassets/readings/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Resources/Assets.xcassets/readings/hafs_1405.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"sample.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Resources/Assets.xcassets/readings/hafs_1421.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"sample.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Resources/Assets.xcassets/readings/hafs_1439.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"sample.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Resources/Assets.xcassets/readings/hafs_1440.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"sample.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Resources/Assets.xcassets/readings/hafs_1441.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"sample.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Resources/Assets.xcassets/readings/tajweed.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"sample.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Example/QuranEngineApp/Resources/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"21701\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <device id=\"retina6_12\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"21678\"/>\n        <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n        <capability name=\"System colors in document resources\" minToolsVersion=\"11.0\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"393\" height=\"852\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <imageView clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" image=\"quran-engine2\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"nnX-PI-GYt\">\n                                <rect key=\"frame\" x=\"20\" y=\"-406\" width=\"353\" height=\"1464\"/>\n                            </imageView>\n                            <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"QuranEngine Example!  Repo: https://github.com/quran/quran-ios\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"OBk-7F-jBS\">\n                                <rect key=\"frame\" x=\"20\" y=\"939\" width=\"353\" height=\"61\"/>\n                                <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                <nil key=\"textColor\"/>\n                                <nil key=\"highlightedColor\"/>\n                            </label>\n                        </subviews>\n                        <viewLayoutGuide key=\"safeArea\" id=\"6Tk-OE-BBY\"/>\n                        <color key=\"backgroundColor\" systemColor=\"systemBackgroundColor\"/>\n                        <constraints>\n                            <constraint firstItem=\"OBk-7F-jBS\" firstAttribute=\"top\" secondItem=\"nnX-PI-GYt\" secondAttribute=\"bottom\" constant=\"-119\" id=\"Fde-Yi-zbb\"/>\n                            <constraint firstItem=\"nnX-PI-GYt\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerY\" constant=\"-100\" id=\"Lx6-SN-1fZ\"/>\n                            <constraint firstItem=\"nnX-PI-GYt\" firstAttribute=\"leading\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"leading\" constant=\"20\" id=\"mKZ-J6-HTN\"/>\n                            <constraint firstItem=\"OBk-7F-jBS\" firstAttribute=\"trailing\" secondItem=\"nnX-PI-GYt\" secondAttribute=\"trailing\" id=\"r2i-Lo-2zW\"/>\n                            <constraint firstItem=\"OBk-7F-jBS\" firstAttribute=\"leading\" secondItem=\"nnX-PI-GYt\" secondAttribute=\"leading\" id=\"rEL-77-kqA\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"nnX-PI-GYt\" secondAttribute=\"trailing\" constant=\"20\" id=\"ww1-wr-8ww\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"52.671755725190835\" y=\"374.64788732394368\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"quran-engine2\" width=\"1464\" height=\"1464\"/>\n        <systemColor name=\"systemBackgroundColor\">\n            <color white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n        </systemColor>\n    </resources>\n</document>\n"
  },
  {
    "path": "Example/QuranEngineApp/Resources/reciters.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<array>\n\t<dict>\n\t\t<key>category</key>\n\t\t<string>arabic</string>\n\t\t<key>databaseName</key>\n\t\t<string>abdul_basit_mujawwad</string>\n\t\t<key>hasGaplessAlternative</key>\n\t\t<false/>\n\t\t<key>id</key>\n\t\t<integer>23</integer>\n\t\t<key>name</key>\n\t\t<string>qari_abdulbaset_mujawwad_gapless</string>\n\t\t<key>path</key>\n\t\t<string>abdulbaset_mujawwad</string>\n\t\t<key>url</key>\n\t\t<string>https://download.quranicaudio.com/quran/abdulbaset_mujawwad/</string>\n\t</dict>\n\t<dict>\n\t\t<key>category</key>\n\t\t<string>arabic</string>\n\t\t<key>databaseName</key>\n\t\t<string>husary</string>\n\t\t<key>hasGaplessAlternative</key>\n\t\t<false/>\n\t\t<key>id</key>\n\t\t<integer>1</integer>\n\t\t<key>name</key>\n\t\t<string>qari_husary_gapless</string>\n\t\t<key>path</key>\n\t\t<string>husary</string>\n\t\t<key>url</key>\n\t\t<string>https://download.quranicaudio.com/quran/mahmood_khaleel_al-husaree/</string>\n\t</dict>\n\t<dict>\n\t\t<key>category</key>\n\t\t<string>arabic</string>\n\t\t<key>databaseName</key>\n\t\t<string></string>\n\t\t<key>hasGaplessAlternative</key>\n\t\t<false/>\n\t\t<key>id</key>\n\t\t<integer>16</integer>\n\t\t<key>name</key>\n\t\t<string>qari_minshawi_mujawwad</string>\n\t\t<key>path</key>\n\t\t<string>13</string>\n\t\t<key>url</key>\n\t\t<string>https://mirrors.quranicaudio.com/everyayah/Minshawy_Mujawwad_192kbps/</string>\n\t</dict>\n</array>\n</plist>\n"
  },
  {
    "path": "Example/QuranEngineApp.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 56;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tD975EDC62A4791D6009DE942 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D975EDC52A4791D6009DE942 /* AppDelegate.swift */; };\n\t\tD975EDC82A4791D6009DE942 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D975EDC72A4791D6009DE942 /* SceneDelegate.swift */; };\n\t\tD975EDCF2A4791D7009DE942 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D975EDCE2A4791D7009DE942 /* Assets.xcassets */; };\n\t\tD975EDD22A4791D7009DE942 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D975EDD02A4791D7009DE942 /* LaunchScreen.storyboard */; };\n\t\tD975EDE22A4795BD009DE942 /* AppStructureFeature in Frameworks */ = {isa = PBXBuildFile; productRef = D975EDE12A4795BD009DE942 /* AppStructureFeature */; };\n\t\tD975EDE52A47960D009DE942 /* Container.swift in Sources */ = {isa = PBXBuildFile; fileRef = D975EDE42A47960D009DE942 /* Container.swift */; };\n\t\tD975EDE72A4796AA009DE942 /* Analytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = D975EDE62A4796AA009DE942 /* Analytics.swift */; };\n\t\tD975EDEA2A4799A2009DE942 /* reciters.plist in Resources */ = {isa = PBXBuildFile; fileRef = D975EDE92A4799A2009DE942 /* reciters.plist */; };\n\t\tD98543D32A47C88700F477A2 /* hafs_1405 in Resources */ = {isa = PBXBuildFile; fileRef = D98543D22A47C88700F477A2 /* hafs_1405 */; };\n\t\tD98543DD2A49095800F477A2 /* words.db in Resources */ = {isa = PBXBuildFile; fileRef = D98543DC2A49095800F477A2 /* words.db */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\tD975EDC22A4791D6009DE942 /* QuranEngineApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = QuranEngineApp.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tD975EDC52A4791D6009DE942 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tD975EDC72A4791D6009DE942 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = \"<group>\"; };\n\t\tD975EDCE2A4791D7009DE942 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tD975EDD12A4791D7009DE942 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tD975EDD32A4791D7009DE942 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tD975EDDD2A479335009DE942 /* quran-ios */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = \"quran-ios\"; path = ..; sourceTree = \"<group>\"; };\n\t\tD975EDE42A47960D009DE942 /* Container.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Container.swift; sourceTree = \"<group>\"; };\n\t\tD975EDE62A4796AA009DE942 /* Analytics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Analytics.swift; sourceTree = \"<group>\"; };\n\t\tD975EDE92A4799A2009DE942 /* reciters.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = reciters.plist; sourceTree = \"<group>\"; };\n\t\tD98543D22A47C88700F477A2 /* hafs_1405 */ = {isa = PBXFileReference; lastKnownFileType = folder; path = hafs_1405; sourceTree = \"<group>\"; };\n\t\tD98543D42A47E14200F477A2 /* QuranEngineApp-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"QuranEngineApp-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\tD98543DC2A49095800F477A2 /* words.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = words.db; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tD975EDBF2A4791D6009DE942 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD975EDE22A4795BD009DE942 /* AppStructureFeature in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\tD975EDB92A4791D6009DE942 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD975EDDC2A479335009DE942 /* Packages */,\n\t\t\t\tD975EDC42A4791D6009DE942 /* QuranEngineApp */,\n\t\t\t\tD975EDC32A4791D6009DE942 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD975EDC32A4791D6009DE942 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD975EDC22A4791D6009DE942 /* QuranEngineApp.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD975EDC42A4791D6009DE942 /* QuranEngineApp */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD975EDD92A4791FE009DE942 /* Classes */,\n\t\t\t\tD975EDDA2A479204009DE942 /* Resources */,\n\t\t\t\tD975EDD32A4791D7009DE942 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = QuranEngineApp;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD975EDD92A4791FE009DE942 /* Classes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD975EDC52A4791D6009DE942 /* AppDelegate.swift */,\n\t\t\t\tD975EDC72A4791D6009DE942 /* SceneDelegate.swift */,\n\t\t\t\tD975EDE42A47960D009DE942 /* Container.swift */,\n\t\t\t\tD975EDE62A4796AA009DE942 /* Analytics.swift */,\n\t\t\t\tD98543D42A47E14200F477A2 /* QuranEngineApp-Bridging-Header.h */,\n\t\t\t);\n\t\t\tpath = Classes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD975EDDA2A479204009DE942 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD975EDCE2A4791D7009DE942 /* Assets.xcassets */,\n\t\t\t\tD98543D22A47C88700F477A2 /* hafs_1405 */,\n\t\t\t\tD975EDD02A4791D7009DE942 /* LaunchScreen.storyboard */,\n\t\t\t\tD975EDE92A4799A2009DE942 /* reciters.plist */,\n\t\t\t\tD98543DC2A49095800F477A2 /* words.db */,\n\t\t\t);\n\t\t\tpath = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD975EDDC2A479335009DE942 /* Packages */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD975EDDD2A479335009DE942 /* quran-ios */,\n\t\t\t);\n\t\t\tname = Packages;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tD975EDC12A4791D6009DE942 /* QuranEngineApp */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = D975EDD62A4791D7009DE942 /* Build configuration list for PBXNativeTarget \"QuranEngineApp\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD975EDBE2A4791D6009DE942 /* Sources */,\n\t\t\t\tD975EDBF2A4791D6009DE942 /* Frameworks */,\n\t\t\t\tD975EDC02A4791D6009DE942 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = QuranEngineApp;\n\t\t\tpackageProductDependencies = (\n\t\t\t\tD975EDE12A4795BD009DE942 /* AppStructureFeature */,\n\t\t\t);\n\t\t\tproductName = QuranEngineApp;\n\t\t\tproductReference = D975EDC22A4791D6009DE942 /* QuranEngineApp.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tD975EDBA2A4791D6009DE942 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tBuildIndependentTargetsInParallel = 1;\n\t\t\t\tLastSwiftUpdateCheck = 1430;\n\t\t\t\tLastUpgradeCheck = 1510;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tD975EDC12A4791D6009DE942 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 14.3;\n\t\t\t\t\t\tLastSwiftMigration = 1430;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = D975EDBD2A4791D6009DE942 /* Build configuration list for PBXProject \"QuranEngineApp\" */;\n\t\t\tcompatibilityVersion = \"Xcode 14.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = D975EDB92A4791D6009DE942;\n\t\t\tpackageReferences = (\n\t\t\t\tD975EDEB2A479A50009DE942 /* XCLocalSwiftPackageReference \"..\" */,\n\t\t\t);\n\t\t\tproductRefGroup = D975EDC32A4791D6009DE942 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tD975EDC12A4791D6009DE942 /* QuranEngineApp */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tD975EDC02A4791D6009DE942 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD98543D32A47C88700F477A2 /* hafs_1405 in Resources */,\n\t\t\t\tD975EDD22A4791D7009DE942 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tD98543DD2A49095800F477A2 /* words.db in Resources */,\n\t\t\t\tD975EDCF2A4791D7009DE942 /* Assets.xcassets in Resources */,\n\t\t\t\tD975EDEA2A4799A2009DE942 /* reciters.plist in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n\t\t/* Begin PBXSourcesBuildPhase section */\n\t\tD975EDBE2A4791D6009DE942 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tD975EDC62A4791D6009DE942 /* AppDelegate.swift in Sources */,\n\t\t\t\tD975EDE52A47960D009DE942 /* Container.swift in Sources */,\n\t\t\t\tD975EDE72A4796AA009DE942 /* Analytics.swift in Sources */,\n\t\t\t\tD975EDC82A4791D6009DE942 /* SceneDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\tD975EDD02A4791D7009DE942 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tD975EDD12A4791D7009DE942 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\tD975EDD42A4791D7009DE942 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++20\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD975EDD52A4791D7009DE942 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++20\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 16.4;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tD975EDD72A4791D7009DE942 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_TEAM = MKP73M5X4A;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = NO;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = QuranEngineApp/Info.plist;\n\t\t\t\tINFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;\n\t\t\t\tINFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = \"UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = \"UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.20.3;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.quran.QuranEngineApp;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) QURAN_SYNC\";\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"QuranEngineApp/Classes/QuranEngineApp-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tD975EDD82A4791D7009DE942 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEVELOPMENT_TEAM = MKP73M5X4A;\n\t\t\t\tENABLE_USER_SCRIPT_SANDBOXING = NO;\n\t\t\t\tGENERATE_INFOPLIST_FILE = YES;\n\t\t\t\tINFOPLIST_FILE = QuranEngineApp/Info.plist;\n\t\t\t\tINFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;\n\t\t\t\tINFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = \"UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tINFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = \"UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 15.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.20.3;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.quran.QuranEngineApp;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = \"$(inherited) QURAN_SYNC\";\n\t\t\t\tSWIFT_EMIT_LOC_STRINGS = YES;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"QuranEngineApp/Classes/QuranEngineApp-Bridging-Header.h\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tD975EDBD2A4791D6009DE942 /* Build configuration list for PBXProject \"QuranEngineApp\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD975EDD42A4791D7009DE942 /* Debug */,\n\t\t\t\tD975EDD52A4791D7009DE942 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tD975EDD62A4791D7009DE942 /* Build configuration list for PBXNativeTarget \"QuranEngineApp\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tD975EDD72A4791D7009DE942 /* Debug */,\n\t\t\t\tD975EDD82A4791D7009DE942 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\n/* Begin XCLocalSwiftPackageReference section */\n\t\tD975EDEB2A479A50009DE942 /* XCLocalSwiftPackageReference \"..\" */ = {\n\t\t\tisa = XCLocalSwiftPackageReference;\n\t\t\trelativePath = ..;\n\t\t};\n/* End XCLocalSwiftPackageReference section */\n\n/* Begin XCSwiftPackageProductDependency section */\n\t\tD975EDE12A4795BD009DE942 /* AppStructureFeature */ = {\n\t\t\tisa = XCSwiftPackageProductDependency;\n\t\t\tpackage = D975EDEB2A479A50009DE942 /* XCLocalSwiftPackageReference \"..\" */;\n\t\t\tproductName = AppStructureFeature;\n\t\t};\n/* End XCSwiftPackageProductDependency section */\n\t};\n\trootObject = D975EDBA2A4791D6009DE942 /* Project object */;\n}\n"
  },
  {
    "path": "Example/QuranEngineApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example/QuranEngineApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/QuranEngineApp.xcodeproj/xcshareddata/xcschemes/QuranEngineApp.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1510\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"D975EDC12A4791D6009DE942\"\n               BuildableName = \"QuranEngineApp.app\"\n               BlueprintName = \"QuranEngineApp\"\n               ReferencedContainer = \"container:QuranEngineApp.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      shouldAutocreateTestPlan = \"YES\">\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D975EDC12A4791D6009DE942\"\n            BuildableName = \"QuranEngineApp.app\"\n            BlueprintName = \"QuranEngineApp\"\n            ReferencedContainer = \"container:QuranEngineApp.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"D975EDC12A4791D6009DE942\"\n            BuildableName = \"QuranEngineApp.app\"\n            BlueprintName = \"QuranEngineApp\"\n            ReferencedContainer = \"container:QuranEngineApp.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Features/AdvancedAudioOptionsFeature/AdvancedAudioOptions.swift",
    "content": "//\n//  AdvancedAudioOptions.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/8/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport QueuePlayer\nimport QuranAudio\nimport QuranKit\n\npublic struct AdvancedAudioOptions {\n    // MARK: Lifecycle\n\n    public init(reciter: Reciter, start: AyahNumber, end: AyahNumber, verseRuns: Runs, listRuns: Runs) {\n        self.reciter = reciter\n        self.start = start\n        self.end = end\n        self.verseRuns = verseRuns\n        self.listRuns = listRuns\n    }\n\n    // MARK: Public\n\n    public var reciter: Reciter\n    public var start: AyahNumber\n    public var end: AyahNumber\n    public var verseRuns: Runs\n    public var listRuns: Runs\n}\n"
  },
  {
    "path": "Features/AdvancedAudioOptionsFeature/AdvancedAudioOptionsBuilder.swift",
    "content": "//\n//  AdvancedAudioOptionsBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 3/31/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport ReciterListFeature\nimport SwiftUI\n\n@MainActor\npublic struct AdvancedAudioOptionsBuilder {\n    public init() {\n    }\n\n    public func build(withListener listener: AdvancedAudioOptionsListener, options: AdvancedAudioOptions) -> UIViewController {\n        let viewModel = AdvancedAudioOptionsViewModel(\n            options: options,\n            reciterListBuilder: ReciterListBuilder()\n        )\n        viewModel.listener = listener\n\n        let view = AdvancedAudioOptionsView(viewModel: viewModel)\n        let viewController = UIHostingController(rootView: view)\n        return viewController\n    }\n}\n"
  },
  {
    "path": "Features/AdvancedAudioOptionsFeature/AdvancedAudioOptionsView.swift",
    "content": "//\n//  AdvancedAudioOptionsView.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 12/24/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport Localization\nimport NoorUI\nimport QueuePlayer\nimport QuranKit\nimport SwiftUI\nimport UIx\n\nstruct AdvancedAudioOptionsView: View {\n    @StateObject var viewModel: AdvancedAudioOptionsViewModel\n\n    var body: some View {\n        CocoaNavigationView {\n            AdvancedAudioOptionsRootView(viewModel: viewModel)\n        }\n        .standardAppearance(.opaqueBackground().backgroundColor(.systemBackground))\n        .scrollEdgeAppearance(.opaqueBackground().backgroundColor(.systemBackground))\n    }\n}\n\nprivate struct AdvancedAudioOptionsRootView: View {\n    @StateObject var viewModel: AdvancedAudioOptionsViewModel\n\n    var body: some View {\n        AdvancedAudioOptionsRootViewUI(\n            reciterName: viewModel.reciter.localizedName,\n            fromVerse: viewModel.fromVerse,\n            toVerse: viewModel.toVerse,\n            verseRuns: $viewModel.verseRuns,\n            listRuns: $viewModel.listRuns,\n            dismiss: { viewModel.dismiss() },\n            play: { viewModel.play() },\n            lastPageTapped: { viewModel.setLastVerseInPage() },\n            lastSuraTapped: { viewModel.setLastVerseInSura() },\n            lastJuzTapped: { viewModel.setLastVerseInJuz() },\n            lastQuranAyahTapped: { viewModel.setLastVerseInQuran() },\n            updateFromVerseTo: { viewModel.updateFromVerseTo($0) },\n            updateToVerseTo: { viewModel.updateToVerseTo($0) },\n            recitersViewController: { viewModel.recitersViewController() }\n        )\n    }\n}\n\nstruct AdvancedAudioOptionsRootViewUI: View {\n    // MARK: Internal\n\n    let reciterName: String\n    let fromVerse: AyahNumber\n    let toVerse: AyahNumber\n    @Binding var verseRuns: Runs\n    @Binding var listRuns: Runs\n    let dismiss: @MainActor @Sendable () -> Void\n    let play: @MainActor @Sendable () -> Void\n    let lastPageTapped: @MainActor @Sendable () -> Void\n    let lastSuraTapped: @MainActor @Sendable () -> Void\n    let lastJuzTapped: @MainActor @Sendable () -> Void\n    let lastQuranAyahTapped: @MainActor @Sendable () -> Void\n    let updateFromVerseTo: ItemAction<AyahNumber>\n    let updateToVerseTo: ItemAction<AyahNumber>\n    let recitersViewController: () -> UIViewController\n\n    @Environment(\\.navigator) var navigator: Navigator?\n\n    var body: some View {\n        Form {\n            ReciterSection(name: reciterName, image: nil) {\n                navigator?.push {\n                    StaticViewControllerRepresentable(viewController: recitersViewController())\n                }\n            }\n\n            Section(header: Text(l(\"audio.adjust-end-verse-to-the-end.label\"))) {\n                HStack {\n                    ActiveRoundedButton(label: lAndroid(\"quran_page\"), action: lastPageTapped)\n                    Spacer()\n                    ActiveRoundedButton(label: l(\"surah\"), action: lastSuraTapped)\n                    Spacer()\n                    ActiveRoundedButton(label: lAndroid(\"quran_juz2\"), action: lastJuzTapped)\n                    Spacer()\n                    ActiveRoundedButton(label: l(\"quran_alquran\"), action: lastQuranAyahTapped)\n                }\n            }\n\n            Section(header: Text(l(\"audio.playing-verses.label\"))) {\n                VerseStaticView(label: lAndroid(\"from\"), verse: fromVerse) {\n                    navigator?.push {\n                        StaticViewControllerRepresentable(viewController: fromVerseSelectionViewController)\n                    }\n                }\n                VerseStaticView(label: lAndroid(\"to\"), verse: toVerse) {\n                    navigator?.push {\n                        StaticViewControllerRepresentable(viewController: toVerseSelectionViewController)\n                    }\n                }\n            }\n\n            RunsChoicesSection(title: lAndroid(\"play_each_verse\"), runs: $verseRuns)\n            RunsChoicesSection(title: lAndroid(\"play_verses_range\"), runs: $listRuns)\n        }\n        .navigationBarTitleDisplayMode(.inline)\n        .toolbar {\n            ToolbarItem(placement: .navigationBarLeading) {\n                Button(action: dismiss) {\n                    Text(lAndroid(\"cancel\"))\n                }\n            }\n\n            ToolbarItem(placement: .navigationBarTrailing) {\n                Button(action: play) {\n                    NoorSystemImage.play.image\n                }\n            }\n        }\n    }\n\n    // MARK: Private\n\n    private var fromVerseSelectionViewController: UIViewController {\n        let verseSelection = AdvancedAudioVersesViewController(suras: fromVerse.quran.suras, selected: fromVerse) { fromVerse in\n            updateFromVerseTo(fromVerse)\n            navigator?.pop()\n        }\n        verseSelection.title = l(\"audio.select-start-verse\")\n        return verseSelection\n    }\n\n    private var toVerseSelectionViewController: UIViewController {\n        let verseSelection = AdvancedAudioVersesViewController(suras: toVerse.quran.suras, selected: toVerse) { toVerse in\n            updateToVerseTo(toVerse)\n            navigator?.pop()\n        }\n        verseSelection.title = l(\"audio.select-start-verse\")\n        return verseSelection\n    }\n}\n\nprivate struct RunsChoicesSection: View {\n    let title: String\n    @Binding var runs: Runs\n\n    var body: some View {\n        Section(header: Text(title.replacingOccurrences(of: \":\", with: \"\"))) {\n            ChoicesView(items: Runs.sorted, selection: $runs) {\n                $0.localizedDescription\n            }\n        }\n    }\n}\n\nprivate struct VerseStaticView: View {\n    let label: String\n    let verse: AyahNumber\n    let action: AsyncAction\n\n    var body: some View {\n        NoorListItem(\n            title: .text(label),\n            subtitle: .init(text: verse.localizedNameWithSuraNumber, location: .trailing),\n            accessory: .disclosureIndicator,\n            action: action\n        )\n    }\n}\n\nprivate struct ReciterSection: View {\n    let name: String\n    let image: String?\n    let action: AsyncAction\n\n    var body: some View {\n        Section {\n            NoorListItem(\n                title: .text(name),\n                accessory: .disclosureIndicator,\n                action: action\n            )\n        }\n    }\n}\n\n#Preview {\n    struct Container: View {\n        @State var verseRuns: Runs = .one\n        @State var listRuns: Runs = .three\n\n        var body: some View {\n            AdvancedAudioOptionsRootViewUI(\n                reciterName: \"Mishary\",\n                fromVerse: Quran.hafsMadani1405.suras[0].firstVerse,\n                toVerse: Quran.hafsMadani1405.suras[0].lastVerse,\n                verseRuns: $verseRuns,\n                listRuns: $listRuns,\n                dismiss: {},\n                play: {},\n                lastPageTapped: {},\n                lastSuraTapped: {},\n                lastJuzTapped: {},\n                lastQuranAyahTapped: {},\n                updateFromVerseTo: { _ in },\n                updateToVerseTo: { _ in },\n                recitersViewController: { UIViewController() }\n            )\n        }\n    }\n\n    return Container()\n}\n"
  },
  {
    "path": "Features/AdvancedAudioOptionsFeature/AdvancedAudioOptionsViewModel.swift",
    "content": "//\n//  AdvancedAudioOptionsViewModel.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 3/31/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport Combine\nimport NoorUI\nimport QueuePlayer\nimport QuranAudio\nimport QuranKit\nimport QuranTextKit\nimport ReciterListFeature\nimport SwiftUI\n\n@MainActor\npublic protocol AdvancedAudioOptionsListener: AnyObject {\n    func updateAudioOptions(to newOptions: AdvancedAudioOptions)\n    func dismissAudioOptions()\n}\n\n@MainActor\nfinal class AdvancedAudioOptionsViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    init(\n        options: AdvancedAudioOptions,\n        reciterListBuilder: ReciterListBuilder\n    ) {\n        self.options = options\n        self.reciterListBuilder = reciterListBuilder\n        reciter = options.reciter\n        fromVerse = options.start\n        toVerse = options.end\n        verseRuns = options.verseRuns\n        listRuns = options.listRuns\n    }\n\n    // MARK: Internal\n\n    weak var listener: AdvancedAudioOptionsListener?\n\n    @Published var fromVerse: AyahNumber\n    @Published var toVerse: AyahNumber\n    @Published var verseRuns: Runs\n    @Published var listRuns: Runs\n    @Published var reciter: Reciter\n\n    var suras: [Sura] {\n        options.start.quran.suras\n    }\n\n    func play() {\n        listener?.updateAudioOptions(to: currentOptions())\n        dismiss()\n    }\n\n    func dismiss() {\n        listener?.dismissAudioOptions()\n    }\n\n    // MARK: - Updating Last Ayah\n\n    func updateFromVerseTo(_ from: AyahNumber) {\n        fromVerse = from\n        if toVerse < from {\n            toVerse = from\n        }\n    }\n\n    func updateToVerseTo(_ to: AyahNumber) {\n        toVerse = to\n        if to < fromVerse {\n            fromVerse = to\n        }\n    }\n\n    func setLastVerseInPage() {\n        setLastVerse(using: PageBasedLastAyahFinder())\n    }\n\n    func setLastVerseInJuz() {\n        setLastVerse(using: JuzBasedLastAyahFinder())\n    }\n\n    func setLastVerseInSura() {\n        for sura in suras {\n            if sura.verses.contains(fromVerse) {\n                updateToVerseTo(sura.verses.last!)\n            }\n        }\n    }\n\n    func setLastVerseInQuran() {\n        setLastVerse(using: QuranBasedLastAyahFinder())\n    }\n\n    // MARK: Private\n\n    private let options: AdvancedAudioOptions\n    private let reciterListBuilder: ReciterListBuilder\n\n    private func setLastVerse(using finder: LastAyahFinder) {\n        let verse = finder.findLastAyah(startAyah: fromVerse)\n        updateToVerseTo(verse)\n    }\n\n    private func currentOptions() -> AdvancedAudioOptions {\n        return AdvancedAudioOptions(\n            reciter: reciter,\n            start: fromVerse,\n            end: toVerse,\n            verseRuns: verseRuns,\n            listRuns: listRuns\n        )\n    }\n}\n\nextension AdvancedAudioOptionsViewModel: ReciterListListener {\n    func recitersViewController() -> UIViewController {\n        reciterListBuilder.build(withListener: self, standalone: false)\n    }\n\n    func onSelectedReciterChanged(to reciter: Reciter) {\n        self.reciter = reciter\n    }\n}\n"
  },
  {
    "path": "Features/AdvancedAudioOptionsFeature/AdvancedAudioVersesViewController.swift",
    "content": "//\n//  AdvancedAudioVersesViewController.swift\n//\n//\n//  Created by Afifi, Mohamed on 10/10/21.\n//\n\nimport QuranKit\nimport UIKit\n\nclass AdvancedAudioVersesViewController: UITableViewController {\n    // MARK: Lifecycle\n\n    init(suras: [Sura], selected: AyahNumber, onSelection: @MainActor @escaping (AyahNumber) -> Void) {\n        self.suras = suras\n        self.selected = selected\n        self.onSelection = onSelection\n        super.init(style: .insetGrouped)\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Internal\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        tableView.register(UITableViewCell.self, forCellReuseIdentifier: \"cell\")\n        tableView.rowHeight = UITableView.automaticDimension\n        tableView.estimatedRowHeight = 44\n\n        if let selectedIndexPath = selectedIndexPath() {\n            DispatchQueue.main.async {\n                self.tableView?.scrollToRow(at: selectedIndexPath, at: .middle, animated: false)\n            }\n        }\n    }\n\n    override func numberOfSections(in tableView: UITableView) -> Int {\n        suras.count\n    }\n\n    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        suras[section].verses.count\n    }\n\n    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = tableView.dequeueReusableCell(withIdentifier: \"cell\", for: indexPath)\n        let verse = verseAtIndexPath(indexPath)\n        cell.textLabel?.text = verse.localizedName\n        cell.textLabel?.font = .preferredFont(forTextStyle: .body)\n        cell.accessoryType = verse == selected ? .checkmark : .none\n        return cell\n    }\n\n    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n        suras[section].localizedName()\n    }\n\n    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        onSelection(verseAtIndexPath(indexPath))\n    }\n\n    // MARK: Private\n\n    private let onSelection: (AyahNumber) -> Void\n    private let suras: [Sura]\n    private let selected: AyahNumber\n\n    private func selectedIndexPath() -> IndexPath? {\n        for (section, sura) in suras.enumerated() {\n            for (item, verse) in sura.verses.enumerated() {\n                if verse == selected {\n                    return IndexPath(item: item, section: section)\n                }\n            }\n        }\n        return nil\n    }\n\n    private func verseAtIndexPath(_ indexPath: IndexPath) -> AyahNumber {\n        suras[indexPath.section].verses[indexPath.item]\n    }\n}\n"
  },
  {
    "path": "Features/AdvancedAudioOptionsFeature/Runs++.swift",
    "content": "//\n//  Runs++.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 12/26/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport Localization\nimport QueuePlayer\n\nextension Runs {\n    static var sorted: [Runs] {\n        [.one, .two, .three, .indefinite]\n    }\n\n    var localizedDescription: String {\n        switch self {\n        case .one: return lAndroid(\"repeatValues[0]\")\n        case .two: return lAndroid(\"repeatValues[1]\")\n        case .three: return lAndroid(\"repeatValues[2]\")\n        case .four: fatalError(\"Not implemented\")\n        case .indefinite: return lAndroid(\"repeatValues[3]\")\n        }\n    }\n}\n"
  },
  {
    "path": "Features/AppDependencies/AppDependencies.swift",
    "content": "//\n//  AppDependencies.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-18.\n//\n\nimport Analytics\nimport AnnotationsService\nimport AuthenticationClient\nimport BatchDownloader\nimport Foundation\nimport LastPagePersistence\nimport NotePersistence\nimport PageBookmarkPersistence\nimport QuranResources\nimport QuranTextKit\nimport ReadingService\n\npublic protocol AppDependencies {\n    var databasesURL: URL { get }\n    var quranUthmaniV2Database: URL { get }\n    var wordsDatabase: URL { get }\n    var appHost: URL { get }\n    var filesAppHost: URL { get }\n    var quranProfileURL: URL { get }\n    var logsDirectory: URL { get }\n    var databasesDirectory: URL { get }\n\n    var supportsCloudKit: Bool { get }\n\n    var downloadManager: DownloadManager { get }\n    var analytics: AnalyticsLibrary { get }\n    var readingResources: ReadingResourcesService { get }\n    var remoteResources: ReadingRemoteResources? { get }\n\n    var lastPagePersistence: LastPagePersistence { get }\n    var notePersistence: NotePersistence { get }\n    var pageBookmarkPersistence: PageBookmarkPersistence { get }\n\n    var authenticationClient: (any AuthenticationClient)? { get }\n}\n\nextension AppDependencies {\n    public var quranUthmaniV2Database: URL { QuranResources.quranUthmaniV2Database }\n\n    public func textDataService() -> QuranTextDataService {\n        QuranTextDataService(\n            databasesURL: databasesURL,\n            quranFileURL: quranUthmaniV2Database\n        )\n    }\n\n    public func noteService() -> NoteService {\n        NoteService(\n            persistence: notePersistence,\n            textService: textDataService(),\n            analytics: analytics\n        )\n    }\n}\n"
  },
  {
    "path": "Features/AppMigrationFeature/FileSystemMigrator.swift",
    "content": "//\n//  FileSystemMigrator.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 8/8/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport AppMigrator\nimport Foundation\nimport Localization\nimport ReciterService\nimport Utilities\n\npublic struct FileSystemMigrator: Migrator {\n    // MARK: Lifecycle\n\n    public init(databasesURL: URL, recitersRetreiver: ReciterDataRetriever) {\n        self.databasesURL = databasesURL\n        self.recitersRetreiver = recitersRetreiver\n    }\n\n    // MARK: Public\n\n    public var blocksUI: Bool { true }\n    public var uiTitle: String? { l(\"update.filesystem.title\") }\n\n    public func execute(update: LaunchVersionUpdate) async {\n        await arrangeFiles()\n    }\n\n    // MARK: Private\n\n    private let databasesURL: URL\n    private let recitersRetreiver: ReciterDataRetriever\n\n    private func arrangeFiles() async {\n        // move databases\n        move(FileManager.documentsPath.stringByAppendingPath(\"last_pages.db\"), to: databasesURL.path.stringByAppendingPath(\"last_pages.db\"))\n        move(FileManager.documentsPath.stringByAppendingPath(\"bookmarks.db\"), to: databasesURL.path.stringByAppendingPath(\"bookmarks.db\"))\n\n        // move audio files\n        let reciters = await recitersRetreiver.getReciters()\n        for reciter in reciters {\n            move(reciter.oldLocalFolder().url, to: reciter.localFolder().url)\n        }\n    }\n\n    private func move(_ source: String, to desitnation: String) {\n        let sourceURL = URL(fileURLWithPath: source)\n        let desitnationURL = URL(fileURLWithPath: desitnation)\n        move(sourceURL, to: desitnationURL)\n    }\n\n    private func move(_ source: URL, to destination: URL) {\n        let fileManager = FileManager.default\n\n        let destinationDir = destination.deletingLastPathComponent()\n        try? fileManager.createDirectory(at: destinationDir, withIntermediateDirectories: true)\n        try? fileManager.moveItem(at: source, to: destination)\n    }\n}\n"
  },
  {
    "path": "Features/AppMigrationFeature/MigrationView.swift",
    "content": "//\n//  MigrationView.swift\n//  Quran\n//\n//  Created by AI Assistant on 12/2/25.\n//\n\nimport Foundation\nimport NoorUI\nimport SwiftUI\n\nstruct MigrationView: View {\n    @ObservedObject var viewModel: MigrationViewModel\n\n    var body: some View {\n        ZStack {\n            Color(.systemBackground)\n                .ignoresSafeArea()\n\n            VStack {\n                ProgressView()\n\n                Text(viewModel.titlesText)\n                    .font(.body)\n                    .multilineTextAlignment(.center)\n                    .foregroundColor(.primary)\n                    .padding(.horizontal, 24)\n            }\n        }\n    }\n}\n\n@MainActor\nfinal class MigrationViewModel: ObservableObject {\n    @Published private(set) var titles: [String]\n\n    init(titles: [String]) {\n        self.titles = titles\n    }\n\n    func setTitles(_ titles: Set<String>) {\n        let sanitized = titles.filter { !$0.isEmpty }\n        self.titles = sanitized.sorted()\n    }\n\n    var titlesText: String {\n        titles.joined(separator: \"\\n\")\n    }\n}\n"
  },
  {
    "path": "Features/AppMigrationFeature/MigrationViewController.swift",
    "content": "//\n//  MigrationViewController.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 8/8/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport NoorUI\nimport SwiftUI\nimport UIKit\n\n@MainActor\npublic final class MigrationViewController: BaseViewController {\n    // MARK: Lifecycle\n\n    public init() {\n        let viewModel = MigrationViewModel(titles: [])\n        self.viewModel = viewModel\n        super.init(nibName: nil, bundle: nil)\n\n        let viewController = UIHostingController(rootView: MigrationView(viewModel: viewModel))\n        addFullScreenChild(viewController)\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Public\n\n    public func setTitles(_ titles: Set<String>) {\n        viewModel.setTitles(titles)\n    }\n\n    // MARK: Private\n\n    private let viewModel: MigrationViewModel\n}\n"
  },
  {
    "path": "Features/AppMigrationFeature/RecitersPathMigrator.swift",
    "content": "//\n//  RecitersPathMigrator.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2021-12-07.\n//  Copyright © 2021 Quran.com. All rights reserved.\n//\n\nimport AppMigrator\nimport Foundation\nimport Localization\nimport QuranAudio\nimport Utilities\n\npublic struct RecitersPathMigrator: Migrator {\n    // MARK: Lifecycle\n\n    public init() {}\n\n    // MARK: Public\n\n    public var blocksUI: Bool { true }\n    public var uiTitle: String? { l(\"update.filesystem.title\") }\n\n    public func execute(update: LaunchVersionUpdate) async {\n        arrangeFiles()\n    }\n\n    // MARK: Private\n\n    private func arrangeFiles() {\n        // move reciters to Android paths\n        move(\"18\", to: \"sa3d_alghamidi\") // reciter_saad_al_ghamidi_gapless\n        move(\"mishari_alafasy_cali\", to: \"mishari_cali\") // reciter_afasy_cali_gapless\n        move(\"ahmed_al3ajamy\", to: \"ahmed_alajamy\") // reciter_ajamy_gapless\n        move(\"maher_al_muaiqly\", to: \"muaiqly_kfgqpc\") // reciter_muaiqly_gapless\n    }\n\n    private func move(_ sourcePath: String, to destinationPath: String) {\n        let source = Reciter.audioFiles.appendingPathComponent(sourcePath, isDirectory: true)\n        let destination = Reciter.audioFiles.appendingPathComponent(destinationPath, isDirectory: true)\n\n        let fileManager = FileManager.default\n\n        let destinationDir = destination.deletingLastPathComponent()\n        try? fileManager.createDirectory(at: destinationDir.url, withIntermediateDirectories: true)\n        try? fileManager.moveItem(at: source.url, to: destination.url)\n    }\n}\n"
  },
  {
    "path": "Features/AppStructureFeature/App/AppBuilder.swift",
    "content": "//\n//  AppBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 3/24/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AppDependencies\nimport UIKit\n\n@MainActor\nstruct AppBuilder {\n    let container: AppDependencies\n\n    func build() -> UIViewController {\n        let interactor = AppInteractor(\n            supportsCloudKit: container.supportsCloudKit,\n            analytics: container.analytics,\n            lastPagePersistence: container.lastPagePersistence,\n            tabs: [\n                HomeTabBuilder(container: container),\n                NotesTabBuilder(container: container),\n                BookmarksTabBuilder(container: container),\n                SearchTabBuilder(container: container),\n                SettingsTabBuilder(container: container),\n            ]\n        )\n        let viewController = AppViewController(\n            analytics: container.analytics,\n            interactor: interactor\n        )\n        return viewController\n    }\n}\n"
  },
  {
    "path": "Features/AppStructureFeature/App/AppInteractor.swift",
    "content": "//\n//  AppInteractor.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 3/24/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport Analytics\nimport CloudKit\nimport Crashing\nimport Foundation\nimport LastPagePersistence\nimport VLogging\n\n@MainActor\nfinal class AppInteractor {\n    // MARK: Lifecycle\n\n    init(supportsCloudKit: Bool, analytics: AnalyticsLibrary, lastPagePersistence: LastPagePersistence, tabs: [TabBuildable]) {\n        self.analytics = analytics\n        self.lastPagePersistence = lastPagePersistence\n        self.tabs = tabs\n        self.supportsCloudKit = supportsCloudKit\n    }\n\n    // MARK: Internal\n\n    weak var presenter: AppPresenter?\n\n    func start() {\n        let viewControllers = tabs.map { $0.build() }\n        presenter?.setViewControllers(viewControllers, animated: false)\n\n        guard supportsCloudKit else {\n            return\n        }\n\n        // log cloud kit logged in status\n        DispatchQueue.global().asyncAfter(deadline: .now() + 10) {\n            self.logIsLoggedIntoCloudKit()\n        }\n    }\n\n    // MARK: Private\n\n    private let supportsCloudKit: Bool\n    private let analytics: AnalyticsLibrary\n    private let tabs: [TabBuildable]\n    private let lastPagePersistence: LastPagePersistence\n\n    private nonisolated func logIsLoggedIntoCloudKit() {\n        CKContainer.default().accountStatus { [analytics] status, error in\n            if let error {\n                logger.error(\"Error while checking account status \\(error)\")\n                analytics.cloudkitLoggedIn(.error)\n            } else {\n                analytics.cloudkitLoggedIn(status == .available ? .ok : .fail)\n                if status == .available {\n                    self.logLastPagesMatch()\n                }\n            }\n        }\n    }\n\n    private nonisolated func logLastPagesMatch() {\n        let db = CKContainer.default().privateCloudDatabase\n        let zone = CKRecordZone(zoneName: \"com.apple.coredata.cloudkit.zone\")\n        let query = CKQuery(recordType: \"CD_MO_LastPage\", predicate: NSPredicate(format: \"TRUEPREDICATE\"))\n        db.fetch(withQuery: query, inZoneWith: zone.zoneID, desiredKeys: nil, resultsLimit: CKQueryOperation.maximumResults) { [analytics] result in\n            switch result {\n            case let .failure(error):\n                logger.error(\"Error while accessing CloudKit \\(error)\")\n                analytics.cloudkitLastPagesMatch(.error)\n            case let .success(output):\n                let records = output.matchResults.compactMap { try? $0.1.get() }\n                let ckLastPages = Set(records.compactMap { $0[\"CD_page\"] as? Int })\n                Task {\n                    do {\n                        let cdLastPages = try await self.lastPagePersistence.retrieveAll()\n                        let inSync = Set(cdLastPages.map(\\.page)).isSubset(of: ckLastPages)\n                        analytics.cloudkitLastPagesMatch(inSync ? .ok : .fail)\n                    } catch {\n                        crasher.recordError(error, reason: \"Failed to retrieve last pages from persistence.\")\n                    }\n                }\n            }\n        }\n    }\n}\n\nprivate enum CloudKitStatus: String {\n    case ok\n    case fail\n    case error\n}\n\nprivate extension AnalyticsLibrary {\n    func cloudkitLoggedIn(_ status: CloudKitStatus) {\n        logEvent(\"cloudkitLoggedIn\", value: status.rawValue)\n    }\n\n    func cloudkitLastPagesMatch(_ status: CloudKitStatus) {\n        logEvent(\"cloudkitLastPagesMatch\", value: status.rawValue)\n    }\n}\n"
  },
  {
    "path": "Features/AppStructureFeature/App/AppViewController.swift",
    "content": "//\n//  AppViewController.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/19/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Analytics\nimport UIKit\nimport WhatsNewFeature\n\nprotocol AppPresenter: UITabBarController {\n}\n\nclass AppViewController: UITabBarController, UITabBarControllerDelegate, AppPresenter {\n    // MARK: Lifecycle\n\n    init(analytics: AnalyticsLibrary, interactor: AppInteractor) {\n        self.interactor = interactor\n        whatsNewController = AppWhatsNewController(analytics: analytics)\n        super.init(nibName: nil, bundle: nil)\n        interactor.presenter = self\n        interactor.start()\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Open\n\n    override open var shouldAutorotate: Bool {\n        visibleViewController?.shouldAutorotate ?? super.shouldAutorotate\n    }\n\n    override open var supportedInterfaceOrientations: UIInterfaceOrientationMask {\n        visibleViewController?.supportedInterfaceOrientations ?? super.supportedInterfaceOrientations\n    }\n\n    // MARK: Internal\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        delegate = self\n    }\n\n    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {\n        let targetMask = tabBarController.supportedInterfaceOrientations\n        if let currentMask = tabBarController.view.window?.windowScene?.interfaceOrientation.asMask {\n            if !targetMask.contains(currentMask) {\n                if let interface = targetMask.asOrientation {\n                    UIDevice.current.setValue(interface.rawValue, forKey: \"orientation\")\n                }\n            }\n        }\n    }\n\n    override func viewDidAppear(_ animated: Bool) {\n        super.viewDidAppear(animated)\n\n        // show whats new controller if needed\n        whatsNewController.presentWhatsNewIfNeeded(from: self)\n    }\n\n    // MARK: Private\n\n    private let interactor: AppInteractor\n    private let whatsNewController: AppWhatsNewController\n\n    private var visibleViewController: UIViewController? {\n        presentedViewController ?? selectedViewController\n    }\n}\n\nprivate extension UIInterfaceOrientation {\n    var asMask: UIInterfaceOrientationMask? {\n        switch self {\n        case .portrait: return .portrait\n        case .portraitUpsideDown: return .portraitUpsideDown\n        case .landscapeLeft: return .landscapeLeft\n        case .landscapeRight: return .landscapeRight\n        default: return nil\n        }\n    }\n}\n\nprivate extension UIInterfaceOrientationMask {\n    var asOrientation: UIInterfaceOrientation? {\n        if contains(.portrait) {\n            return .portrait\n        } else if contains(.landscapeLeft) {\n            return .landscapeLeft\n        } else if contains(.landscapeRight) {\n            return .landscapeRight\n        } else if contains(.portraitUpsideDown) {\n            return .portraitUpsideDown\n        } else {\n            return nil\n        }\n    }\n}\n"
  },
  {
    "path": "Features/AppStructureFeature/Common/TabBuilder.swift",
    "content": "//\n//  TabBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 3/31/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport UIKit\n\n@MainActor\npublic protocol TabBuildable {\n    func build() -> UIViewController\n}\n"
  },
  {
    "path": "Features/AppStructureFeature/Common/TabInteractor.swift",
    "content": "//\n//  TabInteractor.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 3/24/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport FeaturesSupport\nimport QuranContentFeature\nimport QuranKit\nimport QuranViewFeature\nimport UIKit\n\nprotocol TabPresenter: UINavigationController {\n}\n\nclass TabInteractor: QuranNavigator {\n    // MARK: Lifecycle\n\n    init(quranBuilder: QuranBuilder) {\n        self.quranBuilder = quranBuilder\n    }\n\n    // MARK: Internal\n\n    weak var presenter: TabPresenter?\n\n    func navigateTo(page: Page, lastPage: Page?, highlightingSearchAyah: AyahNumber?) {\n        let input = QuranInput(initialPage: page, lastPage: lastPage, highlightingSearchAyah: highlightingSearchAyah)\n        let viewController = quranBuilder.build(input: input)\n        presenter?.pushViewController(viewController, animated: true)\n    }\n\n    func start() {\n    }\n\n    // MARK: Private\n\n    private let quranBuilder: QuranBuilder\n}\n"
  },
  {
    "path": "Features/AppStructureFeature/Common/TabViewController.swift",
    "content": "//\n//  TabViewController.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 3/24/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport NoorUI\nimport UIKit\n\nclass TabViewController: BaseNavigationController, TabPresenter {\n    // MARK: Lifecycle\n\n    init(interactor: TabInteractor) {\n        self.interactor = interactor\n        super.init(nibName: nil, bundle: nil)\n        tabBarItem = getTabBarItem()\n\n        interactor.presenter = self\n        interactor.start()\n    }\n\n    @available(*, unavailable)\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"Not implemented\")\n    }\n\n    // MARK: Internal\n\n    func getTabBarItem() -> UITabBarItem {\n        fatalError(\"\\(#function) should be subclassed\")\n    }\n\n    // MARK: Private\n\n    private let interactor: TabInteractor\n}\n"
  },
  {
    "path": "Features/AppStructureFeature/Launch/LaunchBuilder.swift",
    "content": "//\n//  LaunchBuilder.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2022-01-09.\n//  Copyright © 2022 Quran.com. All rights reserved.\n//\n\nimport AppDependencies\nimport AppMigrationFeature\nimport AudioUpdater\nimport ReciterService\nimport SettingsService\nimport UIKit\n\n@MainActor\npublic struct LaunchBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func launchStartup() -> LaunchStartup {\n        let audioUpdater = AudioUpdater(baseURL: container.appHost)\n        let fileSystemMigrator = FileSystemMigrator(\n            databasesURL: container.databasesURL,\n            recitersRetreiver: ReciterDataRetriever()\n        )\n        return LaunchStartup(\n            appBuilder: AppBuilder(container: container),\n            audioUpdater: audioUpdater,\n            fileSystemMigrator: fileSystemMigrator,\n            recitersPathMigrator: RecitersPathMigrator(),\n            reviewService: ReviewService(analytics: container.analytics)\n        )\n    }\n\n    public func handleIncomingUrl(urlContext: UIOpenURLContext) {\n        let url = urlContext.url\n\n        if url.scheme == \"quran\" || url.scheme == \"quran-ios\" {\n            let path: String = if #available(iOS 16.0, *) {\n                url.path(percentEncoded: true)\n            } else {\n                url.path\n            }\n            _ = navigateTo(path: path)\n        }\n    }\n\n    // MARK: Internal\n\n    let container: AppDependencies\n\n    // MARK: Public\n\n    private func navigateTo(path: String) -> Bool {\n        // TODO: Implement the actual navigation\n        return true\n    }\n}\n"
  },
  {
    "path": "Features/AppStructureFeature/Launch/LaunchStartup.swift",
    "content": "//\n//  LaunchStartup.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 8/8/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport AppMigrationFeature\nimport AppMigrator\nimport AudioUpdater\nimport SettingsService\nimport UIKit\nimport VLogging\n\n@MainActor\npublic final class LaunchStartup {\n    // MARK: Lifecycle\n\n    init(\n        appBuilder: AppBuilder,\n        audioUpdater: AudioUpdater,\n        fileSystemMigrator: FileSystemMigrator,\n        recitersPathMigrator: RecitersPathMigrator,\n        reviewService: ReviewService\n    ) {\n        self.appBuilder = appBuilder\n        self.audioUpdater = audioUpdater\n        self.fileSystemMigrator = fileSystemMigrator\n        self.recitersPathMigrator = recitersPathMigrator\n        self.reviewService = reviewService\n    }\n\n    // MARK: Public\n\n    public func launch(from window: UIWindow) {\n        upgradeIfNeeded(window: window)\n    }\n\n    // MARK: Private\n\n    private let fileSystemMigrator: FileSystemMigrator\n    private let recitersPathMigrator: RecitersPathMigrator\n    private let appBuilder: AppBuilder\n    private let audioUpdater: AudioUpdater\n    private let reviewService: ReviewService\n\n    private let appMigrator = AppMigrator()\n    private var appViewController: UIViewController?\n\n    private func upgradeIfNeeded(window: UIWindow) {\n        registerMigrators()\n        switch appMigrator.migrationStatus() {\n        case .noMigration:\n            showApp(window: window)\n        case let .migrate(blocksUI, titles):\n            if blocksUI {\n                logger.notice(\"Performing long upgrade task: \\(titles)\")\n                let migrationVC = MigrationViewController()\n                migrationVC.setTitles(titles)\n                window.rootViewController = migrationVC\n                window.makeKeyAndVisible()\n            }\n            Task {\n                await appMigrator.migrate()\n                showApp(window: window)\n            }\n        }\n    }\n\n    private func showApp(window: UIWindow) {\n        if self.appViewController != nil {\n            return\n        }\n\n        updateAudioIfNeeded()\n\n        let wasUpdated = window.rootViewController != nil\n\n        let appViewController = appBuilder.build()\n        self.appViewController = appViewController\n\n        if wasUpdated {\n            appViewController.transition(to: window, duration: 0.3, options: .transitionCrossDissolve)\n        } else {\n            appViewController.launch(from: window)\n            reviewService.checkForReview(in: window)\n        }\n    }\n\n    private func registerMigrators() {\n        appMigrator.register(migrator: fileSystemMigrator, for: \"1.16.0\")\n        appMigrator.register(migrator: recitersPathMigrator, for: \"1.19.1\")\n    }\n\n    private func updateAudioIfNeeded() {\n        // don't run audio updater after upgrading the app\n        if case .sameVersion = appMigrator.launchVersion {\n            Task {\n                await audioUpdater.updateAudioIfNeeded()\n            }\n        }\n    }\n}\n\nprivate extension UIViewController {\n    func launch(from window: UIWindow) {\n        window.rootViewController = self\n        window.makeKeyAndVisible()\n    }\n\n    func transition(to window: UIWindow, duration: TimeInterval, options: UIView.AnimationOptions) {\n        window.switchRootViewController(to: self, duration: duration, options: options)\n    }\n}\n"
  },
  {
    "path": "Features/AppStructureFeature/Tabs/BookmarksTab.swift",
    "content": "//\n//  BookmarksTab.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/14/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport AppDependencies\nimport BookmarksFeature\nimport Localization\nimport QuranViewFeature\nimport UIKit\n\nstruct BookmarksTabBuilder: TabBuildable {\n    let container: AppDependencies\n\n    func build() -> UIViewController {\n        let interactor = BookmarksTabInteractor(\n            quranBuilder: QuranBuilder(container: container),\n            bookmarksBuilder: BookmarksBuilder(container: container)\n        )\n        let viewController = BookmarksTabViewController(interactor: interactor)\n        viewController.navigationBar.prefersLargeTitles = true\n        return viewController\n    }\n}\n\nprivate final class BookmarksTabInteractor: TabInteractor {\n    // MARK: Lifecycle\n\n    init(quranBuilder: QuranBuilder, bookmarksBuilder: BookmarksBuilder) {\n        self.bookmarksBuilder = bookmarksBuilder\n        super.init(quranBuilder: quranBuilder)\n    }\n\n    // MARK: Internal\n\n    override func start() {\n        let rootViewController = bookmarksBuilder.build(withListener: self)\n        presenter?.setViewControllers([rootViewController], animated: false)\n    }\n\n    // MARK: Private\n\n    private let bookmarksBuilder: BookmarksBuilder\n}\n\nprivate class BookmarksTabViewController: TabViewController {\n    override func getTabBarItem() -> UITabBarItem {\n        UITabBarItem(\n            title: lAndroid(\"menu_bookmarks\"),\n            image: .symbol(\"bookmark\"),\n            selectedImage: .symbol(\"bookmark.fill\")\n        )\n    }\n}\n"
  },
  {
    "path": "Features/AppStructureFeature/Tabs/HomeTab.swift",
    "content": "//\n//  HomeTab.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/14/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport AppDependencies\nimport HomeFeature\nimport Localization\nimport QuranViewFeature\nimport UIKit\n\nstruct HomeTabBuilder: TabBuildable {\n    let container: AppDependencies\n\n    func build() -> UIViewController {\n        let interactor = HomeTabInteractor(\n            quranBuilder: QuranBuilder(container: container),\n            homeBuilder: HomeBuilder(container: container)\n        )\n        let viewController = HomeTabViewController(interactor: interactor)\n        viewController.navigationBar.prefersLargeTitles = true\n        return viewController\n    }\n}\n\nprivate final class HomeTabInteractor: TabInteractor {\n    // MARK: Lifecycle\n\n    init(quranBuilder: QuranBuilder, homeBuilder: HomeBuilder) {\n        self.homeBuilder = homeBuilder\n        super.init(quranBuilder: quranBuilder)\n    }\n\n    // MARK: Internal\n\n    override func start() {\n        let rootViewController = homeBuilder.build(withListener: self)\n        presenter?.setViewControllers([rootViewController], animated: false)\n    }\n\n    // MARK: Private\n\n    private let homeBuilder: HomeBuilder\n}\n\nprivate final class HomeTabViewController: TabViewController {\n    override func getTabBarItem() -> UITabBarItem {\n        UITabBarItem(\n            title: \"\\(lAndroid(\"quran_sura\")) / \\(lAndroid(\"quran_juz2\"))\",\n            image: .symbol(\"doc.text\"),\n            selectedImage: .symbol(\"doc.text.fill\")\n        )\n    }\n}\n"
  },
  {
    "path": "Features/AppStructureFeature/Tabs/NotesTab.swift",
    "content": "//\n//  NotesTab.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/14/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport AppDependencies\nimport Localization\nimport NotesFeature\nimport QuranViewFeature\nimport UIKit\n\nstruct NotesTabBuilder: TabBuildable {\n    let container: AppDependencies\n\n    func build() -> UIViewController {\n        let interactor = NotesTabInteractor(\n            quranBuilder: QuranBuilder(container: container),\n            notesBuilder: NotesBuilder(container: container)\n        )\n        let viewController = NotesTabViewController(interactor: interactor)\n        viewController.navigationBar.prefersLargeTitles = true\n        return viewController\n    }\n}\n\nprivate final class NotesTabInteractor: TabInteractor {\n    // MARK: Lifecycle\n\n    init(quranBuilder: QuranBuilder, notesBuilder: NotesBuilder) {\n        self.notesBuilder = notesBuilder\n        super.init(quranBuilder: quranBuilder)\n    }\n\n    // MARK: Internal\n\n    override func start() {\n        let rootViewController = notesBuilder.build(withListener: self)\n        presenter?.setViewControllers([rootViewController], animated: false)\n    }\n\n    // MARK: Private\n\n    private let notesBuilder: NotesBuilder\n}\n\nprivate class NotesTabViewController: TabViewController {\n    override func getTabBarItem() -> UITabBarItem {\n        UITabBarItem(\n            title: l(\"tab.notes\"),\n            image: .symbol(\"text.badge.star\"),\n            selectedImage: .symbol(\"text.badge.star\", withConfiguration: UIImage.SymbolConfiguration(weight: .bold))\n        )\n    }\n}\n"
  },
  {
    "path": "Features/AppStructureFeature/Tabs/SearchTab.swift",
    "content": "//\n//  SearchTab.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/14/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport AppDependencies\nimport QuranViewFeature\nimport SearchFeature\nimport UIKit\n\nstruct SearchTabBuilder: TabBuildable {\n    let container: AppDependencies\n\n    func build() -> UIViewController {\n        let interactor = SearchTabInteractor(\n            quranBuilder: QuranBuilder(container: container),\n            searchBuilder: SearchBuilder(container: container)\n        )\n        let viewController = SearchTabViewController(interactor: interactor)\n        viewController.navigationBar.prefersLargeTitles = true\n        return viewController\n    }\n}\n\nprivate final class SearchTabInteractor: TabInteractor {\n    // MARK: Lifecycle\n\n    init(quranBuilder: QuranBuilder, searchBuilder: SearchBuilder) {\n        self.searchBuilder = searchBuilder\n        super.init(quranBuilder: quranBuilder)\n    }\n\n    // MARK: Internal\n\n    override func start() {\n        let rootViewController = searchBuilder.build(withListener: self)\n        presenter?.setViewControllers([rootViewController], animated: false)\n    }\n\n    // MARK: Private\n\n    private let searchBuilder: SearchBuilder\n}\n\nprivate class SearchTabViewController: TabViewController {\n    override func getTabBarItem() -> UITabBarItem {\n        UITabBarItem(tabBarSystemItem: .search, tag: 0)\n    }\n}\n"
  },
  {
    "path": "Features/AppStructureFeature/Tabs/SettingsTab.swift",
    "content": "//\n//  SettingsTab.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-28.\n//\n\nimport AppDependencies\nimport Localization\nimport NoorUI\nimport QuranViewFeature\nimport SettingsFeature\nimport UIKit\n\nstruct SettingsTabBuilder: TabBuildable {\n    let container: AppDependencies\n\n    func build() -> UIViewController {\n        let interactor = SettingsTabInteractor(\n            quranBuilder: QuranBuilder(container: container),\n            settingsBuilder: SettingsBuilder(container: container)\n        )\n        let viewController = SettingsTabViewController(interactor: interactor)\n        viewController.navigationBar.prefersLargeTitles = true\n        return viewController\n    }\n}\n\nprivate final class SettingsTabInteractor: TabInteractor {\n    // MARK: Lifecycle\n\n    init(quranBuilder: QuranBuilder, settingsBuilder: SettingsBuilder) {\n        self.settingsBuilder = settingsBuilder\n        super.init(quranBuilder: quranBuilder)\n    }\n\n    // MARK: Internal\n\n    override func start() {\n        guard let presenter else {\n            return\n        }\n        let rootViewController = settingsBuilder.build(navigationController: presenter)\n        presenter.setViewControllers([rootViewController], animated: false)\n    }\n\n    // MARK: Private\n\n    private let settingsBuilder: SettingsBuilder\n}\n\nprivate class SettingsTabViewController: TabViewController {\n    override func getTabBarItem() -> UITabBarItem {\n        UITabBarItem(\n            title: lAndroid(\"menu_settings\"),\n            image: NoorImage.settings.uiImage,\n            selectedImage: NoorImage.settingsFilled.uiImage\n        )\n    }\n}\n"
  },
  {
    "path": "Features/AudioBannerFeature/AudioBannerBuilder.swift",
    "content": "//\n//  AudioBannerBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/7/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AdvancedAudioOptionsFeature\nimport AppDependencies\nimport QuranAudioKit\nimport ReciterListFeature\nimport ReciterService\nimport SwiftUI\nimport UIKit\n\n@MainActor\npublic struct AudioBannerBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func build(withListener listener: AudioBannerListener) -> (UIViewController, AudioBannerViewModel) {\n        let viewModel = AudioBannerViewModel(\n            analytics: container.analytics,\n            reciterRetreiver: ReciterDataRetriever(),\n            recentRecitersService: RecentRecitersService(),\n            audioPlayer: QuranAudioPlayer(),\n            downloader: QuranAudioDownloader(\n                baseURL: container.filesAppHost,\n                downloader: container.downloadManager\n            ),\n            reciterListBuilder: ReciterListBuilder(),\n            advancedAudioOptionsBuilder: AdvancedAudioOptionsBuilder()\n        )\n        let view = AudioBannerView(viewModel: viewModel)\n            .enableToastPresenter()\n            .enableUIKitNavigator()\n        let viewController = UIHostingController(rootView: view)\n        viewController.view.backgroundColor = nil\n        viewModel.listener = listener\n        return (viewController, viewModel)\n    }\n\n    // MARK: Internal\n\n    let container: AppDependencies\n}\n"
  },
  {
    "path": "Features/AudioBannerFeature/AudioBannerView.swift",
    "content": "//\n//  AudioBannerView.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-09-23.\n//\n\nimport NoorUI\nimport SwiftUI\nimport UIx\n\nstruct AudioBannerView: View {\n    @StateObject var viewModel: AudioBannerViewModel\n    @Environment(\\.showToast) private var showToast\n    @Environment(\\.uikitNavigator) private var navigator\n    @ScaledMetric private var toastOffset = 100\n\n    var body: some View {\n        let actions = AudioBannerActions(\n            play: { viewModel.playFromBanner() },\n            pause: { viewModel.pauseFromBanner() },\n            resume: { viewModel.resumeFromBanner() },\n            stop: { viewModel.stopFromBanner() },\n            backward: { viewModel.backwardFromBanner() },\n            forward: { viewModel.forwardFromBanner() },\n            cancelDownloading: { await viewModel.cancelDownload() },\n            reciters: { viewModel.presentReciterList() },\n            more: { viewModel.showAdvancedAudioOptions() },\n            setPlaybackRate: { viewModel.updatePlaybackRate(to: $0) }\n        )\n        AudioBannerViewUI(\n            state: viewModel.audioBannerState,\n            actions: actions\n        )\n        .onChange(of: viewModel.toast?.message) { _ in\n            if let toast = viewModel.toast {\n                viewModel.toast = nil\n                showToast?(Toast(toast.message, action: toast.action, bottomOffset: toastOffset))\n            }\n        }\n        .onChange(of: viewModel.viewControllerToPresent) { _ in\n            if let presentingVC = viewModel.viewControllerToPresent {\n                viewModel.viewControllerToPresent = nil\n                navigator?.viewController?.present(presentingVC, animated: true)\n            }\n        }\n        .onChange(of: viewModel.dismissPresentedViewController) { _ in\n            if viewModel.dismissPresentedViewController {\n                viewModel.dismissPresentedViewController = false\n                navigator?.viewController?.dismiss(animated: true)\n            }\n        }\n        .errorAlert(error: $viewModel.error)\n        .taskOnce {\n            await viewModel.start()\n        }\n        .onDisappear {\n            ToastPresenter.shared.dismissCurrentToast()\n        }\n    }\n}\n"
  },
  {
    "path": "Features/AudioBannerFeature/AudioBannerViewModel.swift",
    "content": "//\n//  AudioBannerViewModel.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/7/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AdvancedAudioOptionsFeature\nimport Analytics\nimport BatchDownloader\nimport Crashing\nimport Foundation\nimport Localization\nimport NoorUI\nimport QueuePlayer\nimport QuranAudio\nimport QuranAudioKit\nimport QuranKit\nimport ReciterListFeature\nimport ReciterService\nimport SwiftUI\nimport UIKit\nimport UIx\nimport Utilities\nimport VLogging\n\n@MainActor\npublic protocol AudioBannerListener: AnyObject {\n    var visiblePages: [Page] { get }\n    func highlightReadingAyah(_ ayah: AyahNumber?)\n}\n\nprivate enum PlaybackState {\n    case playing\n    case paused\n    case stopped\n    case downloading(progress: Double)\n}\n\n@MainActor\npublic final class AudioBannerViewModel: ObservableObject {\n    typealias AudioRange = (start: AyahNumber, end: AyahNumber)\n\n    // MARK: Lifecycle\n\n    init(\n        analytics: AnalyticsLibrary,\n        reciterRetreiver: ReciterDataRetriever,\n        recentRecitersService: RecentRecitersService,\n        audioPlayer: QuranAudioPlayer,\n        downloader: QuranAudioDownloader,\n        reciterListBuilder: ReciterListBuilder,\n        advancedAudioOptionsBuilder: AdvancedAudioOptionsBuilder\n    ) {\n        self.analytics = analytics\n        self.reciterRetreiver = reciterRetreiver\n        self.recentRecitersService = recentRecitersService\n        self.audioPlayer = audioPlayer\n        self.downloader = downloader\n        self.reciterListBuilder = reciterListBuilder\n        self.advancedAudioOptionsBuilder = advancedAudioOptionsBuilder\n        playbackRate = AudioPreferences.shared.playbackRate\n\n        setUpAudioPlayerActions()\n        setUpRemoteCommandHandler()\n\n        AudioPreferences.shared.$playbackRate.assign(to: &$playbackRate)\n    }\n\n    // MARK: Public\n\n    public func play(from: AyahNumber, to: AyahNumber?, repeatVerses: Bool) {\n        logger.info(\"AudioBanner: playing from \\(from) to \\(String(describing: to))\")\n        analytics.playFrom(menu: true)\n        play(from: from, to: to, verseRuns: .one, listRuns: repeatVerses ? .indefinite : .one)\n    }\n\n    // MARK: Internal\n\n    weak var listener: AudioBannerListener?\n\n    @Published var error: Error?\n    @Published var toast: (message: String, action: ToastAction?)?\n    @Published var viewControllerToPresent: UIViewController?\n    @Published var dismissPresentedViewController = false\n    @Published var playbackRate: Float\n\n    var audioBannerState: AudioBannerState {\n        switch playingState {\n        case .playing: .playing(paused: false, rate: playbackRate)\n        case .paused: .playing(paused: true, rate: playbackRate)\n        case .stopped: .readyToPlay(reciter: selectedReciter?.localizedName ?? \"\")\n        case .downloading(let progress): .downloading(progress: progress)\n        }\n    }\n\n    func start() async {\n        remoteCommandsHandler?.startListeningToPlayCommand()\n        NotificationCenter.default.addObserver(\n            self,\n            selector: #selector(applicationDidBecomeActive),\n            name: UIApplication.willEnterForegroundNotification,\n            object: nil\n        )\n\n        reciters = await reciterRetreiver.getReciters()\n        logger.info(\"AudioBanner: reciters loaded\")\n\n        let runningDownloads = await downloader.runningAudioDownloads()\n        logger.info(\"AudioBanner: loaded runningAudioDownloads count: \\(runningDownloads.count)\")\n\n        if runningDownloads.isEmpty {\n            playingState = .stopped\n        } else {\n            cancellableTasks.insert(\n                Task {\n                    await observe(runningDownloads)\n                }.asCancellableTask()\n            )\n        }\n    }\n\n    func updatePlaybackRate(to rate: Float) {\n        AudioPreferences.shared.playbackRate = rate\n        audioPlayer.setRate(rate)\n    }\n\n    // MARK: Private\n\n    private var audioRange: AudioRange?\n\n    private let analytics: AnalyticsLibrary\n    private let reciterRetreiver: ReciterDataRetriever\n    private let recentRecitersService: RecentRecitersService\n    private let preferences = ReciterPreferences.shared\n    private let lastAyahFinder: LastAyahFinder = PreferencesLastAyahFinder.shared\n    private let audioPlayer: QuranAudioPlayer\n    private let downloader: QuranAudioDownloader\n    private var remoteCommandsHandler: RemoteCommandsHandler?\n    private let reciterListBuilder: ReciterListBuilder\n    private let advancedAudioOptionsBuilder: AdvancedAudioOptionsBuilder\n\n    private var verseRuns: Runs = .one\n    private var listRuns: Runs = .one\n    private var reciters: [Reciter] = []\n    private var cancellableTasks: Set<CancellableTask> = []\n\n    @Published private var playingState: PlaybackState = .stopped {\n        didSet {\n            logger.info(\"AudioBanner: playingState updated to \\(playingState) - reciter: \\(String(describing: selectedReciter?.id))\")\n            if case .stopped = playingState {\n                onPlayingStateStopped()\n            }\n        }\n    }\n\n    private var selectedReciter: Reciter? {\n        let storedSelectedReciterId = preferences.lastSelectedReciterId\n        let selectedReciter = reciters.first { $0.id == storedSelectedReciterId }\n        if selectedReciter == nil {\n            let firstReciter = reciters.first\n            logger.error(\"AudioBanner: couldn't find reciter \\(storedSelectedReciterId) using \\(String(describing: firstReciter?.id)) instead\")\n            return firstReciter\n        }\n        return selectedReciter\n    }\n\n    private func onPlayingStateStopped() {\n        if let selectedReciter {\n            crasher.setValue(selectedReciter.id, forKey: .reciterId)\n        }\n        listener?.highlightReadingAyah(nil)\n\n        remoteCommandsHandler?.stopListening()\n        remoteCommandsHandler?.startListeningToPlayCommand()\n    }\n\n    @objc\n    private func applicationDidBecomeActive() {\n        // re-assign playingState to update UI\n        let tempPlayingState = playingState\n        playingState = tempPlayingState\n    }\n\n    private func selectReciter(_ reciter: Reciter) {\n        preferences.lastSelectedReciterId = reciter.id\n    }\n\n    // MARK: - Playback Controls\n\n    private func playStartingCurrentPage() {\n        guard let currentPage = listener?.visiblePages.min() else { return }\n        logger.info(\"AudioBanner: Play starting page \\(currentPage)\")\n\n        // start downloading & playing\n        analytics.playFrom(menu: false)\n        play(from: currentPage.firstVerse, to: nil, verseRuns: .one, listRuns: .one)\n    }\n\n    private func setAudioRangeForCurrentPage() {\n        guard let currentPage = listener?.visiblePages.min() else { return }\n        let from = currentPage.firstVerse\n        let end = lastAyahFinder.findLastAyah(startAyah: from)\n        audioRange = (start: from, end: end)\n    }\n\n    private func play(from: AyahNumber, to: AyahNumber?, verseRuns: Runs, listRuns: Runs) {\n        guard let selectedReciter else {\n            return\n        }\n        audioPlayer.stopAudio()\n        let end = to ?? lastAyahFinder.findLastAyah(startAyah: from)\n        audioRange = (start: from, end: end)\n        self.verseRuns = verseRuns\n        self.listRuns = listRuns\n\n        recentRecitersService.updateRecentRecitersList(selectedReciter)\n\n        cancellableTasks.task { [weak self] in\n            do {\n                let downloaded = await self?.downloader.downloaded(reciter: selectedReciter, from: from, to: end) ?? true\n                logger.info(\"AudioBanner: reciter downloaded? \\(downloaded)\")\n                if !downloaded {\n                    self?.startDownloading()\n                    let download = try await self?.downloader.download(from: from, to: end, reciter: selectedReciter)\n                    guard let download else {\n                        logger.info(\"AudioBanner: couldn't create a download request\")\n                        return\n                    }\n\n                    await self?.observe([download])\n\n                    for try await _ in download.progress { }\n\n                    logger.info(\"AudioBanner: download completed\")\n                }\n\n                guard let self else {\n                    return\n                }\n\n                try await audioPlayer.play(\n                    reciter: selectedReciter,\n                    rate: playbackRate,\n                    from: from, to: end,\n                    verseRuns: verseRuns, listRuns: listRuns\n                )\n                playingStarted()\n            } catch {\n                self?.playbackFailed(error)\n            }\n        }\n    }\n\n    private func togglePlayPause() {\n        switch playingState {\n        case .playing: pause()\n        case .paused: resume()\n        default:\n            logger.error(\"Invalid playingState \\(playingState) found while trying to pause/resume playback\")\n        }\n    }\n\n    private func pause() {\n        playingState = .paused\n        audioPlayer.pauseAudio()\n    }\n\n    private func resume() {\n        playingState = .playing\n        audioPlayer.resumeAudio()\n    }\n\n    private func stepForward() {\n        audioPlayer.stepForward()\n    }\n\n    private func stepBackward() {\n        audioPlayer.stepBackward()\n    }\n\n    private func stop() {\n        audioRange = nil\n        audioPlayer.stopAudio()\n    }\n\n    // MARK: - Downloading\n\n    private func observe(_ downloads: [DownloadBatchResponse]) async {\n        await updateDownloadProgress()\n        await withTaskGroup(of: Void.self) { group in\n            for download in downloads {\n                group.addTask { [weak self] in\n                    do {\n                        for try await _ in download.progress {\n                            if let self {\n                                await updateDownloadProgress()\n                            }\n                        }\n                    } catch {\n                        // Ignore errors\n                    }\n                }\n            }\n        }\n        playbackEnded()\n    }\n\n    // MARK: - Audio Interactor Delegate\n\n    private func setUpAudioPlayerActions() {\n        let actions = QuranAudioPlayerActions(\n            playbackEnded: { [weak self] in self?.playbackEnded() },\n            playbackPaused: { [weak self] in self?.playbackPaused() },\n            playbackResumed: { [weak self] in self?.playbackResumed() },\n            playing: { [weak self] in self?.playing(ayah: $0) }\n        )\n        audioPlayer.setActions(actions)\n    }\n\n    private func playbackPaused() {\n        logger.info(\"AudioBanner: playback paused\")\n        updatePlayingState(to: .paused)\n    }\n\n    private func playbackResumed() {\n        logger.info(\"AudioBanner: playback resumed\")\n        playingState = .playing\n    }\n\n    private func playing(ayah: AyahNumber) {\n        logger.info(\"AudioBanner: playing verse \\(ayah)\")\n        crasher.setValue(ayah, forKey: .playingAyah)\n        listener?.highlightReadingAyah(ayah)\n    }\n\n    // MARK: - State changes\n\n    private func updatePlayingState(to playingState: PlaybackState) {\n        self.playingState = playingState\n    }\n\n    private func playbackEnded() {\n        logger.info(\"AudioBanner: onPlaybackOrDownloadingCompleted\")\n\n        crasher.setValue(nil, forKey: .playingAyah)\n        crasher.setValue(false, forKey: .downloadingQuran)\n        playingState = .stopped\n    }\n\n    private func startDownloading() {\n        logger.info(\"AudioBanner: will start downloading\")\n        crasher.setValue(true, forKey: .downloadingQuran)\n        playingState = .downloading(progress: 0)\n\n        guard let audioRange else {\n            return\n        }\n        let message = audioMessage(\"audio.downloading.message\", audioRange: audioRange)\n        toast = (message, action: nil)\n    }\n\n    private func updateDownloadProgress() async {\n        let downloads = await downloader.runningAudioDownloads()\n        let progress = downloads.map(\\.currentProgress.progress).reduce(0, +)\n        playingState = .downloading(progress: progress / Double(downloads.count))\n    }\n\n    private func playingStarted() {\n        logger.info(\"AudioBanner: playing started\")\n        cancellableTasks = []\n        crasher.setValue(false, forKey: .downloadingQuran)\n        remoteCommandsHandler?.startListening()\n        playingState = .playing\n\n        guard let audioRange else {\n            return\n        }\n\n        let message = audioMessage(\"audio.playing.message\", audioRange: audioRange)\n        toast = (message, action: ToastAction(title: l(\"audio.playing.action.modify\")) { [weak self] in\n            self?.showAdvancedAudioOptions()\n        })\n    }\n\n    private func playbackFailed(_ error: Error) {\n        logger.info(\"AudioBanner: failed to playing audio. \\(error)\")\n        self.error = error\n        playbackEnded()\n    }\n\n    private func audioMessage(_ format: String, audioRange: AudioRange) -> String {\n        lFormat(format, audioRange.start.localizedName, audioRange.end.localizedName)\n    }\n}\n\nextension AudioBannerViewModel {\n    func playFromBanner() {\n        logger.info(\"AudioBanner: play button tapped. State: \\(playingState)\")\n        playStartingCurrentPage()\n    }\n\n    func pauseFromBanner() {\n        logger.info(\"AudioBanner: pause button tapped. State: \\(playingState)\")\n        pause()\n    }\n\n    func resumeFromBanner() {\n        logger.info(\"AudioBanner: resume button tapped. State: \\(playingState)\")\n        resume()\n    }\n\n    func stopFromBanner() {\n        logger.info(\"AudioBanner: stop button tapped. State: \\(playingState)\")\n        stop()\n    }\n\n    func forwardFromBanner() {\n        logger.info(\"AudioBanner: step forward button tapped. State: \\(playingState)\")\n        stepForward()\n    }\n\n    func backwardFromBanner() {\n        logger.info(\"AudioBanner: step backward button tapped. State: \\(playingState)\")\n        stepBackward()\n    }\n\n    func cancelDownload() async {\n        logger.info(\"AudioBanner: cancel download tapped. State: \\(playingState)\")\n        await downloader.cancelAllAudioDownloads()\n        playbackEnded()\n    }\n}\n\nextension AudioBannerViewModel {\n    private func setUpRemoteCommandHandler() {\n        let remoteActions = RemoteCommandActions(\n            play: { [weak self] in self?.handlePlayCommand() },\n            pause: { [weak self] in self?.handlePauseCommand() },\n            togglePlayPause: { [weak self] in self?.handleTogglePlayPauseCommand() },\n            nextTrack: { [weak self] in self?.handleNextTrackCommand() },\n            previousTrack: { [weak self] in self?.handlePreviousTrackCommand() }\n        )\n        remoteCommandsHandler = RemoteCommandsHandler(center: .shared(), actions: remoteActions)\n    }\n\n    private func handlePlayCommand() {\n        logger.info(\"AudioBanner: play command fired. State: \\(playingState)\")\n        switch playingState {\n        case .stopped: playStartingCurrentPage()\n        case .paused, .playing: resume()\n        case .downloading: break\n        }\n    }\n\n    private func handlePauseCommand() {\n        logger.info(\"AudioBanner: pause command fired. State: \\(playingState)\")\n        pause()\n    }\n\n    private func handleTogglePlayPauseCommand() {\n        logger.info(\"AudioBanner: toggle play/pause command fired. State: \\(playingState)\")\n        togglePlayPause()\n    }\n\n    private func handleNextTrackCommand() {\n        logger.info(\"AudioBanner: step forward command fired. State: \\(playingState)\")\n        stepForward()\n    }\n\n    private func handlePreviousTrackCommand() {\n        logger.info(\"AudioBanner: step backward command fired. State: \\(playingState)\")\n        stepBackward()\n    }\n}\n\nextension AudioBannerViewModel: ReciterListListener {\n    func presentReciterList() {\n        logger.info(\"AudioBanner: reciters button tapped. State: \\(playingState)\")\n        viewControllerToPresent = reciterListBuilder.build(withListener: self, standalone: true)\n    }\n\n    public func onSelectedReciterChanged(to reciter: Reciter) {\n        logger.info(\"AudioBanner: onSelectedReciterChanged to \\(reciter.id)\")\n        selectReciter(reciter)\n        playingState = .stopped\n    }\n}\n\nextension AudioBannerViewModel: AdvancedAudioOptionsListener {\n    private var advancedAudioOptions: AdvancedAudioOptions? {\n        guard let audioRange, let selectedReciter else {\n            return nil\n        }\n        return AdvancedAudioOptions(\n            reciter: selectedReciter,\n            start: audioRange.start,\n            end: audioRange.end,\n            verseRuns: verseRuns,\n            listRuns: listRuns\n        )\n    }\n\n    func showAdvancedAudioOptions() {\n        logger.info(\"AudioBanner: more button tapped. State: \\(playingState)\")\n        if case .stopped = playingState {\n            setAudioRangeForCurrentPage()\n        }\n\n        guard let options = advancedAudioOptions else {\n            logger.info(\"AudioBanner: showAdvancedAudioOptions couldn't construct advanced audio options\")\n            return\n        }\n        viewControllerToPresent = advancedAudioOptionsBuilder.build(withListener: self, options: options)\n    }\n\n    public func updateAudioOptions(to newOptions: AdvancedAudioOptions) {\n        logger.info(\"AudioBanner: playing advanced audio options \\(newOptions)\")\n        selectReciter(newOptions.reciter)\n        play(from: newOptions.start, to: newOptions.end, verseRuns: newOptions.verseRuns, listRuns: newOptions.listRuns)\n    }\n\n    public func dismissAudioOptions() {\n        logger.info(\"AudioBanner: dismiss advanced audio options\")\n        dismissPresentedViewController = true\n    }\n}\n\nprivate extension AnalyticsLibrary {\n    func playFrom(menu: Bool) {\n        logEvent(\"PlayAudioFrom\", value: menu ? \"Menu\" : \"AudioBar\")\n    }\n}\n\nprivate extension CrasherKeyBase {\n    static let reciterId = CrasherKey<Int>(key: \"ReciterId\")\n    static let downloadingQuran = CrasherKey<Bool>(key: \"DownloadingQuran\")\n    static let playingAyah = CrasherKey<AyahNumber>(key: \"PlayingAyah\")\n}\n"
  },
  {
    "path": "Features/AudioBannerFeature/RemoteCommandsHandler.swift",
    "content": "//\n//  RemoteCommandsHandler.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/28/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport MediaPlayer\n\n@MainActor\nstruct RemoteCommandActions {\n    var play: () -> Void\n    var pause: () -> Void\n    var togglePlayPause: () -> Void\n    var nextTrack: () -> Void\n    var previousTrack: () -> Void\n}\n\n@MainActor\nfinal class RemoteCommandsHandler {\n    // MARK: Lifecycle\n\n    init(center: MPRemoteCommandCenter, actions: RemoteCommandActions) {\n        self.center = center\n        self.actions = actions\n        setUpRemoteControlEvents()\n    }\n\n    deinit {\n        Task { [center] in\n            await center.setCommandsEnabled(false)\n        }\n    }\n\n    // MARK: Internal\n\n    func startListening() {\n        center.setCommandsEnabled(true)\n    }\n\n    func stopListening() {\n        center.setCommandsEnabled(false)\n    }\n\n    func startListeningToPlayCommand() {\n        center.playCommand.isEnabled = true\n    }\n\n    // MARK: Private\n\n    private let center: MPRemoteCommandCenter\n    private let actions: RemoteCommandActions\n\n    private func setUpRemoteControlEvents() {\n        center.playCommand.addTarget { [weak self] _ in\n            guard let self else { return .success }\n            Task { @MainActor in\n                self.actions.play()\n            }\n            return .success\n        }\n        center.pauseCommand.addTarget { [weak self] _ in\n            guard let self else { return .success }\n            Task { @MainActor in\n                self.actions.pause()\n            }\n            return .success\n        }\n        center.togglePlayPauseCommand.addTarget { [weak self] _ in\n            guard let self else { return .success }\n            Task { @MainActor in\n                self.actions.togglePlayPause()\n            }\n            return .success\n        }\n        center.nextTrackCommand.addTarget { [weak self] _ in\n            guard let self else { return .success }\n            Task { @MainActor in\n                self.actions.nextTrack()\n            }\n            return .success\n        }\n        center.previousTrackCommand.addTarget { [weak self] _ in\n            guard let self else { return .success }\n            Task { @MainActor in\n                self.actions.previousTrack()\n            }\n            return .success\n        }\n\n        // disable all of them initially\n        center.setCommandsEnabled(false)\n\n        // disabled unused commands\n        let unusedCommands = [\n            center.seekForwardCommand,\n            center.seekBackwardCommand,\n            center.skipForwardCommand,\n            center.skipBackwardCommand,\n            center.ratingCommand,\n            center.changePlaybackRateCommand,\n            center.likeCommand,\n            center.dislikeCommand,\n            center.bookmarkCommand,\n            center.changePlaybackPositionCommand,\n        ]\n        for command in unusedCommands {\n            command.isEnabled = false\n        }\n    }\n}\n\nextension MPRemoteCommandCenter {\n    @MainActor\n    func setCommandsEnabled(_ enabled: Bool) {\n        let commands = [\n            playCommand,\n            pauseCommand,\n            togglePlayPauseCommand,\n            nextTrackCommand,\n            previousTrackCommand,\n        ]\n        for command in commands {\n            command.isEnabled = enabled\n        }\n    }\n}\n"
  },
  {
    "path": "Features/AudioDownloadsFeature/AudioDownloadItem.swift",
    "content": "//\n//  AudioDownloadItem.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/4/21.\n//  Copyright © 2021 Quran.com. All rights reserved.\n//\n\nimport Foundation\nimport Localization\nimport QuranAudio\n\nstruct AudioDownloadItem: Hashable, Comparable, Identifiable {\n    enum DownloadingProgress: Hashable {\n        case notDownloading\n        case downloading(Double)\n    }\n\n    // MARK: Internal\n\n    let reciter: Reciter\n    let size: AudioDownloadedSize?\n    let progress: DownloadingProgress\n\n    var id: Int { reciter.id }\n\n    static func < (lhs: Self, rhs: Self) -> Bool {\n        guard let lhsSize = lhs.size, let rhsSize = rhs.size else {\n            return lhs.reciter.localizedName < rhs.reciter.localizedName\n        }\n        if lhsSize.downloadedSizeInBytes != rhsSize.downloadedSizeInBytes {\n            return lhsSize.downloadedSizeInBytes > rhsSize.downloadedSizeInBytes\n        }\n        return lhs.reciter.localizedName < rhs.reciter.localizedName\n    }\n}\n\nextension AudioDownloadItem {\n    var isDownloaded: Bool {\n        size?.downloadedSuraCount == size?.surasCount\n    }\n\n    var canDelete: Bool {\n        guard let size else {\n            return false\n        }\n        return size.downloadedSizeInBytes != 0\n    }\n}\n\nextension AudioDownloadedSize? {\n    private static let formatter: MeasurementFormatter = {\n        let units: [UnitInformationStorage] = [.bytes, .kilobytes, .megabytes, .gigabytes, .terabytes, .petabytes, .zettabytes, .yottabytes]\n        let formatter = MeasurementFormatter()\n        formatter.unitStyle = .short\n        formatter.unitOptions = .naturalScale\n        formatter.locale = formatter.locale.fixedLocaleNumbers()\n        formatter.numberFormatter.maximumFractionDigits = 2\n        return formatter\n    }()\n\n    func formattedString() -> String {\n        guard let self else {\n            return \" \"\n        }\n        let suraCount = self.downloadedSuraCount\n        let size = Double(self.downloadedSizeInBytes)\n        let filesDownloaded = lFormat(\"audio_manager_files_downloaded\", table: .android, suraCount)\n        let measurement = Measurement<UnitInformationStorage>(value: size, unit: .bytes)\n        if suraCount == 0 {\n            return filesDownloaded\n        } else {\n            return \"\\(Self.formatter.string(from: measurement)) - \\(filesDownloaded)\"\n        }\n    }\n}\n"
  },
  {
    "path": "Features/AudioDownloadsFeature/AudioDownloadsBuilder.swift",
    "content": "//\n//  AudioDownloadsBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/7/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AppDependencies\nimport QuranAudioKit\nimport ReciterService\nimport UIKit\n\n@MainActor\npublic struct AudioDownloadsBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func build() -> UIViewController {\n        let downloader = QuranAudioDownloader(\n            baseURL: container.filesAppHost,\n            downloader: container.downloadManager\n        )\n        let sizeInfoRetriever = ReciterSizeInfoRetriever(baseURL: container.filesAppHost)\n        let viewModel = AudioDownloadsViewModel(\n            analytics: container.analytics,\n            deleter: ReciterAudioDeleter(),\n            ayahsDownloader: downloader,\n            sizeInfoRetriever: sizeInfoRetriever,\n            recitersRetriever: ReciterDataRetriever()\n        )\n        let viewController = AudioDownloadsViewController(viewModel: viewModel)\n        return viewController\n    }\n\n    // MARK: Internal\n\n    let container: AppDependencies\n}\n"
  },
  {
    "path": "Features/AudioDownloadsFeature/AudioDownloadsView.swift",
    "content": "//\n//  AudioDownloadsView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-29.\n//\n\nimport Localization\nimport NoorUI\nimport QuranAudio\nimport SwiftUI\nimport UIx\n\nstruct AudioDownloadsView: View {\n    @StateObject var viewModel: AudioDownloadsViewModel\n\n    var body: some View {\n        AudioDownloadsViewUI(\n            editMode: $viewModel.editMode,\n            error: $viewModel.error,\n            items: viewModel.items.sorted(),\n            start: { await viewModel.start() },\n            downloadAction: { await viewModel.startDownloading($0.reciter) },\n            cancelAction: { await viewModel.cancelDownloading($0.reciter) },\n            deleteAction: { @Sendable item in await viewModel.deleteReciterFiles(item.reciter) }\n        )\n    }\n}\n\nprivate struct AudioDownloadsViewUI: View {\n    @Binding var editMode: EditMode\n    @Binding var error: Error?\n    let items: [AudioDownloadItem]\n    let start: AsyncAction\n    let downloadAction: AsyncItemAction<AudioDownloadItem>\n    let cancelAction: AsyncItemAction<AudioDownloadItem>\n    let deleteAction: AsyncItemAction<AudioDownloadItem>\n\n    var body: some View {\n        NoorList {\n            AudioDownloadsSection(\n                title: l(\"reciters.downloaded\"),\n                items: items.filter(\\.canDelete),\n                listItem: { item in\n                    NoorListItem(\n                        title: .text(item.reciter.localizedName),\n                        subtitle: .init(text: item.size.formattedString(), location: .bottom),\n                        accessory: accessory(item)\n                    )\n                },\n                onDelete: { @Sendable in await deleteAction($0) }\n            )\n\n            AudioDownloadsSection(\n                title: l(\"reciters.all\"),\n                items: items.filter { !$0.canDelete },\n                listItem: { item in\n                    NoorListItem(\n                        title: .text(item.reciter.localizedName),\n                        accessory: accessory(item)\n                    )\n                },\n                onDelete: nil\n            )\n        }\n        .task { await start() }\n        .errorAlert(error: $error)\n        .environment(\\.editMode, $editMode)\n    }\n\n    func accessory(_ item: AudioDownloadItem) -> NoorListItem.Accessory? {\n        if editMode == .active {\n            return nil\n        }\n\n        switch item.progress {\n        case .notDownloading:\n            if item.isDownloaded {\n                return nil\n            } else {\n                return .download(.download) { await downloadAction(item) }\n            }\n        case .downloading(let progress):\n            let type = progress < 0.001 ? DownloadType.pending : .downloading(progress: progress)\n            return .download(type) { await cancelAction(item) }\n        }\n    }\n}\n\nprivate struct AudioDownloadsSection<ListItem: View>: View {\n    let title: String\n    let items: [AudioDownloadItem]\n    let listItem: (AudioDownloadItem) -> ListItem\n    let onDelete: AsyncItemAction<AudioDownloadItem>?\n\n    var body: some View {\n        NoorSection(title: title, items) { item in\n            listItem(item)\n        }\n        .onDelete(action: onDelete)\n    }\n}\n\nstruct AudioDownloadsView_Previews: PreviewProvider {\n    struct Container: View {\n        @State var editMode: EditMode = .inactive\n        @State var error: Error? = nil\n\n        @State var items: [AudioDownloadItem] = [\n            AudioDownloadItem(\n                reciter: reciter(1),\n                size: nil,\n                progress: .downloading(0.0001)\n            ),\n            AudioDownloadItem(\n                reciter: reciter(2),\n                size: .init(downloadedSizeInBytes: 1024, downloadedSuraCount: 10, surasCount: 114),\n                progress: .notDownloading\n            ),\n            AudioDownloadItem(\n                reciter: reciter(3),\n                size: .init(downloadedSizeInBytes: 0, downloadedSuraCount: 10, surasCount: 114),\n                progress: .notDownloading\n            ),\n            AudioDownloadItem(\n                reciter: reciter(4),\n                size: .init(downloadedSizeInBytes: 2000, downloadedSuraCount: 114, surasCount: 114),\n                progress: .notDownloading\n            ),\n            AudioDownloadItem(\n                reciter: reciter(5),\n                size: .init(downloadedSizeInBytes: 1024, downloadedSuraCount: 114, surasCount: 114),\n                progress: .downloading(0.5)\n            ),\n        ]\n\n        var body: some View {\n            VStack {\n                Button {\n                    withAnimation {\n                        if editMode == .inactive {\n                            editMode = .active\n                        } else {\n                            editMode = .inactive\n                        }\n                    }\n                } label: {\n                    Text(editMode == .inactive ? \"Edit\" : \"Done\")\n                }\n\n                AudioDownloadsViewUI(\n                    editMode: $editMode,\n                    error: $error,\n                    items: items,\n                    start: { },\n                    downloadAction: { _ in },\n                    cancelAction: { _ in },\n                    deleteAction: { _ in }\n                )\n            }\n        }\n\n        static func reciter(_ id: Int) -> Reciter {\n            Reciter(\n                id: id,\n                nameKey: \"Reciter \\(id)\",\n                directory: \"\",\n                audioURL: URL(validURL: \"quran.com\"),\n                audioType: .gapped,\n                hasGaplessAlternative: false,\n                category: .arabic\n            )\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        VStack {\n            Container()\n        }\n    }\n}\n"
  },
  {
    "path": "Features/AudioDownloadsFeature/AudioDownloadsViewController.swift",
    "content": "//\n//  AudioDownloadsViewController.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-30.\n//\n\nimport Combine\nimport Localization\nimport SwiftUI\nimport UIx\n\nfinal class AudioDownloadsViewController: UIHostingController<AudioDownloadsView> {\n    // MARK: Lifecycle\n\n    init(viewModel: AudioDownloadsViewModel) {\n        self.viewModel = viewModel\n        super.init(rootView: AudioDownloadsView(viewModel: viewModel))\n\n        initialize()\n    }\n\n    @available(*, unavailable)\n    @MainActor\n    dynamic required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Private\n\n    private var editController: EditController?\n    private let viewModel: AudioDownloadsViewModel\n\n    private var currentEditMode: EditMode? {\n        if viewModel.items.allSatisfy({ !$0.canDelete }) {\n            return nil\n        }\n        return viewModel.editMode\n    }\n\n    private func initialize() {\n        title = lAndroid(\"audio_manager\")\n\n        editController = EditController(\n            navigationItem: navigationItem,\n            reload: viewModel.objectWillChange.eraseToAnyPublisher(),\n            editMode: Binding(\n                get: { [weak self] in self?.currentEditMode },\n                set: { [weak self] value in self?.viewModel.editMode = value ?? .inactive }\n            )\n        )\n    }\n}\n"
  },
  {
    "path": "Features/AudioDownloadsFeature/AudioDownloadsViewModel.swift",
    "content": "//\n//  AudioDownloadsViewModel.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-30.\n//\n\nimport Analytics\nimport BatchDownloader\nimport Crashing\nimport Foundation\nimport QuranAudio\nimport QuranAudioKit\nimport QuranKit\nimport ReadingService\nimport ReciterService\nimport SwiftUI\nimport Utilities\nimport VLogging\n\n@MainActor\nfinal class AudioDownloadsViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    init(\n        analytics: AnalyticsLibrary,\n        deleter: ReciterAudioDeleter,\n        ayahsDownloader: QuranAudioDownloader,\n        sizeInfoRetriever: ReciterSizeInfoRetriever,\n        recitersRetriever: ReciterDataRetriever\n    ) {\n        quran = readingPreferences.reading.quran\n        self.analytics = analytics\n        self.deleter = deleter\n        self.ayahsDownloader = ayahsDownloader\n        self.sizeInfoRetriever = sizeInfoRetriever\n        self.recitersRetriever = recitersRetriever\n\n        let downloadsObserver = DownloadsObserver(\n            extractKey: { [weak self] in self?.reciters.firstMatches($0) },\n            showError: { [weak self] error in self?.error = error }\n        )\n        self.downloadsObserver = downloadsObserver\n    }\n\n    // MARK: Internal\n\n    @Published var editMode: EditMode = .inactive\n    @Published var error: Error?\n\n    var items: [AudioDownloadItem] {\n        reciters.map { reciter in\n            AudioDownloadItem(\n                reciter: reciter,\n                size: sizes[reciter],\n                progress: progress[reciter].map { .downloading($0) } ?? .notDownloading\n            )\n        }\n    }\n\n    func start() async {\n        async let downloads: () = observeRunningDownloads()\n        async let reading: () = observeReadingChanges()\n        async let progress: () = observeProgressChanges()\n        _ = await [downloads, reading, progress]\n    }\n\n    func deleteReciterFiles(_ reciter: Reciter) async {\n        logger.info(\"Downloads: deleting reciter \\(reciter.id)\")\n        analytics.deletingQuran(reciter: reciter)\n        await cancelDownloading(reciter)\n        do {\n            try await deleter.deleteAudioFiles(for: reciter)\n            sizes[reciter] = .zero(quran: quran)\n        } catch {\n            self.error = error\n        }\n    }\n\n    func startDownloading(_ reciter: Reciter) async {\n        logger.info(\"Downloads: start downloading reciter \\(reciter.id)\")\n        analytics.downloadingQuran(reciter: reciter)\n        progress[reciter] = 0\n\n        do {\n            // download the audio\n            let response = try await ayahsDownloader.download(from: quran.firstVerse, to: quran.lastVerse, reciter: reciter)\n            await downloadsObserver?.observe([response])\n        } catch {\n            progress.removeValue(forKey: reciter)\n            crasher.recordError(error, reason: \"Failed to start the reciter download\")\n            self.error = error\n        }\n    }\n\n    func cancelDownloading(_ reciter: Reciter) async {\n        logger.info(\"Downloads: cancel downloading reciter \\(reciter.id)\")\n        let download = downloadsObserver?.runningDownloads.firstMatches(reciter)\n        await download?.cancel()\n    }\n\n    // MARK: Private\n\n    private var quran: Quran\n    private let analytics: AnalyticsLibrary\n    private let readingPreferences = ReadingPreferences.shared\n    private let deleter: ReciterAudioDeleter\n    private let ayahsDownloader: QuranAudioDownloader\n    private let sizeInfoRetriever: ReciterSizeInfoRetriever\n    private let recitersRetriever: ReciterDataRetriever\n    private var downloadsObserver: DownloadsObserver<Reciter>?\n\n    @Published private var reciters: [Reciter] = []\n    @Published private var sizes: [Reciter: AudioDownloadedSize] = [:]\n    @Published private var progress: [Reciter: Double] = [:]\n\n    private func update(with quran: Quran) async {\n        self.quran = quran\n\n        sizes.removeAll()\n\n        // get new data\n        reciters = await recitersRetriever.getReciters()\n        sizes = await sizeInfoRetriever.getDownloadedSizes(for: reciters, quran: quran)\n    }\n\n    private func enoughProgressPassedForReloadSizeInfo(oldProgress: Double?, newProgress: Double?) -> Bool {\n        if let newProgress, let oldProgress {\n            let scale: Double = 2000\n            let oldValue = floor(oldProgress * scale)\n            let newValue = floor(newProgress * scale)\n            return newValue - oldValue > 0.9\n        }\n        return false\n    }\n\n    private func reloadDownloadedSize(of reciter: Reciter) async {\n        sizes[reciter] = await sizeInfoRetriever.getDownloadedSize(for: reciter, quran: quran)\n    }\n\n    // MARK: - Observers\n\n    private func observeRunningDownloads() async {\n        let responses = await ayahsDownloader.runningAudioDownloads()\n        await downloadsObserver?.observe(Set(responses))\n    }\n\n    private func observeReadingChanges() async {\n        for await reading in readingPreferences.$reading.prepend(readingPreferences.reading).values() {\n            await update(with: reading.quran)\n        }\n    }\n\n    private func observeProgressChanges() async {\n        guard let downloadsObserver else {\n            return\n        }\n        for await newValue in downloadsObserver.progressPublisher.values() {\n            let oldValue = progress\n\n            let newKeys = Set(newValue.keys)\n            let oldKeys = Set(oldValue.keys)\n            let diff = oldKeys.subtracting(newKeys).union(newKeys.subtracting(oldKeys))\n            let intersection = oldKeys.intersection(newKeys)\n\n            for reciter in diff {\n                await reloadDownloadedSize(of: reciter)\n            }\n\n            for reciter in intersection {\n                let oldProgress = oldValue[reciter]\n                let newProgress = newValue[reciter]\n\n                // Reload size info if enough progress passed.\n                if enoughProgressPassedForReloadSizeInfo(oldProgress: oldProgress, newProgress: newProgress) {\n                    await reloadDownloadedSize(of: reciter)\n                }\n            }\n\n            progress = newValue\n        }\n    }\n}\n\nprivate extension AnalyticsLibrary {\n    func deletingQuran(reciter: Reciter) {\n        logEvent(\"AudioDeletionReciterId\", value: reciter.id.description)\n        logEvent(\"AudioDeletionReciterName\", value: reciter.nameKey)\n    }\n\n    func downloadingQuran(reciter: Reciter) {\n        logEvent(\"QuranDownloadingReciterId\", value: reciter.id.description)\n        logEvent(\"QuranDownloadingReciterName\", value: reciter.nameKey)\n    }\n}\n"
  },
  {
    "path": "Features/AyahMenuFeature/AyahMenuBuilder.swift",
    "content": "//\n//  AyahMenuBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/11/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AppDependencies\nimport QuranAnnotations\nimport QuranKit\nimport QuranTextKit\nimport UIKit\n\npublic struct AyahMenuInput {\n    // MARK: Lifecycle\n\n    public init(sourceView: UIView, pointInView: CGPoint, verses: [AyahNumber], notes: [Note]) {\n        self.sourceView = sourceView\n        self.pointInView = pointInView\n        self.verses = verses\n        self.notes = notes\n    }\n\n    // MARK: Internal\n\n    let sourceView: UIView\n    let pointInView: CGPoint\n    let verses: [AyahNumber]\n    let notes: [Note]\n}\n\n@MainActor\npublic struct AyahMenuBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func build(withListener listener: AyahMenuListener, input: AyahMenuInput) -> UIViewController {\n        let textRetriever = ShareableVerseTextRetriever(\n            databasesURL: container.databasesURL,\n            quranFileURL: container.quranUthmaniV2Database\n        )\n        let noteService = container.noteService()\n        let viewModel = AyahMenuViewModel(deps: AyahMenuViewModel.Deps(\n            sourceView: input.sourceView,\n            pointInView: input.pointInView,\n            verses: input.verses,\n            notes: input.notes,\n            noteService: noteService,\n            textRetriever: textRetriever\n        ))\n        viewModel.listener = listener\n        return AyahMenuViewController(viewModel: viewModel)\n    }\n\n    // MARK: Private\n\n    private let container: AppDependencies\n}\n"
  },
  {
    "path": "Features/AyahMenuFeature/AyahMenuViewController.swift",
    "content": "//\n//  AyahMenuViewController.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/11/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport NoorUI\nimport UIKit\nimport UIx\n\nfinal class AyahMenuViewController: UIViewController {\n    // MARK: Lifecycle\n\n    init(viewModel: AyahMenuViewModel) {\n        self.viewModel = viewModel\n        super.init(nibName: nil, bundle: nil)\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Public\n\n    override public func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {\n        super.preferredContentSizeDidChange(forChildContentContainer: container)\n        preferredContentSize = container.preferredContentSize\n    }\n\n    // MARK: Internal\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        let actions = AyahMenuUI.Actions(\n            play: { [weak self] in self?.viewModel.play() },\n            repeatVerses: { [weak self] in self?.viewModel.repeatVerses() },\n            highlight: { [weak self] color in await self?.viewModel.updateHighlight(color: color) },\n            addNote: { [weak self] in await self?.viewModel.editNote() },\n            deleteNote: { [weak self] in await self?.viewModel.deleteNotes() },\n            showTranslation: { [weak self] in self?.viewModel.showTranslation() },\n            copy: { [weak self] in self?.viewModel.copy() },\n            share: { [weak self] in self?.viewModel.share() }\n        )\n        let highlightingColor = viewModel.highlightingColor\n        let dataObject = AyahMenuUI.DataObject(\n            highlightingColor: highlightingColor,\n            state: viewModel.noteState,\n            playSubtitle: viewModel.playSubtitle,\n            repeatSubtitle: viewModel.repeatSubtitle,\n            actions: actions,\n            isTranslationView: viewModel.isTranslationView\n        )\n        showAyahMenu(dataObject)\n    }\n\n    // MARK: Private\n\n    private let viewModel: AyahMenuViewModel\n\n    private func showAyahMenu(_ dataObject: AyahMenuUI.DataObject) {\n        let view = AyahMenuView(dataObject: dataObject)\n        let hostingController = AutoUpdatingPreferredContentSizeHostingController(rootView: view)\n        addFullScreenChild(hostingController)\n    }\n}\n"
  },
  {
    "path": "Features/AyahMenuFeature/AyahMenuViewModel.swift",
    "content": "//\n//  AyahMenuViewModel.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/11/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AnnotationsService\nimport Crashing\nimport Localization\nimport NoorUI\nimport QuranAnnotations\nimport QuranAudioKit\nimport QuranKit\nimport QuranTextKit\nimport ReadingService\nimport UIKit\nimport VLogging\n\n@MainActor\npublic protocol AyahMenuListener: AnyObject {\n    func dismissAyahMenu()\n\n    func playAudio(_ from: AyahNumber, to: AyahNumber?, repeatVerses: Bool)\n\n    func shareText(_ lines: [String], in sourceView: UIView, at point: CGPoint)\n    func deleteNotes(_ notes: [Note], verses: [AyahNumber]) async\n    func showTranslation(_ verses: [AyahNumber])\n\n    func editNote(_ note: Note)\n}\n\n// MARK: - ViewModel\n\n@MainActor\nfinal class AyahMenuViewModel {\n    struct Deps {\n        let sourceView: UIView\n        let pointInView: CGPoint\n        let verses: [AyahNumber]\n        let notes: [Note]\n        let noteService: NoteService\n        let textRetriever: ShareableVerseTextRetriever\n        let quranContentStatePreferences = QuranContentStatePreferences.shared\n    }\n\n    // MARK: Lifecycle\n\n    init(deps: Deps) {\n        self.deps = deps\n    }\n\n    // MARK: Internal\n\n    weak var listener: AyahMenuListener?\n\n    var isTranslationView: Bool {\n        deps.quranContentStatePreferences.quranMode == .translation\n    }\n\n    var highlightingColor: Note.Color { deps.noteService.color(from: deps.notes) }\n\n    var playSubtitle: String {\n        if deps.verses.count > 1 { // multiple verses selected\n            return l(\"ayah.menu.selected-verses\")\n        }\n        switch audioPreferences.audioEnd {\n        case .juz: return l(\"ayah.menu.play-end-juz\")\n        case .sura: return l(\"ayah.menu.play-end-surah\")\n        case .page: return l(\"ayah.menu.play-end-page\")\n        case .quran: return l(\"ayah.menu.play-end-quran\")\n        }\n    }\n\n    var repeatSubtitle: String {\n        if deps.verses.count == 1 {\n            return l(\"ayah.menu.selected-verse\")\n        }\n        return l(\"ayah.menu.selected-verses\")\n    }\n\n    var noteState: AyahMenuUI.NoteState {\n        if deps.notes.isEmpty {\n            return .noHighlight\n        } else if containsText(deps.notes) {\n            return .noted\n        }\n        return .highlighted\n    }\n\n    // MARK: - Items & Actions\n\n    func play() {\n        logger.info(\"AyahMenu: play tapped. Verses: \\(deps.verses)\")\n        listener?.dismissAyahMenu()\n\n        let verses = deps.verses\n        let lastVerse = verses.count == 1 ? nil : verses.last\n        listener?.playAudio(deps.verses[0], to: lastVerse, repeatVerses: false)\n    }\n\n    func repeatVerses() {\n        logger.info(\"AyahMenu: repeat verses tapped. Verses: \\(deps.verses)\")\n        listener?.dismissAyahMenu()\n\n        let verses = deps.verses\n        listener?.playAudio(verses[0], to: verses.last, repeatVerses: true)\n    }\n\n    func deleteNotes() async {\n        logger.info(\"AyahMenu: delete notes. Verses: \\(deps.verses)\")\n        listener?.dismissAyahMenu()\n        await listener?.deleteNotes(deps.notes, verses: deps.verses)\n    }\n\n    func editNote() async {\n        logger.info(\"AyahMenu: edit notes. Verses: \\(deps.verses)\")\n        let notes = deps.notes\n        let color = deps.noteService.color(from: notes)\n        if let note = await _updateHighlight(color: color) {\n            listener?.editNote(note)\n        }\n    }\n\n    func updateHighlight(color: Note.Color) async {\n        logger.info(\"AyahMenu: update verse highlights. Verses: \\(deps.verses)\")\n        listener?.dismissAyahMenu()\n        _ = await _updateHighlight(color: color)\n    }\n\n    func showTranslation() {\n        logger.info(\"AyahMenu: showTranslation. Verses: \\(deps.verses)\")\n        listener?.showTranslation(deps.verses)\n    }\n\n    func copy() {\n        logger.info(\"AyahMenu: copy. Verses: \\(deps.verses)\")\n        listener?.dismissAyahMenu()\n        Task {\n            if let lines = try? await retrieveSelectedAyahText() {\n                let pasteBoard = UIPasteboard.general\n                pasteBoard.string = lines.joined(separator: \"\\n\")\n            }\n        }\n    }\n\n    func share() {\n        logger.info(\"AyahMenu: share. Verses: \\(deps.verses)\")\n        Task {\n            if let lines = try? await retrieveSelectedAyahText() {\n                let withNewLines = lines.joined(separator: \"\\n\")\n                listener?.shareText([withNewLines], in: self.deps.sourceView, at: self.deps.pointInView)\n            }\n        }\n    }\n\n    // MARK: Private\n\n    private let audioPreferences = AudioPreferences.shared\n\n    private let deps: Deps\n\n    // MARK: - Helper\n\n    private func containsText(_ notes: [Note]) -> Bool {\n        notes.contains { note in\n            !(note.note ?? \"\").isEmpty\n        }\n    }\n\n    private func _updateHighlight(color: Note.Color) async -> Note? {\n        let quran = ReadingPreferences.shared.reading.quran\n        do {\n            let updatedNote = try await deps.noteService.updateHighlight(\n                verses: deps.verses, color: color, quran: quran\n            )\n            logger.info(\"AyahMenu: notes updated\")\n            return updatedNote\n        } catch {\n            crasher.recordError(error, reason: \"Failed to update highlights\")\n            return nil\n        }\n    }\n\n    private func retrieveSelectedAyahText() async throws -> [String] {\n        try await crasher.recordError(\"Failed to update highlights\") {\n            try await deps.textRetriever.textForVerses(deps.verses)\n        }\n    }\n}\n"
  },
  {
    "path": "Features/BookmarksFeature/Sources/BookmarksBuilder.swift",
    "content": "//\n//  BookmarksBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 3/31/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AnnotationsService\nimport AppDependencies\nimport FeaturesSupport\nimport UIKit\n\n@MainActor\npublic struct BookmarksBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func build(withListener listener: QuranNavigator) -> UIViewController {\n        let service = PageBookmarkService(persistence: container.pageBookmarkPersistence)\n        let viewModel = BookmarksViewModel(\n            analytics: container.analytics,\n            service: service,\n            authenticationClient: container.authenticationClient,\n            navigateTo: { [weak listener] page in\n                listener?.navigateTo(page: page, lastPage: nil, highlightingSearchAyah: nil)\n            }\n        )\n        let viewController = BookmarksViewController(viewModel: viewModel)\n        return viewController\n    }\n\n    // MARK: Internal\n\n    let container: AppDependencies\n}\n"
  },
  {
    "path": "Features/BookmarksFeature/Sources/BookmarksPreferences.swift",
    "content": "import Foundation\nimport Preferences\n\nstruct BookmarksPreferences {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Internal\n\n    static let shared = BookmarksPreferences()\n\n    @Preference(syncBannerDismissed)\n    var isSyncBannerDismissed: Bool\n\n    // MARK: Private\n\n    private static let syncBannerDismissed = PreferenceKey<Bool>(\n        key: \"com.quran.sync.bookmarks.banner-dismissed\",\n        defaultValue: false\n    )\n}\n"
  },
  {
    "path": "Features/BookmarksFeature/Sources/BookmarksView.swift",
    "content": "//\n//  BookmarksView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-13.\n//\n\nimport Localization\nimport NoorUI\nimport QuranAnnotations\nimport QuranKit\nimport SwiftUI\nimport UIx\n\n@MainActor\nstruct BookmarksView: View {\n    @StateObject var viewModel: BookmarksViewModel\n\n    var body: some View {\n        BookmarksViewUI(\n            editMode: $viewModel.editMode,\n            error: $viewModel.error,\n            bookmarks: viewModel.bookmarks,\n            shouldShowSyncBanner: viewModel.shouldShowSyncBanner,\n            start: { await viewModel.start() },\n            selectAction: { viewModel.navigateTo($0) },\n            deleteAction: { await viewModel.deleteItem($0) },\n            dismissSyncBanner: { viewModel.dismissSyncBanner() },\n            signInAction: { await viewModel.loginToQuranCom() }\n        )\n    }\n}\n\n@MainActor\nprivate struct BookmarksViewUI: View {\n    // MARK: Internal\n\n    @Binding var editMode: EditMode\n    @Binding var error: Error?\n\n    let bookmarks: [PageBookmark]\n    let shouldShowSyncBanner: Bool\n\n    let start: AsyncAction\n    let selectAction: ItemAction<PageBookmark>\n    let deleteAction: AsyncItemAction<PageBookmark>\n    let dismissSyncBanner: () -> Void\n    let signInAction: @MainActor () async -> Void\n\n    var body: some View {\n        Group {\n            if bookmarks.isEmpty {\n                emptyState\n            } else {\n                NoorList {\n                    #if QURAN_SYNC\n                        if shouldShowSyncBanner {\n                            NoorBasicSection {\n                                syncBanner\n                            }\n                        }\n                    #endif\n                    NoorSection(bookmarks) { bookmark in\n                        listItem(bookmark)\n                    }\n                    .onDelete(action: deleteAction)\n                }\n            }\n        }\n        .task { await start() }\n        .errorAlert(error: $error)\n        .environment(\\.editMode, $editMode)\n    }\n\n    // MARK: Private\n\n    private var emptyState: some View {\n        VStack(spacing: 16) {\n            #if QURAN_SYNC\n                if shouldShowSyncBanner {\n                    syncBanner\n                        .padding(.horizontal)\n                        .padding(.top, 12)\n                }\n            #endif\n\n            noData\n        }\n    }\n\n    private var noData: some View {\n        DataUnavailableView(\n            title: l(\"bookmarks.no-data.title\"),\n            text: l(\"bookmarks.no-data.text\"),\n            image: .bookmark\n        )\n    }\n\n    private var syncBanner: some View {\n        BookmarksSyncBanner(\n            dismiss: dismissSyncBanner,\n            signInAction: signInAction\n        )\n    }\n\n    private func listItem(_ bookmark: PageBookmark) -> some View {\n        let ayah = bookmark.page.firstVerse\n        return NoorListItem(\n            image: .init(.bookmark, color: .red),\n            title: \"\\(ayah.sura.localizedName()) \\(sura: ayah.sura.arabicSuraName)\",\n            subtitle: .init(text: bookmark.creationDate.timeAgo(), location: .bottom),\n            accessory: .text(NumberFormatter.shared.format(bookmark.page.pageNumber))\n        ) {\n            selectAction(bookmark)\n        }\n    }\n}\n\n@MainActor\nprivate struct BookmarksSyncBanner: View {\n    @ScaledMetric private var closeButtonInset = 8.0\n    @ScaledMetric private var containerCornerRadius = Dimensions.cornerRadius\n    @ScaledMetric private var containerPadding = 16.0\n    @ScaledMetric private var contentSpacing = 12.0\n    @ScaledMetric private var titleSpacing = 4.0\n    @ScaledMetric private var trailingSpacing = 8.0\n\n    let dismiss: () -> Void\n    let signInAction: @MainActor () async -> Void\n\n    var body: some View {\n        VStack(alignment: .leading, spacing: contentSpacing) {\n            HStack(alignment: .top, spacing: contentSpacing) {\n                NoorSystemImage.bookmark.image\n                    .font(.title3.weight(.semibold))\n                    .foregroundStyle(Color.accentColor)\n                    .accessibilityHidden(true)\n\n                VStack(alignment: .leading, spacing: titleSpacing) {\n                    Text(l(\"bookmarks.sync.title\"))\n                        .font(.headline)\n\n                    Text(l(\"bookmarks.sync.body\"))\n                        .font(.subheadline)\n                        .foregroundStyle(Color.secondaryLabel)\n                        .fixedSize(horizontal: false, vertical: true)\n                }\n\n                Spacer(minLength: trailingSpacing)\n\n                Button(action: dismiss) {\n                    NoorSystemImage.cancel.image\n                        .font(.footnote.weight(.bold))\n                        .foregroundStyle(Color.secondaryLabel)\n                        .padding(closeButtonInset)\n                }\n                .buttonStyle(.plain)\n                .accessibilityLabel(lAndroid(\"cancel\"))\n            }\n\n            ProminentRoundedButton(label: l(\"bookmarks.sync.action\")) {\n                await signInAction()\n            }\n        }\n        .padding(containerPadding)\n        .background(Color.secondarySystemBackground)\n        .overlay(\n            RoundedRectangle(cornerRadius: containerCornerRadius, style: .continuous)\n                .stroke(Color.accentColor.opacity(0.18), lineWidth: 1)\n        )\n        .background(Color.accentColor.opacity(0.08))\n        .clipShape(RoundedRectangle(cornerRadius: containerCornerRadius, style: .continuous))\n    }\n}\n\nstruct BookmarksView_Previews: PreviewProvider {\n    struct Preview: View {\n        static var staticItems: [PageBookmark] {\n            let pages = Quran.hafsMadani1405.pages.shuffled()\n            return (0 ..< 100).map { i in\n                PageBookmark(page: pages[i], creationDate: Date())\n            }\n        }\n\n        @State var items: [PageBookmark] = staticItems\n        @State var editMode: EditMode = .inactive\n        @State var error: Error? = nil\n\n        var body: some View {\n            NavigationView {\n                BookmarksViewUI(\n                    editMode: $editMode,\n                    error: $error,\n                    bookmarks: items,\n                    shouldShowSyncBanner: true,\n                    start: {},\n                    selectAction: { _ in },\n                    deleteAction: { item in items = items.filter { $0 != item } },\n                    dismissSyncBanner: {},\n                    signInAction: {}\n                )\n                .navigationTitle(lAndroid(\"menu_bookmarks\"))\n                .toolbar {\n                    if items.isEmpty {\n                        Button(\"Populate\") { items = Self.staticItems }\n                    } else {\n                        Button(\"Empty\") { items = [] }\n                    }\n\n                    if error == nil {\n                        Button(\"Error\") { error = URLError(.notConnectedToInternet) }\n                    }\n\n                    Button(editMode == .inactive ? \"Edit\" : \"Done\") {\n                        withAnimation { editMode = editMode == .inactive ? .active : .inactive }\n                    }\n                }\n            }\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        VStack {\n            Preview()\n        }\n    }\n}\n"
  },
  {
    "path": "Features/BookmarksFeature/Sources/BookmarksViewController.swift",
    "content": "//\n//  BookmarksViewController.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-13.\n//\n\nimport Combine\nimport Localization\nimport SwiftUI\nimport UIx\n\nfinal class BookmarksViewController: UIHostingController<BookmarksView> {\n    // MARK: Lifecycle\n\n    init(viewModel: BookmarksViewModel) {\n        self.viewModel = viewModel\n        super.init(rootView: BookmarksView(viewModel: viewModel))\n\n        initialize()\n    }\n\n    @available(*, unavailable)\n    @MainActor\n    dynamic required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Private\n\n    private var editController: EditController?\n    private let viewModel: BookmarksViewModel\n    private var cancellables: Set<AnyCancellable> = []\n\n    private var currentEditMode: EditMode? {\n        if viewModel.bookmarks.isEmpty {\n            return nil\n        }\n        return viewModel.editMode\n    }\n\n    private func initialize() {\n        title = lAndroid(\"menu_bookmarks\")\n        viewModel.presenter = self\n\n        editController = EditController(\n            navigationItem: navigationItem,\n            reload: viewModel.objectWillChange.eraseToAnyPublisher(),\n            editMode: Binding(\n                get: { [weak self] in self?.currentEditMode },\n                set: { [weak self] value in self?.viewModel.editMode = value ?? .inactive }\n            )\n        )\n\n        viewModel.objectWillChange\n            .receive(on: DispatchQueue.main)\n            .sink { [weak self] in self?.updateDeleteAllButton() }\n            .store(in: &cancellables)\n    }\n\n    private func updateDeleteAllButton() {\n        if viewModel.editMode.isEditing && !viewModel.bookmarks.isEmpty {\n            navigationItem.leftBarButtonItem = UIBarButtonItem(\n                title: l(\"bookmarks.delete-all\"),\n                style: .plain,\n                target: self,\n                action: #selector(confirmDeleteAll)\n            )\n            navigationItem.leftBarButtonItem?.tintColor = .systemRed\n        } else {\n            addCloudSyncInfo()\n        }\n    }\n\n    @objc\n    private func confirmDeleteAll() {\n        let alert = UIAlertController(\n            title: l(\"bookmarks.delete-all\"),\n            message: l(\"bookmarks.delete-all.confirmation\"),\n            preferredStyle: .actionSheet\n        )\n        alert.addAction(UIAlertAction(title: l(\"bookmarks.delete-all\"), style: .destructive) { [weak self] _ in\n            Task { await self?.viewModel.deleteAll() }\n        })\n        alert.addAction(UIAlertAction(title: lAndroid(\"cancel\"), style: .cancel))\n        present(alert, animated: true)\n    }\n}\n"
  },
  {
    "path": "Features/BookmarksFeature/Sources/BookmarksViewModel.swift",
    "content": "//\n//  BookmarksViewModel.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-13.\n//\n\nimport Analytics\nimport AnnotationsService\nimport AuthenticationClient\nimport Combine\nimport FeaturesSupport\nimport QuranAnnotations\nimport QuranKit\nimport ReadingService\nimport SwiftUI\nimport UIKit\nimport VLogging\n\n@MainActor\nfinal class BookmarksViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    init(\n        analytics: AnalyticsLibrary,\n        service: PageBookmarkService,\n        authenticationClient: (any AuthenticationClient)?,\n        navigateTo: @escaping (Page) -> Void\n    ) {\n        self.analytics = analytics\n        self.service = service\n        self.authenticationClient = authenticationClient\n        self.navigateTo = navigateTo\n        isSyncBannerDismissed = preferences.isSyncBannerDismissed\n    }\n\n    // MARK: Internal\n\n    @Published var editMode: EditMode = .inactive\n    @Published var error: Error? = nil\n    @Published var bookmarks: [PageBookmark] = []\n    @Published var isAuthenticated: Bool = false\n    @Published var isSyncBannerDismissed: Bool\n\n    weak var presenter: UIViewController?\n\n    var shouldShowSyncBanner: Bool {\n        !isAuthenticated && !isSyncBannerDismissed\n    }\n\n    func start() async {\n        if let authenticationClient {\n            isAuthenticated = await authenticationClient.safelyRestoreState() == .authenticated\n        } else {\n            isAuthenticated = false\n        }\n\n        let bookmarksSequence = readingPreferences.$reading\n            .prepend(readingPreferences.reading)\n            .map { [service] reading in\n                service.pageBookmarks(quran: reading.quran)\n            }\n            .switchToLatest()\n            .values()\n\n        for await bookmarks in bookmarksSequence {\n            self.bookmarks = bookmarks\n                .sorted { $0.creationDate > $1.creationDate }\n        }\n    }\n\n    func navigateTo(_ item: PageBookmark) {\n        logger.info(\"Bookmarks: select bookmark at \\(item.page)\")\n        analytics.openingQuran(from: .bookmarks)\n        navigateTo(item.page)\n    }\n\n    func deleteItem(_ pageBookmark: PageBookmark) async {\n        logger.info(\"Bookmarks: delete bookmark at \\(pageBookmark.page)\")\n        analytics.removeBookmarkPage(pageBookmark.page)\n        do {\n            try await service.removePageBookmark(pageBookmark.page)\n        } catch {\n            self.error = error\n        }\n    }\n\n    func deleteAll() async {\n        logger.info(\"Bookmarks: delete all bookmarks\")\n        do {\n            try await service.removeAllPageBookmarks()\n        } catch {\n            self.error = error\n        }\n    }\n\n    func dismissSyncBanner() {\n        isSyncBannerDismissed = true\n        preferences.isSyncBannerDismissed = true\n    }\n\n    func loginToQuranCom() async {\n        guard let presenter else {\n            return\n        }\n\n        do {\n            let authenticationClient = try requireAuthenticationClient()\n            try await authenticationClient.login(on: presenter)\n            isAuthenticated = true\n        } catch {\n            logger.error(\"Failed to login to Quran.com from bookmarks: \\(error)\")\n            self.error = error\n        }\n    }\n\n    // MARK: Private\n\n    private let navigateTo: (Page) -> Void\n    private let analytics: AnalyticsLibrary\n    private let service: PageBookmarkService\n    private let authenticationClient: (any AuthenticationClient)?\n    private let readingPreferences = ReadingPreferences.shared\n    private let preferences = BookmarksPreferences.shared\n\n    private func requireAuthenticationClient() throws -> any AuthenticationClient {\n        guard let authenticationClient else {\n            throw AuthenticationClientError.clientIsNotAuthenticated(nil)\n        }\n        return authenticationClient\n    }\n}\n"
  },
  {
    "path": "Features/BookmarksFeature/Tests/BookmarksViewModelTests.swift",
    "content": "import Analytics\nimport AnnotationsService\nimport AuthenticationClient\nimport Combine\nimport Foundation\nimport MobileSync\nimport PageBookmarkPersistence\nimport UIKit\nimport XCTest\n@testable import BookmarksFeature\n\n@MainActor\nfinal class BookmarksViewModelTests: XCTestCase {\n    // MARK: Internal\n\n    override func setUp() {\n        super.setUp()\n        BookmarksPreferences.shared.isSyncBannerDismissed = false\n    }\n\n    override func tearDown() {\n        BookmarksPreferences.shared.isSyncBannerDismissed = false\n        super.tearDown()\n    }\n\n    func test_start_setsAuthenticatedState_whenRestoreSucceeds() async {\n        let client = AuthenticationClientSpy()\n        client.restoreStateResult = .authenticated\n        let sut = makeSUT(authenticationClient: client)\n\n        let task = Task { await sut.start() }\n        await waitUntil { client.restoreStateCallCount == 1 }\n        XCTAssertTrue(sut.isAuthenticated)\n        task.cancel()\n    }\n\n    func test_start_fallsBackToCurrentState_whenRestoreFails() async {\n        let client = AuthenticationClientSpy()\n        client.restoreStateError = NSError(domain: \"test\", code: 1)\n        client.authenticationStateValue = .authenticated\n        let sut = makeSUT(authenticationClient: client)\n\n        let task = Task { await sut.start() }\n        await waitUntil { sut.isAuthenticated }\n        XCTAssertEqual(client.restoreStateCallCount, 1)\n        XCTAssertEqual(client.authenticationStateReads, 1)\n        task.cancel()\n    }\n\n    func test_loginToQuranCom_setsAuthenticated_whenLoginSucceeds() async {\n        let client = AuthenticationClientSpy()\n        let sut = makeSUT(authenticationClient: client)\n        let presenter = UIViewController()\n        sut.presenter = presenter\n\n        await sut.loginToQuranCom()\n\n        XCTAssertTrue(sut.isAuthenticated)\n        XCTAssertEqual(client.loginCallCount, 1)\n        XCTAssertTrue(client.lastLoginViewController === presenter)\n        XCTAssertNil(sut.error)\n    }\n\n    func test_loginToQuranCom_setsError_whenClientIsMissing() async {\n        let sut = makeSUT(authenticationClient: nil)\n        let presenter = UIViewController()\n        sut.presenter = presenter\n\n        await sut.loginToQuranCom()\n\n        guard case .clientIsNotAuthenticated = sut.error as? AuthenticationClientError else {\n            return XCTFail(\"Expected clientIsNotAuthenticated, got \\(String(describing: sut.error))\")\n        }\n    }\n\n    // MARK: Private\n\n    private func makeSUT(authenticationClient: (any AuthenticationClient)?) -> BookmarksViewModel {\n        let service = PageBookmarkService(persistence: PageBookmarkPersistenceSpy())\n        return BookmarksViewModel(\n            analytics: AnalyticsSpy(),\n            service: service,\n            authenticationClient: authenticationClient,\n            navigateTo: { _ in }\n        )\n    }\n\n    private func waitUntil(\n        timeoutIterations: Int = 100,\n        condition: @escaping @MainActor () -> Bool,\n        file: StaticString = #filePath,\n        line: UInt = #line\n    ) async {\n        for _ in 0 ..< timeoutIterations {\n            if condition() {\n                return\n            }\n            await Task.yield()\n        }\n        XCTFail(\"Condition was not met in time\", file: file, line: line)\n    }\n}\n\nprivate struct AnalyticsSpy: AnalyticsLibrary {\n    func logEvent(_: String, value _: String) {}\n}\n\nprivate struct PageBookmarkPersistenceSpy: PageBookmarkPersistence {\n    func pageBookmarks() -> AnyPublisher<[PageBookmarkPersistenceModel], Never> {\n        Just([]).eraseToAnyPublisher()\n    }\n\n    func insertPageBookmark(_: Int) async throws {}\n    func removePageBookmark(_: Int) async throws {}\n    func removeAllPageBookmarks() async throws {}\n}\n\nprivate final class AuthenticationClientSpy: AuthenticationClient {\n    var restoreStateResult: AuthenticationState = .notAuthenticated\n    var restoreStateError: Error?\n    var authenticationStateValue: AuthenticationState = .notAuthenticated\n    var loginError: Error?\n    var restoreStateCallCount = 0\n    var authenticationStateReads = 0\n    var loginCallCount = 0\n    weak var lastLoginViewController: UIViewController?\n\n    var authenticationState: AuthenticationState {\n        get async {\n            authenticationStateReads += 1\n            return authenticationStateValue\n        }\n    }\n\n    var loggedInUser: UserInfo? {\n        get async { nil }\n    }\n\n    func login(on viewController: UIViewController) async throws {\n        loginCallCount += 1\n        lastLoginViewController = viewController\n        if let loginError {\n            throw loginError\n        }\n    }\n\n    func restoreState() async throws -> AuthenticationState {\n        restoreStateCallCount += 1\n        if let restoreStateError {\n            throw restoreStateError\n        }\n        return restoreStateResult\n    }\n\n    func logout() async throws {}\n\n    func authenticate(request: URLRequest) async throws -> URLRequest {\n        request\n    }\n\n    func getAuthenticationHeaders() async throws -> [String: String] {\n        [:]\n    }\n}\n"
  },
  {
    "path": "Features/FeaturesSupport/Analytics.Screen.swift",
    "content": "//\n//  Analytics.Screen.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/8/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n\npublic enum Screen: String {\n    case suras\n    case juzs\n    case bookmarks\n    case notes\n    case settings\n\n    case search\n    case searchResults\n\n    case translations\n    case audioDownloads\n\n    case quranArabic\n    case quranTranslation\n\n    case translationsSelection\n    case reciterSelection\n\n    case moreMenu\n    case advancedAudio\n    case shareSheet\n    case wordTranslationSelection\n    case noteEditor\n    case update\n}\n"
  },
  {
    "path": "Features/FeaturesSupport/CommonAnalytics.swift",
    "content": "//\n//  CommonAnalytics.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-19.\n//\n\nimport Analytics\nimport QuranKit\n\nextension AnalyticsLibrary {\n    public func removeBookmarkPage(_ page: Page) {\n        logEvent(\"RemovePageBookmark\", value: page.pageNumber.description)\n    }\n\n    public func openingQuran(from screen: Screen) {\n        logEvent(\"OpeningQuranFrom\", value: screen.rawValue)\n    }\n}\n"
  },
  {
    "path": "Features/FeaturesSupport/QuranNavigator.swift",
    "content": "//\n//  QuranNavigator.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-19.\n//\n\nimport QuranKit\n\n@MainActor\npublic protocol QuranNavigator: AnyObject {\n    func navigateTo(page: Page, lastPage: Page?, highlightingSearchAyah: AyahNumber?)\n}\n"
  },
  {
    "path": "Features/HomeFeature/HomeBuilder.swift",
    "content": "//\n//  HomeBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/14/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport AnnotationsService\nimport AppDependencies\nimport FeaturesSupport\nimport QuranTextKit\nimport ReadingSelectorFeature\nimport UIKit\n\n@MainActor\npublic struct HomeBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func build(withListener listener: QuranNavigator) -> UIViewController {\n        let lastPageService = LastPageService(persistence: container.lastPagePersistence)\n        let textRetriever = QuranTextDataService(\n            databasesURL: container.databasesURL,\n            quranFileURL: container.quranUthmaniV2Database\n        )\n\n        let viewModel = HomeViewModel(\n            lastPageService: lastPageService,\n            textRetriever: textRetriever,\n            navigateToPage: { [weak listener] lastPage in\n                listener?.navigateTo(page: lastPage, lastPage: lastPage, highlightingSearchAyah: nil)\n            },\n            navigateToSura: { [weak listener] sura in\n                listener?.navigateTo(page: sura.page, lastPage: nil, highlightingSearchAyah: nil)\n            },\n            navigateToQuarter: { [weak listener] quarter in\n                listener?.navigateTo(page: quarter.page, lastPage: nil, highlightingSearchAyah: nil)\n            }\n        )\n        let viewController = HomeViewController(\n            viewModel: viewModel,\n            readingSelectorBuilder: ReadingSelectorBuilder(container: container)\n        )\n        return viewController\n    }\n\n    // MARK: Internal\n\n    let container: AppDependencies\n}\n"
  },
  {
    "path": "Features/HomeFeature/HomePreferences.swift",
    "content": "//\n//  HomePreferences.swift\n//\n//\n//  Created by QuranEngine on 2024.\n//\n\nimport Foundation\nimport Preferences\n\nstruct HomePreferences {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Internal\n\n    static let shared = HomePreferences()\n\n    @TransformedPreference(surahSortOrder, transformer: .rawRepresentable(defaultValue: .ascending))\n    var surahSortOrder: SurahSortOrder\n\n    // MARK: Private\n\n    private static let surahSortOrder = PreferenceKey<Int>(key: \"surahSortOrder\", defaultValue: SurahSortOrder.ascending.rawValue)\n}\n"
  },
  {
    "path": "Features/HomeFeature/HomeView.swift",
    "content": "//\n//  HomeView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-16.\n//\n\nimport Localization\nimport NoorUI\nimport QuranAnnotations\nimport QuranKit\nimport SwiftUI\nimport UIx\n\nstruct HomeView: View {\n    @StateObject var viewModel: HomeViewModel\n\n    var body: some View {\n        HomeViewUI(\n            type: viewModel.type,\n            lastPages: viewModel.lastPages,\n            suras: viewModel.suras,\n            quarters: viewModel.quarters,\n            start: { await viewModel.start() },\n            selectLastPage: { viewModel.navigateTo($0) },\n            selectSura: { viewModel.navigateTo($0) },\n            selectQuarter: { viewModel.navigateTo($0) },\n            surahSortOrder: viewModel.surahSortOrder\n        )\n    }\n}\n\nprivate struct HomeViewUI: View {\n    let type: HomeViewType\n    let lastPages: [LastPage]\n    let suras: [Sura]\n    let quarters: [QuarterItem]\n\n    let start: AsyncAction\n\n    let selectLastPage: ItemAction<Page>\n    let selectSura: ItemAction<Sura>\n    let selectQuarter: ItemAction<QuarterItem>\n    let surahSortOrder: SurahSortOrder\n\n    var body: some View {\n        NoorList {\n            NoorSection(title: lAndroid(\"recent_pages\"), lastPages) { lastPage in\n                lastPageView(lastPage)\n            }\n\n            switch type {\n            case .suras:\n                sectionsView(items: suras, groupBy: \\.page.startJuz) { sura in\n                    suraView(sura)\n                }\n            case .juzs:\n                sectionsView(items: quarters, groupBy: \\.quarter.juz) { quarter in\n                    quarterView(quarter)\n                }\n            }\n        }\n        .task { await start() }\n    }\n\n    func lastPageView(_ lastPage: LastPage) -> some View {\n        let ayah = lastPage.page.firstVerse\n        return NoorListItem(\n            image: .init(.lastPage, color: .secondaryLabel),\n            title: \"\\(ayah.sura.localizedName()) \\(sura: ayah.sura.arabicSuraName)\",\n            subtitle: .init(text: lastPage.createdOn.timeAgo(), location: .bottom),\n            accessory: .text(NumberFormatter.shared.format(lastPage.page.pageNumber))\n        ) {\n            selectLastPage(lastPage.page)\n        }\n    }\n\n    func suraView(_ sura: Sura) -> some View {\n        let ayahsString = lFormat(\"verses\", table: .android, sura.verses.count)\n        let suraType = sura.isMakki ? lAndroid(\"makki\") : lAndroid(\"madani\")\n\n        let numberFormatter = NumberFormatter.shared\n\n        return NoorListItem(\n            title: \"\\(sura.localizedName(withNumber: true)) \\(sura: sura.arabicSuraName)\",\n            subtitle: .init(text: \"\\(suraType) - \\(ayahsString)\", location: .bottom),\n            accessory: .text(numberFormatter.format(sura.page.pageNumber))\n        ) {\n            selectSura(sura)\n        }\n    }\n\n    func quarterView(_ item: QuarterItem) -> some View {\n        let quarter = item.quarter\n        let ayah = quarter.firstVerse\n        let page = ayah.page\n        let localizedVerse = ayah.localizedName\n        let arabicSuraName = ayah.sura.arabicSuraName\n\n        return NoorListItem(\n            title: \"\\(quarter.localizedName) - \\(localizedVerse) \\(sura: arabicSuraName)\",\n            rightSubtitle: \"\\(verse: item.ayahText, color: .clear, lineLimit: 1)\",\n            accessory: .text(NumberFormatter.shared.format(page.pageNumber))\n        ) {\n            selectQuarter(item)\n        }\n    }\n\n    @ViewBuilder\n    func sectionsView<Item: Identifiable>(\n        items: [Item],\n        groupBy: (Item) -> Juz,\n        @ViewBuilder listItem: @escaping (Item) -> some View\n    ) -> some View {\n        let itemsByJuz = Dictionary(grouping: items, by: groupBy)\n        let juzs = itemsByJuz.keys.sorted {\n            surahSortOrder.rawValue * ($0.juzNumber - $1.juzNumber) < 0\n        }\n\n        ForEach(juzs) { juz in\n            let items = (itemsByJuz[juz] ?? []).sorted {\n                switch ($0, $1) {\n                case let (thisSura as Sura, thatSura as Sura):\n                    surahSortOrder.rawValue * (thisSura.suraNumber - thatSura.suraNumber) < 0\n                case let (thisQuarter as QuarterItem, thatQuarter as QuarterItem):\n                    surahSortOrder.rawValue * (thisQuarter.quarter.quarterNumber - thatQuarter.quarter.quarterNumber) < 0\n                default:\n                    false\n                }\n            }\n            NoorSection(title: juz.localizedName, items) { item in\n                listItem(item)\n            }\n        }\n    }\n}\n\nstruct HomeView_Previews: PreviewProvider {\n    struct Preview: View {\n        static let ayahText = \"وَإِذۡ قَالَ مُوسَىٰ لِقَوۡمِهِۦ يَٰقَوۡمِ إِنَّكُمۡ ظَلَمۡتُمۡ أَنفُسَكُم بِٱتِّخَاذِكُمُ ٱلۡعِجۡلَ فَتُوبُوٓاْ إِلَىٰ بَارِئِكُمۡ فَٱقۡتُلُوٓاْ أَنفُسَكُمۡ ذَٰلِكُمۡ خَيۡرٞ لَّكُمۡ عِندَ بَارِئِكُمۡ فَتَابَ عَلَيۡكُمۡۚ إِنَّهُۥ هُوَ ٱلتَّوَّابُ ٱلرَّحِيمُ\"\n\n        static var staticLastPages: [LastPage] {\n            let pages = Quran.hafsMadani1405.pages.shuffled()\n            return (0 ..< 3).map { i in\n                LastPage(\n                    page: pages[i],\n                    createdOn: Date(timeIntervalSince1970: Double(i) * 60 * -3),\n                    modifiedOn: Date(timeIntervalSince1970: Double(i) * 60 * -3)\n                )\n            }\n        }\n\n        let quran = Quran.hafsMadani1405\n\n        @State var lastPages: [LastPage] = staticLastPages\n        @State var type: HomeViewType = .juzs\n\n        var body: some View {\n            NavigationView {\n                HomeViewUI(\n                    type: type,\n                    lastPages: lastPages,\n                    suras: quran.suras,\n                    quarters: quran.quarters.map { QuarterItem(quarter: $0, ayahText: Self.ayahText) },\n                    start: {},\n                    selectLastPage: { _ in },\n                    selectSura: { _ in },\n                    selectQuarter: { _ in },\n                    surahSortOrder: .ascending\n                )\n                .navigationTitle(\"Home\")\n                .toolbar {\n                    if type == .suras {\n                        Button(\"Juzs\") { type = .juzs }\n                    } else {\n                        Button(\"Suras\") { type = .suras }\n                    }\n\n                    if lastPages.isEmpty {\n                        Button(\"Populate Last Pages\") { lastPages = Self.staticLastPages }\n                    } else {\n                        Button(\"Empty\") { lastPages = [] }\n                    }\n                }\n            }\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        VStack {\n            Preview()\n        }\n    }\n}\n"
  },
  {
    "path": "Features/HomeFeature/HomeViewController.swift",
    "content": "//\n//  HomeViewController.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-16.\n//\n\nimport Localization\nimport ReadingSelectorFeature\nimport SwiftUI\nimport UIx\n\nfinal class HomeViewController: UIHostingController<HomeView> {\n    // MARK: Lifecycle\n\n    init(viewModel: HomeViewModel, readingSelectorBuilder: ReadingSelectorBuilder) {\n        self.viewModel = viewModel\n        self.readingSelectorBuilder = readingSelectorBuilder\n        super.init(rootView: HomeView(viewModel: viewModel))\n\n        initialize()\n    }\n\n    @available(*, unavailable)\n    @MainActor\n    dynamic required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Private\n\n    private let viewModel: HomeViewModel\n    private let readingSelectorBuilder: ReadingSelectorBuilder\n    private lazy var segmentedControl = UISegmentedControl(frame: .zero)\n\n    private func initialize() {\n        configureSegmentedControl()\n        configureNavigationBarButtons()\n    }\n\n    private func configureSegmentedControl() {\n        segmentedControl.insertSegment(withTitle: lAndroid(\"quran_sura\"), at: 0, animated: false)\n        segmentedControl.insertSegment(withTitle: lAndroid(\"quran_juz2\"), at: 1, animated: false)\n        segmentedControl.selectedSegmentIndex = viewModel.type.rawValue\n        segmentedControl.addTarget(self, action: #selector(segmentChanged), for: .valueChanged)\n        navigationItem.titleView = segmentedControl\n        segmentChanged()\n    }\n\n    private func configureNavigationBarButtons() {\n        navigationItem.rightBarButtonItem = UIBarButtonItem(\n            image: UIImage.symbol(\"books.vertical.fill\"),\n            style: .plain,\n            target: self,\n            action: #selector(openReadingSelectors)\n        )\n\n        navigationItem.leftBarButtonItem = UIBarButtonItem(\n            image: UIImage.symbol(\"arrow.up.arrow.down\"),\n            style: .plain,\n            target: self,\n            action: #selector(toggleSort)\n        )\n    }\n\n    @objc\n    private func toggleSort() {\n        viewModel.toggleSurahSortOrder()\n    }\n\n    @objc\n    private func openReadingSelectors() {\n        let readingSelector = readingSelectorBuilder.build()\n        navigationController?.pushViewController(readingSelector, animated: true)\n    }\n\n    @objc\n    private func segmentChanged() {\n        let type = HomeViewType(rawValue: segmentedControl.selectedSegmentIndex) ?? .suras\n        switch type {\n        case .suras:\n            navigationItem.title = lAndroid(\"quran_sura\")\n        case .juzs:\n            navigationItem.title = lAndroid(\"quran_juz2\")\n        }\n        viewModel.type = type\n    }\n}\n"
  },
  {
    "path": "Features/HomeFeature/HomeViewModel.swift",
    "content": "//\n//  HomeViewModel.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-16.\n//\n\nimport AnnotationsService\nimport Combine\nimport Crashing\nimport Foundation\nimport Preferences\nimport QuranAnnotations\nimport QuranKit\nimport QuranText\nimport QuranTextKit\nimport ReadingService\nimport VLogging\n\nenum SurahSortOrder: Int, Codable {\n    case ascending = 1\n    case descending = -1\n}\n\nenum HomeViewType: Int {\n    case suras\n    case juzs\n}\n\n@MainActor\nfinal class HomeViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    init(\n        lastPageService: LastPageService,\n        textRetriever: QuranTextDataService,\n        navigateToPage: @escaping (Page) -> Void,\n        navigateToSura: @escaping (Sura) -> Void,\n        navigateToQuarter: @escaping (Quarter) -> Void\n    ) {\n        self.lastPageService = lastPageService\n        self.textRetriever = textRetriever\n        self.navigateToPage = navigateToPage\n        self.navigateToSura = navigateToSura\n        self.navigateToQuarter = navigateToQuarter\n\n        HomePreferences.shared.$surahSortOrder\n            .assign(to: &$surahSortOrder)\n    }\n\n    // MARK: Internal\n\n    @Published var suras: [Sura] = []\n    @Published var quarters: [QuarterItem] = []\n    @Published var lastPages: [LastPage] = []\n\n    @Published var surahSortOrder: SurahSortOrder = HomePreferences.shared.surahSortOrder\n\n    @Published var type = HomeViewType.suras {\n        didSet {\n            logger.info(\"Home: \\(type) selected\")\n        }\n    }\n\n    func start() async {\n        async let lastPages: () = loadLastPages()\n        async let suras: () = loadSuras()\n        async let quarters: () = loadQuarters()\n        _ = await [lastPages, suras, quarters]\n    }\n\n    func navigateTo(_ lastPage: Page) {\n        navigateToPage(lastPage)\n    }\n\n    func navigateTo(_ sura: Sura) {\n        navigateToSura(sura)\n    }\n\n    func navigateTo(_ item: QuarterItem) {\n        navigateToQuarter(item.quarter)\n    }\n\n    func toggleSurahSortOrder() {\n        HomePreferences.shared.surahSortOrder = surahSortOrder == .ascending ? .descending : .ascending\n    }\n\n    // MARK: Private\n\n    private let lastPageService: LastPageService\n    private let textRetriever: QuranTextDataService\n    private let navigateToPage: (Page) -> Void\n    private let navigateToSura: (Sura) -> Void\n    private let navigateToQuarter: (Quarter) -> Void\n    private let readingPreferences = ReadingPreferences.shared\n\n    private func loadLastPages() async {\n        let lastPagesSequence = readingPreferences.$reading\n            .prepend(readingPreferences.reading)\n            .map { [lastPageService] reading in\n                lastPageService.lastPages(quran: reading.quran)\n            }\n            .switchToLatest()\n            .values()\n\n        for await lastPages in lastPagesSequence {\n            self.lastPages = lastPages\n        }\n    }\n\n    private func loadSuras() async {\n        let readings = readingPreferences.$reading\n            .prepend(readingPreferences.reading)\n            .values()\n\n        for await reading in readings {\n            suras = reading.quran.suras\n        }\n    }\n\n    private func loadQuarters() async {\n        let readings = readingPreferences.$reading\n            .prepend(readingPreferences.reading)\n            .values()\n\n        for await reading in readings {\n            let quarters = reading.quran.quarters\n            let quartersText = await textForQuarters(quarters)\n            let quarterItems = quarters.map { QuarterItem(quarter: $0, ayahText: quartersText[$0] ?? \"\") }\n            self.quarters = quarterItems\n        }\n    }\n\n    private func textForQuarters(\n        _ quarters: [Quarter]\n    ) async -> [Quarter: String] {\n        do {\n            let verses = Array(quarters.map(\\.firstVerse))\n            let verseTexts = try await textRetriever.textForVerses(verses, translations: [])\n            return cleanUpText(quarters: quarters, verseTexts: verseTexts)\n        } catch {\n            crasher.recordError(error, reason: \"Failed to retrieve quarters text\")\n            return [:]\n        }\n    }\n\n    private func cleanUpText(quarters: [Quarter], verseTexts: [AyahNumber: VerseText]) -> [Quarter: String] {\n        let quarterStart = \"۞\" // Hizb marker\n        let cleanedVersesText = verseTexts.mapValues { $0.arabicText.replacingOccurrences(of: quarterStart, with: \"\") }\n        return quarters.reduce(into: [Quarter: String]()) { partialResult, quarter in\n            partialResult[quarter] = cleanedVersesText[quarter.firstVerse]\n        }\n    }\n}\n"
  },
  {
    "path": "Features/HomeFeature/QuarterItem.swift",
    "content": "//\n//  QuarterItem.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-16.\n//\n\nimport QuranKit\n\nstruct QuarterItem: Identifiable {\n    let quarter: Quarter\n    let ayahText: String\n\n    var id: Quarter { quarter }\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/MoreMenuBuilder.swift",
    "content": "//\n//  MoreMenuBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/1/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport UIKit\n\n@MainActor\npublic struct MoreMenuBuilder {\n    // MARK: Lifecycle\n\n    public init() {\n    }\n\n    // MARK: Public\n\n    public func build(withListener listener: MoreMenuListener, model: MoreMenuModel) -> UIViewController {\n        let viewModel = MoreMenuViewModel(model: model)\n        let viewController = MoreMenuController(viewModel: viewModel)\n        viewModel.listener = listener\n        return viewController\n    }\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/MoreMenuController.swift",
    "content": "//\n//  MoreMenuController.swift\n//\n//\n//  Created by Afifi, Mohamed on 9/6/21.\n//\n\nimport NoorUI\nimport SwiftUI\nimport UIKit\n\nclass MoreMenuController: UIHostingController<MoreMenuView> {\n    // MARK: Lifecycle\n\n    init(viewModel: MoreMenuViewModel) {\n        self.viewModel = viewModel\n        super.init(rootView: .init(store: viewModel))\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Internal\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        view.backgroundColor = nil\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        view.backgroundColor = nil\n    }\n\n    override func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {\n        super.preferredContentSizeDidChange(forChildContentContainer: container)\n        preferredContentSize = container.preferredContentSize\n    }\n\n    // MARK: Private\n\n    private let viewModel: MoreMenuViewModel\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/MoreMenuModel.swift",
    "content": "//\n//  MoreMenuModel.swift\n//\n//\n//  Created by Afifi, Mohamed on 8/29/21.\n//\n\npublic struct MoreMenuModel {\n    // MARK: Lifecycle\n\n    public init(isWordPointerActive: Bool, state: MoreMenuControlsState) {\n        self.isWordPointerActive = isWordPointerActive\n        self.state = state\n    }\n\n    // MARK: Public\n\n    public var isWordPointerActive: Bool\n    public var state: MoreMenuControlsState\n}\n\npublic enum ConfigState {\n    case alwaysOn\n    case alwaysOff\n    case conditional\n}\n\npublic struct MoreMenuControlsState {\n    // MARK: Lifecycle\n\n    public init() { }\n\n    // MARK: Public\n\n    public var mode = ConfigState.conditional\n    public var translationsSelection = ConfigState.conditional\n    public var wordPointer = ConfigState.conditional\n    public var orientation = ConfigState.conditional\n    public var fontSize = ConfigState.conditional\n    public var twoPages = ConfigState.conditional\n    public var verticalScrolling = ConfigState.conditional\n    public var theme = ConfigState.conditional\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/MoreMenuViewModel.swift",
    "content": "//\n//  MoreMenuViewModel.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/1/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport Combine\nimport NoorUI\nimport QuranText\nimport QuranTextKit\nimport VLogging\nimport WordTextService\n\n@MainActor\npublic protocol MoreMenuListener: AnyObject {\n    func onTranslationsSelectionsTapped()\n    func onIsWordPointerActiveUpdated(to isWordPointerActive: Bool)\n}\n\n@MainActor\nfinal class MoreMenuViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    init(model: MoreMenuModel) {\n        self.model = model\n        state = model.state\n\n        mode = preferences.quranMode\n        wordPointerEnabled = model.isWordPointerActive\n        wordPointerType = wordTextPreferences.wordTextType\n        translationFontSize = fontSizePreferences.translationFontSize\n        arabicFontSize = fontSizePreferences.arabicFontSize\n        twoPagesEnabled = preferences.twoPagesEnabled\n        verticalScrollingEnabled = preferences.verticalScrollingEnabled\n        appearanceMode = themeService.appearanceMode\n\n        state.twoPages = (model.state.twoPages == .conditional && TwoPagesUtils.hasEnoughHorizontalSpace()) ? .conditional : .alwaysOff\n\n        $mode\n            .dropFirst()\n            .sink { [weak self] newValue in\n                logger.info(\"More Menu: set quran model \\(newValue)\")\n                self?.preferences.quranMode = newValue\n            }\n            .store(in: &cancellables)\n\n        $wordPointerEnabled\n            .dropFirst()\n            .sink { [weak self] newValue in\n                logger.info(\"More Menu: set is word pointer active \\(newValue)\")\n                self?.listener?.onIsWordPointerActiveUpdated(to: newValue)\n            }\n            .store(in: &cancellables)\n\n        $wordPointerType\n            .dropFirst()\n            .sink { [weak self] newValue in\n                logger.info(\"More Menu: set word pointer type \\(newValue)\")\n                self?.wordTextPreferences.wordTextType = newValue\n            }\n            .store(in: &cancellables)\n\n        $translationFontSize\n            .dropFirst()\n            .sink { [weak self] newValue in\n                logger.info(\"More Menu: set translation font size \\(newValue)\")\n                self?.fontSizePreferences.translationFontSize = newValue\n            }\n            .store(in: &cancellables)\n\n        $arabicFontSize\n            .dropFirst()\n            .sink { [weak self] newValue in\n                logger.info(\"More Menu: set arabic font size \\(newValue)\")\n                self?.fontSizePreferences.arabicFontSize = newValue\n            }\n            .store(in: &cancellables)\n\n        $twoPagesEnabled\n            .dropFirst()\n            .sink { [weak self] newValue in\n                logger.info(\"More Menu: set two pages enabled \\(newValue)\")\n                self?.preferences.twoPagesEnabled = newValue\n            }\n            .store(in: &cancellables)\n\n        $verticalScrollingEnabled\n            .dropFirst()\n            .sink { [weak self] newValue in\n                logger.info(\"More Menu: set vertical scrolling enabled \\(newValue)\")\n                self?.preferences.verticalScrollingEnabled = newValue\n            }\n            .store(in: &cancellables)\n\n        $appearanceMode\n            .dropFirst()\n            .sink { [weak self] newValue in\n                logger.info(\"More Menu: set appearanceMode \\(newValue)\")\n                self?.themeService.appearanceMode = newValue\n            }\n            .store(in: &cancellables)\n    }\n\n    // MARK: Public\n\n    @Published public var mode: QuranMode {\n        didSet {\n            if mode == .translation {\n                wordPointerEnabled = false\n            }\n        }\n    }\n\n    // MARK: Internal\n\n    weak var listener: MoreMenuListener?\n\n    var state: MoreMenuControlsState\n\n    @Published var wordPointerEnabled: Bool\n    @Published var wordPointerType: WordTextType\n    @Published var translationFontSize: FontSize\n    @Published var arabicFontSize: FontSize\n\n    @Published var twoPagesEnabled: Bool\n    @Published var verticalScrollingEnabled: Bool\n\n    @Published var appearanceMode: AppearanceMode\n\n    func selectTranslations() {\n        logger.info(\"More Menu: translations selections tapped\")\n        listener?.onTranslationsSelectionsTapped()\n    }\n\n    // MARK: Private\n\n    private let model: MoreMenuModel\n    private let themeService = ThemeService.shared\n    private let wordTextPreferences = WordTextPreferences.shared\n    private let preferences = QuranContentStatePreferences.shared\n    private let fontSizePreferences = FontSizePreferences.shared\n\n    private var cancellables: Set<AnyCancellable> = []\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/views/FontSizeStepper.swift",
    "content": "//\n//  FontSizeStepper.swift\n//  QuranEngine\n//\n//  Created by Mohamed Afifi on 2025-03-27.\n//\n\nimport Localization\nimport NoorUI\nimport QuranText\nimport SwiftUI\nimport VLogging\n\nstruct FontSizeStepper: View {\n    // MARK: Internal\n\n    @Binding var fontSize: FontSize\n    let range = Array(FontSize.allCases.sorted().reversed())\n\n    @ScaledMetric var cornerRadius = Dimensions.cornerRadius\n    @ScaledMetric var defaultSpacing = 5\n    @ScaledMetric var dotsSpacing = 8\n\n    var body: some View {\n        VStack(spacing: defaultSpacing) {\n            HStack(spacing: 0) {\n                // Decrease button (smaller A)\n                stepperButton {\n                    guard currentSizeIndex > 0 else {\n                        logger.error(\"FontSizeStepper: Cannot decrease font size beyond 0 index.\")\n                        return\n                    }\n                    fontSize = range[currentSizeIndex - 1]\n                }\n                .font(.body)\n                .disabled(currentSizeIndex == 0)\n\n                Divider()\n\n                // Increase button (larger A)\n                stepperButton {\n                    guard currentSizeIndex < range.count - 1 else {\n                        logger.error(\"FontSizeStepper: Cannot increase font size beyond \\(range.count - 1) index.\")\n                        return\n                    }\n                    fontSize = range[currentSizeIndex + 1]\n                }\n                .font(.title2)\n                .disabled(currentSizeIndex == range.count - 1)\n            }\n            .padding(.vertical, defaultSpacing)\n            .background(\n                RoundedRectangle(cornerRadius: cornerRadius)\n                    .fill(Color.systemGray5)\n            )\n            .fixedSize(horizontal: false, vertical: true)\n            .overlay(alignment: .bottom) {\n                HStack(spacing: dotsSpacing) {\n                    ForEach(range.indices, id: \\.self) { stepIndex in\n                        Circle()\n                            .fill(stepIndex <= currentSizeIndex ? Color.black : .systemGray5)\n                            .frame(width: defaultSpacing, height: defaultSpacing)\n                    }\n                }\n                .opacity(showDots ? 1 : 0)\n                .animation(.bouncy, value: showDots)\n                .onSizeChange { dotsSize = $0 }\n                .offset(y: dotsOffset)\n            }\n        }\n        .onDisappear {\n            hideTimer?.invalidate()\n            hideTimer = nil\n        }\n    }\n\n    // MARK: Private\n\n    @State private var dotsSize: CGSize = .zero\n\n    // Dots visibility\n    private let hideDelay = 2.0\n    @State private var showDots = false\n    @State private var hideTimer: Timer? = nil\n\n    private var currentSizeIndex: Int {\n        let index = range.firstIndex(of: fontSize)\n        if index == nil {\n            logger.error(\"Couldn't find \\(fontSize) in \\(range)\")\n        }\n        return index!\n    }\n\n    private var dotsOffset: CGFloat {\n        dotsSize.height / 2 + dotsSpacing\n    }\n\n    @ViewBuilder\n    private func stepperButton(action: @escaping () -> Void) -> some View {\n        Button {\n            action()\n            showDotsTemporarily()\n        } label: {\n            Text(l(\"menu.fontSizeLetter\"))\n                .frame(maxWidth: .infinity)\n        }\n        .tint(.label)\n    }\n\n    /// Shows the dots briefly, then hides them after `hideDelay` seconds.\n    private func showDotsTemporarily() {\n        showDots = true\n        // Invalidate any previous timer\n        hideTimer?.invalidate()\n\n        // Start a new one\n        hideTimer = Timer.scheduledTimer(withTimeInterval: hideDelay, repeats: false) { _ in\n            showDots = false\n            hideTimer = nil\n        }\n    }\n}\n\n// MARK: - Preview\n\n#Preview {\n    struct FontSizeStepper_Previews: View {\n        @State var size = FontSize.medium\n\n        var body: some View {\n            HStack {\n                Text(\"Quran\")\n                FontSizeStepper(fontSize: $size)\n            }\n            .padding()\n        }\n    }\n\n    return FontSizeStepper_Previews()\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/views/MoreMenuDeviceRotation.swift",
    "content": "//\n//  MoreMenuDeviceRotation.swift\n//\n//\n//  Created by Afifi, Mohamed on 9/5/21.\n//\n\nimport NoorUI\nimport SwiftUI\nimport UIx\nimport VLogging\n\nstruct MoreMenuDeviceRotation: View {\n    @State var orientation: UIInterfaceOrientation = .unknown\n    @State var updateOrientationTo: UIInterfaceOrientation? = nil\n\n    var body: some View {\n        HStack {\n            DeviceRotation(image: NoorImage.rotateToLandscape.image) {\n                updateOrientationTo = .landscapeLeft\n            }\n            .disabled(orientation.isLandscape)\n\n            DeviceRotation(image: NoorImage.rotateToPortrait.image) {\n                updateOrientationTo = .portrait\n            }\n            .disabled(orientation.isPortrait)\n        }\n        .background(\n            HStack {\n                Divider()\n            }\n            .background(DeviceOrientationResolver(updateOrientationTo: $updateOrientationTo) { orientation = $0 })\n        )\n    }\n}\n\nprivate struct DeviceRotation: View {\n    let image: Image\n    let action: () -> Void\n    @Environment(\\.isEnabled) var isEnabled\n\n    var body: some View {\n        Button(action: action) {\n            image\n                .renderingMode(.template)\n                .foregroundColor(isEnabled ? .label : .gray)\n                .padding()\n                .frame(minWidth: 0, maxWidth: .infinity)\n        }\n    }\n}\n\nstruct MoreMenuDeviceRotation_Previews: PreviewProvider {\n    struct Container: View {\n        @State var orientation: UIInterfaceOrientation\n\n        var body: some View {\n            MoreMenuDeviceRotation()\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        VStack {\n            Container(orientation: .landscapeLeft)\n            Divider()\n            Container(orientation: .portrait)\n        }\n    }\n}\n\nprivate struct DeviceOrientationResolver: UIViewControllerRepresentable {\n    class DeviceOrientationResolverController: UIViewController {\n        // MARK: Public\n\n        override public func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {\n            super.viewWillTransition(to: size, with: coordinator)\n            coordinator.animate(alongsideTransition: nil) { _ in\n                self.orientationChanged?(self.orientation)\n            }\n        }\n\n        // MARK: Internal\n\n        var orientationChanged: ((UIInterfaceOrientation) -> Void)?\n\n        var orientation: UIInterfaceOrientation {\n            view.window?.windowScene?.interfaceOrientation ?? .unknown\n        }\n    }\n\n    @Binding var updateOrientationTo: UIInterfaceOrientation?\n    let orientationChanged: (UIInterfaceOrientation) -> Void\n\n    func makeUIViewController(context: Context) -> DeviceOrientationResolverController {\n        let controller = DeviceOrientationResolverController()\n        controller.orientationChanged = orientationChanged\n        return controller\n    }\n\n    func updateUIViewController(_ controller: DeviceOrientationResolverController, context: Context) {\n        controller.orientationChanged = orientationChanged\n\n        // Update orientation in the next runloop to prevent state modification during view update.\n        if updateOrientationTo != nil {\n            DispatchQueue.main.async {\n                updateOrientationIfNeeded(of: controller.view)\n            }\n        }\n    }\n\n    private func updateOrientationIfNeeded(of view: UIView) {\n        guard let newOrientation = updateOrientationTo else {\n            return\n        }\n        updateOrientationTo = nil\n\n        if #available(iOS 16.0, *) {\n            let orientationMask: UIInterfaceOrientationMask = newOrientation.isLandscape ? .landscape : .portrait\n            view.window?.windowScene?.requestGeometryUpdate(.iOS(interfaceOrientations: orientationMask)) { error in\n                logger.error(\"Error while updating orientation to \\(newOrientation.rawValue). Error: \\(error)\")\n            }\n        } else {\n            UIDevice.current.setValue(newOrientation.rawValue, forKey: \"orientation\")\n        }\n    }\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/views/MoreMenuEmpty.swift",
    "content": "//\n//  MoreMenuEmpty.swift\n//\n//\n//  Created by Afifi, Mohamed on 9/5/21.\n//\n\nimport SwiftUI\n\nstruct MoreMenuEmpty: View {\n    var body: some View {\n        VStack {\n            Divider()\n            Divider()\n        }\n        .hidden()\n    }\n}\n\nstruct MoreMenuEmpty_Previews: PreviewProvider {\n    static var previews: some View {\n        VStack {\n            Text(\"Something\")\n            MoreMenuEmpty()\n            Text(\"Something\")\n        }\n    }\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/views/MoreMenuFontSize.swift",
    "content": "//\n//  MoreMenuFontSize.swift\n//\n//\n//  Created by Afifi, Mohamed on 9/5/21.\n//\n\nimport Localization\nimport QuranText\nimport SwiftUI\nimport VLogging\n\nstruct MoreMenuFontSize: View {\n    // MARK: Internal\n\n    let label: String\n    @Binding var fontSize: FontSize\n\n    var body: some View {\n        Stepper(value: fontIndex, in: 0 ... fonts.count - 1) {\n            HStack {\n                Text(label)\n                Spacer()\n                    .background(\n                        HStack {\n                            Spacer()\n                            Text(l(\"menu.fontSizeLetter\")).font(.system(size: fontSizeInPoints))\n                            Spacer()\n                        }\n                    )\n            }\n        }\n        .padding()\n    }\n\n    // MARK: Private\n\n    private let fonts = Array(FontSize.allCases.sorted().reversed())\n\n    private var fontIndex: Binding<Int> {\n        Binding(\n            get: {\n                let index = fonts.firstIndex(of: fontSize)\n                if index == nil {\n                    logger.error(\"Couldn't find \\(fontSize) in \\(fonts)\")\n                }\n                return index!\n            },\n            set: { fontSize = fonts[$0] }\n        )\n    }\n\n    private var fontSizeInPoints: CGFloat {\n        switch fontSize {\n        case .accessibility5: return 61\n        case .accessibility4: return 57\n        case .accessibility3: return 51\n        case .accessibility2: return 46\n        case .accessibility1: return 41\n        case .xxxLarge: return 36\n        case .xxLarge: return 31\n        case .xLarge: return 25\n        case .large: return 20\n        case .medium: return 14\n        case .small: return 10\n        case .xSmall: return 7\n        }\n    }\n}\n\nstruct MoreMenuFontSize_Previews: PreviewProvider {\n    struct Container: View {\n        @State var fontSize: FontSize\n\n        var body: some View {\n            MoreMenuFontSize(label: \"Font Size\", fontSize: $fontSize)\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        VStack {\n            Container(fontSize: .xSmall)\n            Divider()\n            Container(fontSize: .medium)\n            Divider()\n            Container(fontSize: .xLarge)\n        }\n    }\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/views/MoreMenuModeSelector.swift",
    "content": "//\n//  MoreMenuModeSelector.swift\n//\n//\n//  Created by Afifi, Mohamed on 9/5/21.\n//\n\nimport Localization\nimport QuranText\nimport SwiftUI\n\nstruct MoreMenuModeSelector: View {\n    @Binding var mode: QuranMode\n\n    var body: some View {\n        Picker(selection: $mode, label: Text(\"\")) {\n            Text(l(\"menu.arabic\"))\n                .tag(QuranMode.arabic)\n            Text(l(\"menu.translation\"))\n                .tag(QuranMode.translation)\n        }\n        .pickerStyle(SegmentedPickerStyle())\n        .padding(.bottom, 1)\n    }\n}\n\nstruct MoreMenuModeSelector_Previews: PreviewProvider {\n    struct Container: View {\n        @State var mode: QuranMode\n\n        var body: some View {\n            MoreMenuModeSelector(mode: $mode)\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        VStack(spacing: 0) {\n            Container(mode: .arabic)\n            Divider()\n            Container(mode: .translation)\n        }\n    }\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/views/MoreMenuThemeSettings.swift",
    "content": "//\n//  MoreMenuThemeSettings.swift\n//  QuranEngine\n//\n//  Created by Mohamed Afifi on 2025-03-25.\n//\n\nimport Combine\nimport Localization\nimport NoorUI\nimport QuranText\nimport SwiftUI\nimport UIx\n\nprivate class ThemeSettingsController<V: View>: UIHostingController<V> {\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        view.backgroundColor = nil\n\n        sheetPresentationController?.prefersGrabberVisible = true\n        sheetPresentationController?.prefersEdgeAttachedInCompactHeight = true\n        sheetPresentationController?.widthFollowsPreferredContentSizeWhenEdgeAttached = true\n\n        if #available(iOS 16.0, *) {\n            sheetPresentationController?.detents = [.custom(resolver: { _ in 400 })]\n        } else {\n            sheetPresentationController?.detents = [.medium()]\n        }\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        view.backgroundColor = nil\n    }\n\n    override func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {\n        super.preferredContentSizeDidChange(forChildContentContainer: container)\n        preferredContentSize = container.preferredContentSize\n\n        if #available(iOS 16.0, *) {\n            let height = preferredContentSize.height\n            sheetPresentationController?.detents = [.custom(resolver: { _ in height })]\n            sheetPresentationController?.invalidateDetents()\n        }\n    }\n}\n\nstruct MoreMenuThemeSettingsMenuItem: View {\n    let showFontSize: Bool\n\n    @Environment(\\.navigator) private var navigator\n    @State private var viewController: UIViewController?\n\n    var body: some View {\n        Button {\n            // capture the window before dismissing\n            let window = viewController?.view.window\n            navigator?.dismiss {\n                let controller = ThemeSettingsController(rootView: themeSettingsView())\n                controller.modalPresentationStyle = .formSheet\n\n                let parentVC = window?.rootViewController?.deepPresentedViewController()\n                parentVC?.present(controller, animated: true)\n            }\n        } label: {\n            NoorListItem(\n                title: .text(l(\"menu.theme_settings\")),\n                accessory: .disclosureIndicator\n            )\n            .padding()\n            .contentShape(Rectangle())\n        }\n        .buttonStyle(BackgroundHighlightingStyle())\n        .background(Color.systemBackground)\n        UIViewControllerReader(viewController: $viewController)\n    }\n\n    private func themeSettingsView() -> some View {\n        MoreMenuThemeSettingsView(showFontSize: showFontSize)\n    }\n}\n\nprivate struct SectionHeader: View {\n    let header: String\n    var body: some View {\n        Text(header)\n            .font(.headline)\n    }\n}\n\nprivate struct AppearanceModeSelectorButton: View {\n    @Binding var selectedAppearance: AppearanceMode\n    var body: some View {\n        DropdownButton(items: [.auto, .dark, .light], selectedItem: $selectedAppearance) { appearance in\n            Label(appearance.localizedName, systemImage: icon(for: appearance))\n        }\n    }\n\n    private func icon(for mode: AppearanceMode) -> String {\n        switch mode {\n        case .auto: return \"circle.righthalf.filled\"\n        case .light: return \"sun.max\"\n        case .dark: return \"moon\"\n        }\n    }\n}\n\nprivate struct FontSizeView: View {\n    let label: String\n    let labelWidth: CGFloat\n    @Binding var size: FontSize\n    @Binding var labelSize: CGSize\n\n    var body: some View {\n        HStack(spacing: 30) {\n            Text(label)\n                .fixedSize()\n                .onSizeChange {\n                    labelSize = $0\n                }\n                .frame(width: labelWidth, alignment: .leading)\n\n            FontSizeStepper(fontSize: $size)\n        }\n    }\n}\n\nprivate struct MoreMenuThemeSettingsView: View {\n    @StateObject var viewModel = MoreMenuThemeSettingsViewModel()\n\n    let showFontSize: Bool\n\n    @State private var arabicLabelSize: CGSize = .zero\n    @State private var translationLabelSize: CGSize = .zero\n\n    @ScaledMetric var compactVerticalPadding = 3.0\n\n    var fontSizeLabelWidth: CGFloat {\n        max(arabicLabelSize.width, translationLabelSize.width)\n    }\n\n    var body: some View {\n        PreferredContentSizeMatchesScrollView {\n            ScrollView {\n                VStack {\n                    HStack {\n                        Text(l(\"menu.theme_settings\"))\n                            .font(.title)\n                            .fontWeight(.semibold)\n                        Spacer()\n                        CloseButton()\n                    }\n\n                    if showFontSize {\n                        FontSizeView(\n                            label: l(\"menu.arabicFontSize\"),\n                            labelWidth: fontSizeLabelWidth,\n                            size: $viewModel.arabicFontSize,\n                            labelSize: $arabicLabelSize\n                        )\n\n                        Divider()\n                            .padding(.vertical, compactVerticalPadding)\n\n                        FontSizeView(\n                            label: l(\"menu.translationFontSize\"),\n                            labelWidth: fontSizeLabelWidth,\n                            size: $viewModel.translationFontSize,\n                            labelSize: $translationLabelSize\n                        )\n                    }\n\n                    Divider()\n                        .padding(.vertical, compactVerticalPadding)\n\n                    VStack(spacing: 0) {\n                        HStack {\n                            SectionHeader(header: \"Themes\") // TODO: Localize\n                            Spacer()\n\n                            AppearanceModeSelectorButton(selectedAppearance: $viewModel.appearanceMode)\n                        }\n                        .padding(.horizontal)\n\n                        ThemeStyleSelector(selectedStyle: $viewModel.themeStyle)\n                    }\n                }\n                .padding()\n            }\n        }\n        .background(.thickMaterial)\n    }\n}\n\n#Preview {\n    VStack {\n        Section {\n            MoreMenuThemeSettingsMenuItem(showFontSize: true)\n        }\n\n        MoreMenuThemeSettingsView(showFontSize: false)\n    }\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/views/MoreMenuThemeSettingsViewModel.swift",
    "content": "//\n//  MoreMenuThemeSettingsViewModel.swift\n//  QuranEngine\n//\n//  Created by Mohamed Afifi on 2025-03-28.\n//\n\nimport Combine\nimport NoorUI\nimport QuranText\nimport QuranTextKit\nimport VLogging\n\n@MainActor\nfinal class MoreMenuThemeSettingsViewModel: ObservableObject {\n    private var cancellables: Set<AnyCancellable> = []\n\n    private let themeService = ThemeService.shared\n    @Published var themeStyle: ThemeStyle\n    @Published var appearanceMode: AppearanceMode\n\n    private let fontSizePreferences = FontSizePreferences.shared\n    @Published var arabicFontSize: FontSize\n    @Published var translationFontSize: FontSize\n\n    init() {\n        themeStyle = themeService.themeStyle\n        appearanceMode = themeService.appearanceMode\n\n        translationFontSize = fontSizePreferences.translationFontSize\n        arabicFontSize = fontSizePreferences.arabicFontSize\n\n        $themeStyle\n            .dropFirst()\n            .sink { [weak self] newValue in\n                logger.info(\"More Menu: set themeStyle \\(newValue)\")\n                self?.themeService.themeStyle = newValue\n            }\n            .store(in: &cancellables)\n\n        $appearanceMode\n            .dropFirst()\n            .sink { [weak self] newValue in\n                logger.info(\"More Menu: set appearanceMode \\(newValue)\")\n                self?.themeService.appearanceMode = newValue\n            }\n            .store(in: &cancellables)\n\n        $translationFontSize\n            .dropFirst()\n            .sink { [weak self] newValue in\n                logger.info(\"More Menu: set translation font size \\(newValue)\")\n                self?.fontSizePreferences.translationFontSize = newValue\n            }\n            .store(in: &cancellables)\n\n        $arabicFontSize\n            .dropFirst()\n            .sink { [weak self] newValue in\n                logger.info(\"More Menu: set arabic font size \\(newValue)\")\n                self?.fontSizePreferences.arabicFontSize = newValue\n            }\n            .store(in: &cancellables)\n    }\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/views/MoreMenuTranslationSelector.swift",
    "content": "//\n//  MoreMenuTranslationSelector.swift\n//\n//\n//  Created by Afifi, Mohamed on 9/6/21.\n//\n\nimport Localization\nimport NoorUI\nimport SwiftUI\n\nstruct MoreMenuTranslationSelector: View {\n    var body: some View {\n        NoorListItem(\n            title: .text(l(\"menu.select_translation\")),\n            accessory: .disclosureIndicator\n        )\n        .padding()\n    }\n}\n\nstruct MoreMenuTranslationSelector_Previews: PreviewProvider {\n    static var previews: some View {\n        VStack {\n            MoreMenuTranslationSelector()\n        }\n    }\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/views/MoreMenuTwoPages.swift",
    "content": "//\n//  MoreMenuTwoPages.swift\n//\n//\n//  Created by Afifi, Mohamed on 9/5/21.\n//\n\nimport Localization\nimport SwiftUI\n\nstruct MoreMenuTwoPages: View {\n    @Binding var enabled: Bool\n\n    var body: some View {\n        Toggle(l(\"menu.twoPages\"), isOn: $enabled)\n            .padding()\n    }\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/views/MoreMenuVerticalScrolling.swift",
    "content": "//\n//  MoreMenuVerticalScrolling.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-10-08.\n//\n\nimport Localization\nimport SwiftUI\n\nstruct MoreMenuVerticalScrolling: View {\n    @Binding var enabled: Bool\n\n    var body: some View {\n        Toggle(l(\"menu.verticalScrolling\"), isOn: $enabled)\n            .padding()\n    }\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/views/MoreMenuView.swift",
    "content": "//\n//  MoreMenuView.swift\n//\n//\n//  Created by Afifi, Mohamed on 9/5/21.\n//\n\nimport Localization\nimport NoorUI\nimport QuranText\nimport SwiftUI\nimport UIKit\nimport UIx\n\nstruct MoreMenuView: View {\n    @ObservedObject private var store: MoreMenuViewModel\n    init(store: MoreMenuViewModel) {\n        self.store = store\n    }\n\n    var body: some View {\n        CocoaNavigationView(rootConfiguration: .init(navigationBarHidden: true)) {\n            MoreMenuRootView(store: store)\n        }\n    }\n}\n\nprivate struct MoreMenuRootView: View {\n    // MARK: Internal\n\n    @ObservedObject var store: MoreMenuViewModel\n    @Environment(\\.navigator) var navigator: Navigator?\n\n    var body: some View {\n        PreferredContentSizeMatchesScrollView {\n            ScrollView {\n                VStack(spacing: 0) {\n                    viewBasedOn(state.mode) {\n                        MoreMenuModeSelector(mode: $store.mode)\n                    }\n\n                    viewBasedOn(state.translationsSelection, customCondition: store.mode == .translation) {\n                        Button {\n                            store.selectTranslations()\n                        } label: {\n                            MoreMenuTranslationSelector()\n                                .contentShape(Rectangle())\n                        }\n                        .buttonStyle(BackgroundHighlightingStyle())\n                        .background(Color.systemBackground)\n\n                        empty\n                    }\n\n                    viewBasedOn(state.wordPointer, customCondition: store.mode == .arabic) {\n                        MoreMenuWordPointer(enabled: $store.wordPointerEnabled)\n                            .background(Color.systemBackground)\n                        if store.wordPointerEnabled {\n                            divider\n                                .background(Color.systemBackground)\n                            Button {\n                                showWordPointerSelection()\n                            } label: {\n                                MoreMenuWordPointerType(type: store.wordPointerType)\n                                    .contentShape(Rectangle())\n                            }\n                            .buttonStyle(BackgroundHighlightingStyle())\n                            .background(Color.systemBackground)\n                        }\n                        empty\n                    }\n\n                    viewBasedOn(state.orientation, customCondition: store.mode == .arabic) {\n                        MoreMenuDeviceRotation()\n                            .background(Color.systemBackground)\n                        empty\n                    }\n\n                    viewBasedOn(state.twoPages) {\n                        MoreMenuTwoPages(enabled: $store.twoPagesEnabled)\n                            .background(Color.systemBackground)\n                        empty\n                    }\n\n                    viewBasedOn(state.verticalScrolling) {\n                        MoreMenuVerticalScrolling(enabled: $store.verticalScrollingEnabled)\n                    }\n\n                    viewBasedOn(state.theme) {\n                        MoreMenuThemeSettingsMenuItem(showFontSize: isVisible(state.fontSize, customCondition: store.mode == .translation))\n                    }\n                }\n            }\n        }\n    }\n\n    // MARK: Private\n\n    private var state: MoreMenuControlsState {\n        store.state\n    }\n\n    private var empty: some View {\n        VStack {\n            MoreMenuEmpty()\n        }\n    }\n\n    private var divider: some View {\n        Divider()\n            .padding(.leading)\n    }\n\n    @ViewBuilder\n    private func viewBasedOn(\n        _ state: ConfigState,\n        customCondition: Bool = true,\n        @ViewBuilder content: () -> some View\n    ) -> some View {\n        switch state {\n        case .alwaysOff:\n            EmptyView()\n        case .alwaysOn:\n            content()\n        case .conditional:\n            if customCondition {\n                content()\n            }\n        }\n    }\n\n    private func isVisible(_ state: ConfigState, customCondition: Bool) -> Bool {\n        switch state {\n        case .alwaysOff:\n            return false\n        case .alwaysOn:\n            return true\n        case .conditional:\n            return customCondition\n        }\n    }\n\n    private func showWordPointerSelection() {\n        navigator?.push(configuration: .init(backgroundColor: .systemBackground)) {\n            WordPointerSelection(store: store)\n        }\n    }\n}\n\nprivate struct WordPointerSelection: View {\n    // MARK: Internal\n\n    @ObservedObject var store: MoreMenuViewModel\n    @Environment(\\.navigator) var navigator: Navigator?\n\n    var body: some View {\n        SingleChoiceSelectorView(\n            sections: [SingleChoiceSection(items: [WordTextType.translation, .transliteration])],\n            selected: selected,\n            itemText: { $0.localizedName }\n        )\n    }\n\n    // MARK: Private\n\n    private var selected: Binding<WordTextType?> {\n        Binding(get: {\n            store.wordPointerType\n        }, set: { value in\n            if let value {\n                store.wordPointerType = value\n                navigator?.pop()\n            }\n        })\n    }\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/views/MoreMenuWordPointer.swift",
    "content": "//\n//  MoreMenuWordPointer.swift\n//\n//\n//  Created by Afifi, Mohamed on 9/5/21.\n//\n\nimport Localization\nimport SwiftUI\n\nstruct MoreMenuWordPointer: View {\n    @Binding var enabled: Bool\n\n    var body: some View {\n        Toggle(l(\"menu.pointer\"), isOn: $enabled)\n            .padding()\n    }\n}\n\nstruct MoreMenuWordPointer_Previews: PreviewProvider {\n    static var previews: some View {\n        VStack {\n            MoreMenuWordPointer(enabled: .constant(true))\n            Divider()\n            MoreMenuWordPointer(enabled: .constant(false))\n        }\n    }\n}\n"
  },
  {
    "path": "Features/MoreMenuFeature/views/MoreMenuWordPointerType.swift",
    "content": "//\n//  MoreMenuWordPointerType.swift\n//\n//\n//  Created by Afifi, Mohamed on 9/5/21.\n//\n\nimport Localization\nimport NoorUI\nimport QuranText\nimport SwiftUI\n\nstruct MoreMenuWordPointerType: View {\n    let type: WordTextType\n\n    var body: some View {\n        NoorListItem(\n            title: .text(l(\"menu.pointer.select_translation\")),\n            subtitle: .init(text: type.localizedName, location: .trailing),\n            accessory: .disclosureIndicator\n        )\n        .padding()\n    }\n}\n\nstruct MoreMenuWordPointerType_Previews: PreviewProvider {\n    static var previews: some View {\n        VStack {\n            MoreMenuWordPointerType(type: .translation)\n            Divider()\n            MoreMenuWordPointerType(type: .transliteration)\n        }\n    }\n}\n\nextension WordTextType {\n    var localizedName: String {\n        switch self {\n        case .translation:\n            return l(\"translation.text-type.translation\")\n        case .transliteration:\n            return l(\"translation.text-type.transliteration\")\n        }\n    }\n}\n"
  },
  {
    "path": "Features/NoteEditorFeature/NoteEditorBuilder.swift",
    "content": "//\n//  NoteEditorBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 12/20/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport AppDependencies\nimport QuranAnnotations\nimport UIKit\n\n@MainActor\npublic struct NoteEditorBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func build(withListener listener: NoteEditorListener, note: Note) -> UIViewController {\n        let noteService = container.noteService()\n        let viewModel = NoteEditorInteractor(noteService: noteService, note: note)\n        let viewController = NoteEditorViewController(viewModel: viewModel)\n        viewModel.listener = listener\n        return viewController\n    }\n\n    // MARK: Internal\n\n    let container: AppDependencies\n}\n"
  },
  {
    "path": "Features/NoteEditorFeature/NoteEditorInteractor.swift",
    "content": "//\n//  NoteEditorInteractor.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 12/20/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport AnnotationsService\nimport Crashing\nimport Foundation\nimport NoorUI\nimport QuranAnnotations\nimport VLogging\n\n@MainActor\npublic protocol NoteEditorListener: AnyObject {\n    func dismissNoteEditor()\n}\n\n@MainActor\nfinal class NoteEditorInteractor {\n    // MARK: Lifecycle\n\n    init(noteService: NoteService, note: Note) {\n        self.note = note\n        self.noteService = noteService\n    }\n\n    // MARK: Internal\n\n    weak var listener: NoteEditorListener?\n\n    var isEditedNote: Bool {\n        !(editbleNote?.note ?? \"\").trimmingCharacters(in: .whitespacesAndNewlines).isEmpty\n    }\n\n    func fetchNote() async throws -> EditableNote {\n        do {\n            let versesText = try await getNoteText()\n\n            logger.info(\"NoteEditor: note loaded\")\n            let editbleNote = EditableNote(\n                ayahText: versesText,\n                modifiedSince: note.modifiedDate.timeAgo(),\n                selectedColor: note.color,\n                note: note.note ?? \"\"\n            )\n            self.editbleNote = editbleNote\n            return editbleNote\n        } catch {\n            crasher.recordError(error, reason: \"Failed to retrieve note text\")\n            throw error\n        }\n    }\n\n    func commitEditsAndExist() async {\n        logger.info(\"NoteEditor: done tapped\")\n        let editorColor = editbleNote?.selectedColor\n        do {\n            try await noteService.setNote(\n                editbleNote?.note ?? note.note ?? \"\",\n                verses: note.verses,\n                color: editorColor ?? note.color\n            )\n            logger.info(\"NoteEditor: note saved\")\n            listener?.dismissNoteEditor()\n        } catch {\n            // TODO: should show error to the user\n            crasher.recordError(error, reason: \"Failed to set note\")\n        }\n    }\n\n    func forceDelete() async {\n        logger.info(\"NoteEditor: force delete note\")\n        do {\n            try await noteService.removeNotes(with: Array(note.verses))\n            logger.info(\"NoteEditor: notes removed\")\n            listener?.dismissNoteEditor()\n        } catch {\n            // TODO: should show error to the user\n            crasher.recordError(error, reason: \"Failed to delete note\")\n        }\n    }\n\n    // MARK: Private\n\n    private let noteService: NoteService\n    private let note: Note\n\n    private var editbleNote: EditableNote?\n\n    // MAKR: - Helpers\n\n    private func getNoteText() async throws -> String {\n        try await noteService.textForVerses(Array(note.verses))\n    }\n}\n"
  },
  {
    "path": "Features/NoteEditorFeature/NoteEditorViewController.swift",
    "content": "//\n//  NoteEditorViewController.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 12/20/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport NoorUI\nimport SwiftUI\nimport UIKit\nimport VLogging\n\nfinal class NoteEditorViewController: BaseViewController, UIAdaptivePresentationControllerDelegate {\n    // MARK: Lifecycle\n\n    init(viewModel: NoteEditorInteractor) {\n        self.viewModel = viewModel\n        super.init(nibName: nil, bundle: nil)\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Internal\n\n    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {\n        traitCollection.userInterfaceIdiom == .pad ? .all : .portrait\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        presentationController?.delegate = self\n\n        Task {\n            do {\n                let note = try await viewModel.fetchNote()\n                setNote(note)\n            } catch {\n                // TODO: should show error to the user\n            }\n        }\n    }\n\n    func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {\n        done()\n    }\n\n    // MARK: Private\n\n    private let viewModel: NoteEditorInteractor\n\n    private func setNote(_ note: EditableNote) {\n        let noteEditor = NoteEditorView(\n            note: note,\n            done: { [weak self] in self?.done() },\n            delete: { [weak self] in await self?.delete() }\n        )\n        let viewController = UIHostingController(rootView: noteEditor)\n        let navigationController = buildNavigationController(rootViewController: viewController, note: note)\n        addFullScreenChild(navigationController)\n    }\n\n    private func buildNavigationController(rootViewController: UIViewController, note: EditableNote) -> UINavigationController {\n        let modifiedText = UIBarButtonItem(title: note.modifiedSince, style: .plain, target: nil, action: nil)\n        modifiedText.isEnabled = false\n        let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneTapped))\n\n        rootViewController.navigationItem.largeTitleDisplayMode = .never\n        rootViewController.navigationItem.leftBarButtonItem = modifiedText\n        rootViewController.navigationItem.rightBarButtonItem = doneButton\n\n        let navigationController = UINavigationController(rootViewController: rootViewController)\n        return navigationController\n    }\n\n    @objc\n    private func doneTapped() {\n        done()\n    }\n\n    private func done() {\n        Task {\n            await viewModel.commitEditsAndExist()\n        }\n    }\n\n    private func delete() async {\n        logger.info(\"NoteEditor: delete note\")\n        if viewModel.isEditedNote {\n            logger.info(\"NoteEditor: confirm note deletion\")\n            confirmNoteDelete(\n                delete: { await self.viewModel.forceDelete() },\n                cancel: { }\n            )\n        } else {\n            // delete highlight\n            await viewModel.forceDelete()\n        }\n    }\n}\n"
  },
  {
    "path": "Features/NotesFeature/NoteItem.swift",
    "content": "//\n//  NoteItem.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/22/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport QuranAnnotations\nimport QuranKit\n\nstruct NoteItem: Equatable, Identifiable {\n    let note: Note\n    let verseText: String\n\n    var id: Set<AyahNumber> { note.verses }\n}\n"
  },
  {
    "path": "Features/NotesFeature/NotesBuilder.swift",
    "content": "//\n//  NotesBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/14/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport AppDependencies\nimport FeaturesSupport\nimport QuranKit\nimport QuranTextKit\nimport UIKit\n\n@MainActor\npublic struct NotesBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func build(withListener listener: QuranNavigator) -> UIViewController {\n        let textRetriever = ShareableVerseTextRetriever(\n            databasesURL: container.databasesURL,\n            quranFileURL: container.quranUthmaniV2Database\n        )\n\n        let viewModel = NotesViewModel(\n            analytics: container.analytics,\n            noteService: container.noteService(),\n            textRetriever: textRetriever,\n            navigateTo: { [weak listener] verse in\n                listener?.navigateTo(page: verse.page, lastPage: nil, highlightingSearchAyah: nil)\n            }\n        )\n        let viewController = NotesViewController(viewModel: viewModel)\n        return viewController\n    }\n\n    // MARK: Internal\n\n    let container: AppDependencies\n}\n"
  },
  {
    "path": "Features/NotesFeature/NotesView.swift",
    "content": "//\n//  NotesView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-15.\n//\n\nimport Localization\nimport NoorUI\nimport QuranAnnotations\nimport QuranKit\nimport SwiftUI\nimport UIx\n\nstruct NotesView: View {\n    @StateObject var viewModel: NotesViewModel\n\n    var body: some View {\n        NotesViewUI(\n            editMode: $viewModel.editMode,\n            error: $viewModel.error,\n            notes: viewModel.notes,\n            start: { await viewModel.start() },\n            selectAction: { viewModel.navigateTo($0) },\n            deleteAction: { await viewModel.deleteItem($0) }\n        )\n    }\n}\n\nprivate struct NotesViewUI: View {\n    // MARK: Internal\n\n    @Binding var editMode: EditMode\n    @Binding var error: Error?\n\n    let notes: [NoteItem]\n\n    let start: AsyncAction\n    let selectAction: ItemAction<NoteItem>\n    let deleteAction: AsyncItemAction<NoteItem>\n\n    var body: some View {\n        Group {\n            if notes.isEmpty {\n                noData\n            } else {\n                NoorList {\n                    NoorSection(notes) { note in\n                        listItem(note)\n                    }\n                    .onDelete(action: deleteAction)\n                }\n            }\n        }\n        .task { await start() }\n        .errorAlert(error: $error)\n        .environment(\\.editMode, $editMode)\n    }\n\n    // MARK: Private\n\n    private var noData: some View {\n        DataUnavailableView(\n            title: l(\"notes.no-data.title\"),\n            text: l(\"notes.no-data.text\"),\n            image: .note\n        )\n    }\n\n    private func listItem(_ item: NoteItem) -> some View {\n        let note = item.note\n        let ayah = note.firstVerse\n        let page = ayah.page\n        let localizedVerse = note.firstVerse.localizedName\n        let arabicSuraName = note.firstVerse.sura.arabicSuraName\n        let ayahCount = note.verses.count\n        let numberOfAyahs = ayahCount > 1 ? lFormat(\"notes.verses-count\", ayahCount - 1) : \"\"\n        let color = note.color.color.opacity(QuranHighlights.opacity)\n        return NoorListItem(\n            subheading: \"\\(localizedVerse) \\(sura: arabicSuraName) \\(numberOfAyahs)\",\n            rightPretitle: \"\\(verse: item.verseText, color: color, lineLimit: 2)\",\n            title: .text(note.note?.trimmingCharacters(in: .whitespacesAndNewlines) ?? \"\"),\n            subtitle: .init(text: note.modifiedDate.timeAgo(), location: .bottom),\n            accessory: .text(NumberFormatter.shared.format(page.pageNumber))\n        ) {\n            selectAction(item)\n        }\n    }\n}\n\nstruct NotesView_Previews: PreviewProvider {\n    struct Preview: View {\n        static let ayahText = \"وَإِذۡ قَالَ مُوسَىٰ لِقَوۡمِهِۦ يَٰقَوۡمِ إِنَّكُمۡ ظَلَمۡتُمۡ أَنفُسَكُم بِٱتِّخَاذِكُمُ ٱلۡعِجۡلَ فَتُوبُوٓاْ إِلَىٰ بَارِئِكُمۡ فَٱقۡتُلُوٓاْ أَنفُسَكُمۡ ذَٰلِكُمۡ خَيۡرٞ لَّكُمۡ عِندَ بَارِئِكُمۡ فَتَابَ عَلَيۡكُمۡۚ إِنَّهُۥ هُوَ ٱلتَّوَّابُ ٱلرَّحِيمُ\"\n        static let quran = Quran.hafsMadani1405\n\n        static var staticItems: [NoteItem] {\n            [\n                NoteItem(\n                    note: Note(\n                        verses: [quran.suras[2].verses[3]],\n                        modifiedDate: Date(),\n                        note: nil,\n                        color: .purple\n                    ),\n                    verseText: ayahText\n                ),\n                NoteItem(\n                    note: Note(\n                        verses: Set(quran.suras[2].verses),\n                        modifiedDate: Date().addingTimeInterval(-24 * 60),\n                        note: \"Remind myself to memorize it\",\n                        color: .green\n                    ),\n                    verseText: ayahText\n                ),\n            ]\n        }\n\n        @State var items: [NoteItem] = staticItems\n        @State var editMode: EditMode = .inactive\n        @State var error: Error? = nil\n\n        var body: some View {\n            NavigationView {\n                NotesViewUI(\n                    editMode: $editMode,\n                    error: $error,\n                    notes: items,\n                    start: {},\n                    selectAction: { _ in },\n                    deleteAction: { item in items = items.filter { $0 != item } }\n                )\n                .navigationTitle(\"Notes\")\n                .toolbar {\n                    if items.isEmpty {\n                        Button(\"Populate\") { items = Self.staticItems }\n                    } else {\n                        Button(\"Empty\") { items = [] }\n                    }\n\n                    if error == nil {\n                        Button(\"Error\") { error = URLError(.notConnectedToInternet) }\n                    }\n\n                    Button(editMode == .inactive ? \"Edit\" : \"Done\") {\n                        withAnimation { editMode = editMode == .inactive ? .active : .inactive }\n                    }\n                }\n            }\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        VStack {\n            Preview()\n        }\n    }\n}\n"
  },
  {
    "path": "Features/NotesFeature/NotesViewController.swift",
    "content": "//\n//  NotesViewController.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-16.\n//\n\nimport Localization\nimport SwiftUI\nimport UIx\n\nfinal class NotesViewController: UIHostingController<NotesView> {\n    // MARK: Lifecycle\n\n    init(viewModel: NotesViewModel) {\n        self.viewModel = viewModel\n        super.init(rootView: NotesView(viewModel: viewModel))\n\n        initialize()\n    }\n\n    @available(*, unavailable)\n    @MainActor\n    dynamic required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Private\n\n    private var editController: EditController?\n    private let viewModel: NotesViewModel\n\n    private var currentEditMode: EditMode? {\n        if viewModel.notes.isEmpty {\n            return nil\n        }\n        return viewModel.editMode\n    }\n\n    private func initialize() {\n        title = l(\"tab.notes\")\n        addCloudSyncInfo()\n\n        editController = EditController(\n            navigationItem: navigationItem,\n            reload: viewModel.objectWillChange.eraseToAnyPublisher(),\n            editMode: Binding(\n                get: { [weak self] in self?.currentEditMode },\n                set: { [weak self] value in self?.viewModel.editMode = value ?? .inactive }\n            ),\n            customItems: [\n                UIBarButtonItem(\n                    image: UIImage(systemName: \"square.and.arrow.up\"),\n                    style: .plain,\n                    target: self,\n                    action: #selector(shareAllNotes)\n                ),\n            ]\n        )\n    }\n\n    @objc\n    private func shareAllNotes() {\n        Task {\n            do {\n                let notesText = try await viewModel.prepareNotesForSharing()\n\n                let activityViewController = UIActivityViewController(activityItems: [notesText], applicationActivities: nil)\n\n                // iPad support\n                let view = navigationController?.view\n                let viewBound = view.map { CGRect(x: $0.bounds.midX, y: $0.bounds.midY, width: 0, height: 0) }\n                activityViewController.modalPresentationStyle = .formSheet\n                activityViewController.popoverPresentationController?.permittedArrowDirections = []\n                activityViewController.popoverPresentationController?.sourceView = view\n                activityViewController.popoverPresentationController?.sourceRect = viewBound ?? .zero\n\n                present(activityViewController, animated: true)\n            } catch {\n                showErrorAlert(error: error)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Features/NotesFeature/NotesViewModel.swift",
    "content": "//\n//  NotesViewModel.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-16.\n//\n\nimport Analytics\nimport AnnotationsService\nimport Combine\nimport Crashing\nimport Foundation\nimport Localization\nimport QuranAnnotations\nimport QuranKit\nimport QuranTextKit\nimport ReadingService\nimport SwiftUI\nimport Utilities\nimport VLogging\n\n@MainActor\nfinal class NotesViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    init(\n        analytics: AnalyticsLibrary,\n        noteService: NoteService,\n        textRetriever: ShareableVerseTextRetriever,\n        navigateTo: @escaping (AyahNumber) -> Void\n    ) {\n        self.analytics = analytics\n        self.noteService = noteService\n        self.textRetriever = textRetriever\n        self.navigateTo = navigateTo\n    }\n\n    // MARK: Internal\n\n    @Published var editMode: EditMode = .inactive\n    @Published var error: Error? = nil\n    @Published var notes: [NoteItem] = []\n\n    func start() async {\n        let notesSequence = readingPreferences.$reading\n            .prepend(readingPreferences.reading)\n            .map { [noteService] reading in\n                noteService.notes(quran: reading.quran)\n            }\n            .switchToLatest()\n            .values()\n\n        for await notes in notesSequence {\n            self.notes = await noteItems(with: notes)\n                .sorted { $0.note.modifiedDate > $1.note.modifiedDate }\n        }\n    }\n\n    func navigateTo(_ item: NoteItem) {\n        logger.info(\"Notes: select note at \\(item.note.firstVerse)\")\n        navigateTo(item.note.firstVerse)\n    }\n\n    func deleteItem(_ item: NoteItem) async {\n        logger.info(\"Notes: delete note at \\(item.note.firstVerse)\")\n        do {\n            try await noteService.removeNotes(with: Array(item.note.verses))\n        } catch {\n            self.error = error\n        }\n    }\n\n    func prepareNotesForSharing() async throws -> String {\n        try await crasher.recordError(\"Failed to share notes\") {\n            var notesText = [String]()\n            let notes: [NoteItem] = await self.notes\n            for (index, note) in notes.enumerated() {\n                let title: [String] = if let noteContent = note.note.note, noteContent != \"\" {\n                    [\n                        \"\\(noteContent.trimmingCharacters(in: .newlines))\", \"\",\n                    ]\n                } else {\n                    []\n                }\n                let verses = try await textRetriever.textForVerses(Array(note.note.verses))\n\n                notesText.append(contentsOf: title + verses)\n                if index != notes.count - 1 {\n                    notesText.append(contentsOf: [\"\", \"\", \"\"])\n                }\n            }\n            return notesText.joined(separator: \"\\n\")\n        }\n    }\n\n    // MARK: Private\n\n    private let analytics: AnalyticsLibrary\n    private let noteService: NoteService\n    private let textRetriever: ShareableVerseTextRetriever\n    private let navigateTo: (AyahNumber) -> Void\n    private let readingPreferences = ReadingPreferences.shared\n\n    private nonisolated func noteItems(with notes: [Note]) async -> [NoteItem] {\n        await withTaskGroup(of: NoteItem.self) { group in\n            for note in notes {\n                group.addTask {\n                    do {\n                        let verseText = try await self.noteService.textForVerses(Array(note.verses))\n                        return NoteItem(note: note, verseText: verseText)\n                    } catch {\n                        crasher.recordError(error, reason: \"NoteService.textForVerses\")\n                        return NoteItem(note: note, verseText: note.firstVerse.localizedName)\n                    }\n                }\n            }\n\n            let result = await group.collect()\n            return result\n        }\n    }\n}\n"
  },
  {
    "path": "Features/QuranContentFeature/ContentBuilder.swift",
    "content": "//\n//  ContentBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 9/1/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AnnotationsService\nimport AppDependencies\nimport QuranImageFeature\nimport QuranTranslationFeature\nimport ReadingService\n\n@MainActor\npublic struct ContentBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies, highlightsService: QuranHighlightsService) {\n        self.container = container\n        self.highlightsService = highlightsService\n    }\n\n    // MARK: Public\n\n    public func build(withListener listener: ContentListener, input: QuranInput) -> (ContentViewController, ContentViewModel) {\n        let quran = ReadingPreferences.shared.reading.quran\n        let noteService = container.noteService()\n        let lastPageService = LastPageService(persistence: container.lastPagePersistence)\n        let lastPageUpdater = LastPageUpdater(service: lastPageService)\n        let interactorDeps = ContentViewModel.Deps(\n            analytics: container.analytics,\n            noteService: noteService,\n            lastPageUpdater: lastPageUpdater,\n            quran: quran,\n            highlightsService: highlightsService,\n            imageDataSourceBuilder: ContentImageBuilder(container: container, highlightsService: highlightsService),\n            translationDataSourceBuilder: ContentTranslationBuilder(container: container, highlightsService: highlightsService)\n        )\n        let viewModel = ContentViewModel(deps: interactorDeps, input: input)\n\n        let viewController = ContentViewController(viewModel: viewModel)\n\n        viewModel.listener = listener\n        return (viewController, viewModel)\n    }\n\n    // MARK: Private\n\n    private let container: AppDependencies\n    private let highlightsService: QuranHighlightsService\n}\n"
  },
  {
    "path": "Features/QuranContentFeature/ContentViewController.swift",
    "content": "//\n//  ContentViewController.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 9/1/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport NoorUI\nimport QuranKit\nimport QuranPagesFeature\nimport QuranTextKit\nimport SwiftUI\nimport UIKit\nimport UIx\n\npublic final class ContentViewController: UIViewController, UIGestureRecognizerDelegate {\n    // MARK: Lifecycle\n\n    public init(viewModel: ContentViewModel) {\n        self.viewModel = viewModel\n        super.init(nibName: nil, bundle: nil)\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    deinit {\n        NotificationCenter.default.removeObserver(self)\n    }\n\n    // MARK: Public\n\n    override public func viewDidLoad() {\n        super.viewDidLoad()\n        setUpGesture()\n        setUpPagesView()\n    }\n\n    public func gestureRecognizer(\n        _ gestureRecognizer: UIGestureRecognizer,\n        shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer\n    ) -> Bool {\n        true\n    }\n\n    public func word(at point: CGPoint) -> Word? {\n        let actions = viewModel.geometryActions\n        for action in actions {\n            if let word = action.word(point) {\n                return word\n            }\n        }\n        return nil\n    }\n\n    // MARK: Internal\n\n    @objc\n    func onViewPanned(_ gesture: UIPanGestureRecognizer) {\n        if gesture.state == .began {\n            viewModel.listener?.userWillBeginDragScroll()\n        }\n    }\n\n    // MARK: Private\n\n    private let viewModel: ContentViewModel\n\n    private func setUpPagesView() {\n        let viewModel = viewModel\n        let pagesView = PagesView(viewModel: viewModel)\n        let pagingController = UIHostingController(rootView: pagesView)\n        addFullScreenChild(pagingController)\n    }\n\n    private func verse(at point: CGPoint) -> AyahNumber? {\n        let actions = viewModel.geometryActions\n        for action in actions {\n            if let verse = action.verse(point) {\n                return verse\n            }\n        }\n        return nil\n    }\n\n    // MARK: - Gestures\n\n    private func setUpGesture() {\n        // Long press gesture on verses to select\n        view.addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: #selector(onLongPress(_:))))\n\n        // dismiss bars when view is panned\n        let pan = UIPanGestureRecognizer(target: self, action: #selector(onViewPanned(_:)))\n        pan.delegate = self\n        view.addGestureRecognizer(pan)\n    }\n\n    @objc\n    private func onLongPress(_ sender: UILongPressGestureRecognizer) {\n        guard let targetView = sender.view else {\n            return\n        }\n\n        let point = sender.location(in: targetView)\n        let globalPoint = targetView.convert(point, to: targetView.window)\n\n        switch sender.state {\n        case .began:\n            if let verse = verse(at: globalPoint) {\n                viewModel.onViewLongPressStarted(at: point, sourceView: targetView, verse: verse)\n            }\n        case .changed:\n            if let verse = verse(at: globalPoint) {\n                viewModel.onViewLongPressChanged(to: point, verse: verse)\n            }\n        case .ended:\n            viewModel.onViewLongPressEnded()\n        default:\n            viewModel.onViewLongPressCancelled()\n        }\n    }\n}\n"
  },
  {
    "path": "Features/QuranContentFeature/ContentViewModel.swift",
    "content": "//\n//  ContentViewModel.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 9/1/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport Analytics\nimport AnnotationsService\nimport Combine\nimport Crashing\nimport QuranAnnotations\nimport QuranImageFeature\nimport QuranKit\nimport QuranPagesFeature\nimport QuranText\nimport QuranTextKit\nimport QuranTranslationFeature\nimport TranslationService\nimport UIKit\nimport VLogging\n\n@MainActor\npublic protocol ContentListener: AnyObject {\n    func userWillBeginDragScroll()\n    func presentAyahMenu(in sourceView: UIView, at point: CGPoint, verses: [AyahNumber])\n}\n\n@MainActor\npublic final class ContentViewModel: ObservableObject {\n    struct Deps {\n        let analytics: AnalyticsLibrary\n        let quranContentStatePreferences = QuranContentStatePreferences.shared\n        let fontSizePreferences = FontSizePreferences.shared\n        let selectedTranslationsPreferences = SelectedTranslationsPreferences.shared\n        let noteService: NoteService\n        let lastPageUpdater: LastPageUpdater\n        let quran: Quran\n\n        let highlightsService: QuranHighlightsService\n\n        let imageDataSourceBuilder: ContentImageBuilder\n        let translationDataSourceBuilder: ContentTranslationBuilder\n    }\n\n    private struct LongPressData {\n        let sourceView: UIView\n        let startPosition: CGPoint\n        var endPosition: CGPoint\n        var startVerse: AyahNumber\n        var endVerse: AyahNumber\n    }\n\n    // MARK: Lifecycle\n\n    init(deps: Deps, input: QuranInput) {\n        self.deps = deps\n        self.input = input\n\n        visiblePages = [input.initialPage]\n\n        highlights = deps.highlightsService.highlights\n        twoPagesEnabled = deps.quranContentStatePreferences.twoPagesEnabled\n        quranMode = deps.quranContentStatePreferences.quranMode\n\n        deps.highlightsService.$highlights\n            .sink { [weak self] in self?.highlights = $0 }\n            .store(in: &cancellables)\n        deps.quranContentStatePreferences.$twoPagesEnabled\n            .sink { [weak self] in self?.twoPagesEnabled = $0 }\n            .store(in: &cancellables)\n        deps.quranContentStatePreferences.$quranMode\n            .sink { [weak self] in self?.quranMode = $0 }\n            .store(in: &cancellables)\n\n        loadNotes()\n        configureInitialPage()\n    }\n\n    // MARK: Public\n\n    @Published public var visiblePages: [Page] {\n        didSet {\n            visiblePagesUpdated()\n        }\n    }\n\n    public func removeAyahMenuHighlight() {\n        longPressData = nil\n    }\n\n    public func highlightTranslationVerse(_ verse: AyahNumber) {\n        longPressData?.startVerse = verse\n        longPressData?.endVerse = verse\n    }\n\n    public func highlightWord(_ word: Word?) {\n        highlights.pointedWord = word\n    }\n\n    public func highlightReadingAyah(_ ayah: AyahNumber?) {\n        highlights.readingVerses = [ayah].compactMap { $0 }\n    }\n\n    // MARK: Internal\n\n    let deps: Deps\n    weak var listener: ContentListener?\n\n    @Published var quranMode: QuranMode\n    @Published var twoPagesEnabled: Bool\n    @Published var geometryActions: [PageGeometryActions] = []\n\n    @Published var highlights: QuranHighlights {\n        didSet {\n            if oldValue != highlights {\n                deps.highlightsService.highlights = highlights\n\n                if let ayah = highlights.verseToScrollTo(comparingTo: oldValue) {\n                    visiblePages = [ayah.page]\n                }\n            }\n        }\n    }\n\n    var pagingStrategy: PagingStrategy {\n        twoPagesEnabled ? .doublePage : .singlePage\n    }\n\n    func onViewLongPressStarted(at point: CGPoint, sourceView: UIView, verse: AyahNumber) {\n        longPressData = LongPressData(\n            sourceView: sourceView,\n            startPosition: point,\n            endPosition: point,\n            startVerse: verse,\n            endVerse: verse\n        )\n    }\n\n    func onViewLongPressChanged(to point: CGPoint, verse: AyahNumber) {\n        guard var longPressData else {\n            return\n        }\n        longPressData.endVerse = verse\n        self.longPressData = longPressData\n    }\n\n    func onViewLongPressEnded() {\n        guard let longPressData, let selectedVerses else {\n            return\n        }\n        listener?.presentAyahMenu(\n            in: longPressData.sourceView,\n            at: longPressData.startPosition,\n            verses: selectedVerses\n        )\n    }\n\n    func onViewLongPressCancelled() {\n        longPressData = nil\n    }\n\n    // MARK: Private\n\n    private var cancellables: Set<AnyCancellable> = []\n\n    private let input: QuranInput\n\n    private var longPressData: LongPressData? {\n        didSet {\n            highlights.shareVerses = selectedVerses ?? []\n        }\n    }\n\n    private var selectedVerses: [AyahNumber]? {\n        guard let longPressData else {\n            return nil\n        }\n        var start = longPressData.startVerse\n        var end = longPressData.endVerse\n        if end < start {\n            swap(&start, &end)\n        }\n        return start.array(to: end)\n    }\n\n    private static func dictionaryFrom<K: Hashable, U>(_ array: [(K, U)]) -> [K: U] {\n        var dict: [K: U] = [:]\n        for element in array {\n            dict[element.0] = element.1\n        }\n        return dict\n    }\n\n    private func configureInitialPage() {\n        deps.lastPageUpdater.configure(initialPage: input.initialPage, lastPage: input.lastPage)\n        highlights.searchVerses = [input.highlightingSearchAyah].compactMap { $0 }\n    }\n\n    private func visiblePagesUpdated() {\n        // remove search highlight when page changes\n        highlights.searchVerses = []\n\n        let pages = visiblePages\n        let isTranslationView = deps.quranContentStatePreferences.quranMode == .translation\n        crasher.setValue(pages.map(\\.pageNumber), forKey: .pages)\n        deps.analytics.showing(\n            pages: pages,\n            isTranslation: isTranslationView,\n            numberOfSelectedTranslations: deps.selectedTranslationsPreferences.selectedTranslationIds.count,\n            arabicFontSize: deps.fontSizePreferences.arabicFontSize,\n            translationFontSize: deps.fontSizePreferences.translationFontSize\n        )\n        if isTranslationView {\n            logger.info(\"Using translations \\(deps.selectedTranslationsPreferences.selectedTranslationIds)\")\n        }\n\n        updateLastPageTo(pages)\n    }\n\n    private func updateLastPageTo(_ pages: [Page]) {\n        deps.lastPageUpdater.updateTo(pages: pages)\n    }\n\n    private func loadNotes() {\n        deps.noteService.notes(quran: deps.quran)\n            .map { notes in notes.flatMap { note in note.verses.map { ($0, note) } } }\n            .receive(on: DispatchQueue.main)\n            .sink { [weak self] in self?.highlights.noteVerses = Self.dictionaryFrom($0) }\n            .store(in: &cancellables)\n    }\n}\n\nprivate extension CrasherKeyBase {\n    static let pages = CrasherKey<[Int]>(key: \"VisiblePages\")\n}\n\nprivate extension AnalyticsLibrary {\n    func showing(\n        pages: [Page],\n        isTranslation: Bool,\n        numberOfSelectedTranslations: Int,\n        arabicFontSize: FontSize,\n        translationFontSize: FontSize\n    ) {\n        logEvent(\"PageNumbers\", value: pages.description)\n        logEvent(\"PageIsTranslation\", value: isTranslation.description)\n        logEvent(\"PageViewingMode\", value: isTranslation ? \"Translation\" : \"Arabic\")\n        if isTranslation {\n            logEvent(\"PageTranslationsNum\", value: numberOfSelectedTranslations.description)\n            logEvent(\"PageArabicFontSize\", value: arabicFontSize.description)\n            logEvent(\"PageTranslationFontSize\", value: translationFontSize.description)\n        }\n    }\n}\n"
  },
  {
    "path": "Features/QuranContentFeature/PagesView.swift",
    "content": "//\n//  PagesView.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-10-06.\n//\n\nimport QuranPagesFeature\nimport QuranTextKit\nimport SwiftUI\nimport UIx\n\nstruct PagesView: View {\n    @StateObject var viewModel: ContentViewModel\n\n    var body: some View {\n        GeometryReader { geometry in\n            QuranPaginationView(\n                pagingStrategy: pagingStrategy(with: geometry),\n                selection: $viewModel.visiblePages,\n                pages: viewModel.deps.quran.pages\n            ) { page in\n                Group {\n                    switch viewModel.quranMode {\n                    case .arabic:\n                        viewModel.deps.imageDataSourceBuilder.build(at: page)\n                    case .translation:\n                        viewModel.deps.translationDataSourceBuilder.build(at: page)\n                    }\n                }\n            }\n            .id(viewModel.quranMode)\n        }\n        .collectGeometryActions($viewModel.geometryActions)\n    }\n\n    private func pagingStrategy(with geometry: GeometryProxy) -> PagingStrategy {\n        // If portrait\n        if geometry.size.height > geometry.size.width {\n            return .singlePage\n        }\n\n        if !TwoPagesUtils.hasEnoughHorizontalSpace() {\n            return .singlePage\n        }\n\n        return viewModel.pagingStrategy\n    }\n}\n"
  },
  {
    "path": "Features/QuranContentFeature/QuranInput.swift",
    "content": "//\n//  QuranInput.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 9/2/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport QuranKit\n\npublic struct QuranInput {\n    // MARK: Lifecycle\n\n    public init(initialPage: Page, lastPage: Page?, highlightingSearchAyah: AyahNumber?) {\n        self.initialPage = initialPage\n        self.lastPage = lastPage\n        self.highlightingSearchAyah = highlightingSearchAyah\n    }\n\n    // MARK: Public\n\n    public let initialPage: Page\n    public let lastPage: Page?\n    public let highlightingSearchAyah: AyahNumber?\n}\n"
  },
  {
    "path": "Features/QuranImageFeature/ContentImageBuilder.swift",
    "content": "//\n//  ContentImageBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 9/16/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AnnotationsService\nimport AppDependencies\nimport Foundation\nimport ImageService\nimport QuranKit\nimport QuranPagesFeature\nimport ReadingService\nimport SwiftUI\nimport UIKit\nimport Utilities\nimport VLogging\n\n@MainActor\npublic struct ContentImageBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies, highlightsService: QuranHighlightsService) {\n        self.container = container\n        self.highlightsService = highlightsService\n    }\n\n    // MARK: Public\n\n    @ViewBuilder\n    public func build(at page: Page) -> some View {\n        let reading = ReadingPreferences.shared.reading\n        if reading.usesLinePages {\n            let linePageAssetService = Self.buildLinePageAssetService(reading: reading, container: container)\n            let viewModel = ContentLineViewModel(\n                reading: reading,\n                page: page,\n                linePageAssetService: linePageAssetService,\n                highlightsService: highlightsService\n            )\n            ContentLineView(viewModel: viewModel)\n        } else {\n            let imageService = Self.buildImageDataService(reading: reading, container: container)\n            let viewModel = ContentImageViewModel(\n                reading: reading,\n                page: page,\n                imageDataService: imageService,\n                highlightsService: highlightsService\n            )\n            ContentImageView(viewModel: viewModel)\n        }\n    }\n\n    // MARK: Internal\n\n    static func buildImageDataService(reading: Reading, container: AppDependencies) -> ImageDataService {\n        let readingDirectory = Self.readingDirectory(reading, container: container)\n        return ImageDataService(\n            ayahInfoDatabase: reading.ayahInfoDatabase(in: readingDirectory),\n            imagesURL: reading.imagesDirectory(in: readingDirectory)\n        )\n    }\n\n    static func buildLinePageAssetService(reading: Reading, container: AppDependencies) -> LinePageAssetService {\n        guard let widthParameter = reading.linePageAssetWidth else {\n            preconditionFailure(\"Attempted to build line-page assets for non-line-page reading \\(reading)\")\n        }\n        return LinePageAssetService(\n            readingDirectory: Self.readingDirectory(reading, container: container),\n            widthParameter: widthParameter\n        )\n    }\n\n    // MARK: Private\n\n    private let container: AppDependencies\n    private let highlightsService: QuranHighlightsService\n\n    private static func readingDirectory(_ reading: Reading, container: AppDependencies) -> URL {\n        let remoteResource = container.remoteResources?.resource(for: reading)\n        let remotePath = remoteResource?.downloadDestination.url\n        let bundlePath = { Bundle.main.url(forResource: reading.localPath, withExtension: nil) }\n        logger.info(\"Images: Use \\(remoteResource != nil ? \"remote\" : \"bundle\") For reading \\(reading)\")\n        return remotePath ?? bundlePath()!\n    }\n}\n\nprivate extension Reading {\n    // TODO: Add cropInsets back\n    var cropInsets: UIEdgeInsets {\n        switch self {\n        case .hafs_1405:\n            return .zero // UIEdgeInsets(top: 10, left: 34, bottom: 40, right: 24)\n        case .hafs_1421:\n            return .zero\n        case .hafs_1440:\n            return .zero\n        case .hafs_1439:\n            return .zero\n        case .hafs_1441:\n            return .zero\n        case .tajweed:\n            return .zero\n        }\n    }\n}\n"
  },
  {
    "path": "Features/QuranImageFeature/ContentImageView.swift",
    "content": "//\n//  ContentImageView.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-02-10.\n//\n\nimport NoorUI\nimport QuranGeometry\nimport QuranKit\nimport QuranPagesFeature\nimport SwiftUI\n\nstruct ContentImageView: View {\n    @StateObject var viewModel: ContentImageViewModel\n\n    var body: some View {\n        VStack {\n            ContentImageViewBody(\n                decorations: viewModel.decorations,\n                image: viewModel.imagePage?.image,\n                renderingMode: viewModel.imageRenderingMode,\n                quarterName: viewModel.page.localizedQuarterName,\n                suraNames: viewModel.page.suraNames(),\n                page: viewModel.page.localizedNumber,\n                scrollToVerse: viewModel.scrollToVerse,\n                wordFrames: viewModel.imagePage?.wordFrames,\n                onScaleChange: { viewModel.scale = $0 },\n                onGlobalFrameChange: { viewModel.imageFrame = $0 }\n            )\n        }\n        .geometryActions(\n            PageGeometryActions(\n                id: ObjectIdentifier(viewModel),\n                word: { point in viewModel.wordAtGlobalPoint(point) },\n                verse: { point in viewModel.wordAtGlobalPoint(point)?.verse }\n            )\n        )\n        .task {\n            await viewModel.loadImagePage()\n        }\n    }\n}\n\nprivate struct ContentImageViewBody: View {\n    let decorations: ImageDecorations\n    let image: UIImage?\n    let renderingMode: QuranThemedImage.RenderingMode\n    let quarterName: String\n    let suraNames: MultipartText\n    let page: String\n    let scrollToVerse: AyahNumber?\n    let wordFrames: WordFrameCollection?\n    let onScaleChange: (WordFrameScale) -> Void\n    let onGlobalFrameChange: (CGRect) -> Void\n\n    var body: some View {\n        AdaptiveImageScrollView(decorations: decorations, renderingMode: renderingMode) {\n            image\n        } onScaleChange: {\n            onScaleChange($0)\n        } onGlobalFrameChange: {\n            onGlobalFrameChange($0)\n        } header: {\n            QuranPageHeader(quarterName: quarterName, suraNames: suraNames)\n        } footer: {\n            QuranPageFooter(page: page)\n        }\n        .font(.footnote)\n        .populateReadableInsets()\n        .quranScrolling(scrollToValue: scrollToVerse) {\n            wordFrames?.lineFramesVerVerse($0).first\n        }\n    }\n}\n\n#Preview {\n    ContentImageViewBody(\n        decorations: ImageDecorations(\n            suraHeaders: [],\n            ayahNumbers: [],\n            wordFrames: WordFrameCollection(lines: []),\n            highlights: [:]\n        ),\n        image: UIImage(contentsOfFile: testResourceURL(\"images/page604.png\").absoluteString)!,\n        renderingMode: .tinted,\n        quarterName: \"ABC\",\n        suraNames: \"ABC\",\n        page: \"604\",\n        scrollToVerse: nil,\n        wordFrames: nil,\n        onScaleChange: { _ in },\n        onGlobalFrameChange: { _ in }\n    )\n    .themedBackground()\n    .populateReadableInsets()\n    .ignoresSafeArea()\n    .environment(\\.themeStyle, .calm)\n}\n"
  },
  {
    "path": "Features/QuranImageFeature/ContentImageViewModel.swift",
    "content": "//\n//  ContentImageViewModel.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-02-10.\n//\n\nimport AnnotationsService\nimport Combine\nimport Crashing\nimport ImageService\nimport NoorUI\nimport QuranAnnotations\nimport QuranGeometry\nimport QuranKit\nimport SwiftUI\nimport VLogging\n\n@MainActor\nclass ContentImageViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    init(reading: Reading, page: Page, imageDataService: ImageDataService, highlightsService: QuranHighlightsService) {\n        self.page = page\n        self.reading = reading\n        self.imageDataService = imageDataService\n        self.highlightsService = highlightsService\n        highlights = highlightsService.highlights\n\n        highlightsService.$highlights\n            .sink { [weak self] in self?.highlights = $0 }\n            .store(in: &cancellables)\n\n        highlightsService.scrolling\n            .sink { [weak self] in\n                self?.scrollToVerseIfNeeded()\n            }\n            .store(in: &cancellables)\n    }\n\n    // MARK: Internal\n\n    let page: Page\n    @Published var imagePage: ImagePage?\n    @Published var suraHeaderLocations: [SuraHeaderLocation] = []\n    @Published var ayahNumberLocations: [AyahNumberLocation] = []\n    @Published var highlights: QuranHighlights\n    @Published var scrollToVerse: AyahNumber?\n\n    @Published var scale: WordFrameScale = .zero\n    @Published var imageFrame: CGRect = .zero\n\n    var imageRenderingMode: QuranThemedImage.RenderingMode {\n        reading.usesInvertedQuranImageRenderingInDarkMode ? .invertInDarkMode : .tinted\n    }\n\n    var decorations: ImageDecorations {\n        // Add verse highlights\n        var frameHighlights: [WordFrame: Color] = [:]\n        let versesByHighlights = highlights.versesByHighlights()\n        for (ayah, color) in versesByHighlights {\n            for frame in imagePage?.wordFrames.wordFramesForVerse(ayah) ?? [] {\n                frameHighlights[frame] = Color(color)\n            }\n        }\n\n        // Add word highlight\n        if let word = highlights.pointedWord, let frame = imagePage?.wordFrames.wordFrameForWord(word) {\n            frameHighlights[frame] = QuranHighlights.wordHighlightColor\n        }\n\n        return ImageDecorations(\n            suraHeaders: suraHeaderLocations,\n            ayahNumbers: ayahNumberLocations,\n            wordFrames: imagePage?.wordFrames ?? WordFrameCollection(lines: []),\n            highlights: frameHighlights\n        )\n    }\n\n    func loadImagePage() async {\n        do {\n            imagePage = try await imageDataService.imageForPage(page)\n\n            if reading == .hafs_1421 {\n                suraHeaderLocations = try await imageDataService.suraHeaders(page)\n                ayahNumberLocations = try await imageDataService.ayahNumbers(page)\n            }\n\n            scrollToVerseIfNeeded()\n        } catch {\n            // TODO: should show error to the user\n            crasher.recordError(error, reason: \"Failed to retrieve quran image details\")\n        }\n    }\n\n    func wordAtGlobalPoint(_ point: CGPoint) -> Word? {\n        let localPoint = CGPoint(\n            x: point.x - imageFrame.minX,\n            y: point.y - imageFrame.minY\n        )\n        return imagePage?.wordFrames.wordAtLocation(localPoint, imageScale: scale)\n    }\n\n    // MARK: Private\n\n    private let imageDataService: ImageDataService\n    private let highlightsService: QuranHighlightsService\n    private let reading: Reading\n    private var cancellables: Set<AnyCancellable> = []\n\n    private func scrollToVerseIfNeededSynchronously() {\n        guard let ayah = highlightsService.highlights.firstScrollingVerse() else {\n            return\n        }\n        logger.info(\"Quran Image: scrollToVerseIfNeeded \\(ayah)\")\n        scrollToVerse = ayah\n    }\n\n    private func scrollToVerseIfNeeded() {\n        // Execute in the next runloop to allow the highlightsService value to load.\n        DispatchQueue.main.async {\n            self.scrollToVerseIfNeededSynchronously()\n        }\n    }\n}\n"
  },
  {
    "path": "Features/QuranImageFeature/ContentLineView.swift",
    "content": "//\n//  ContentLineView.swift\n//\n//\n//  Created by Mohamed Afifi on 2026-03-29.\n//\n\nimport ImageService\nimport NoorUI\nimport QuranGeometry\nimport QuranKit\nimport QuranPagesFeature\nimport SwiftUI\nimport UIKit\nimport UIx\n\nstruct ContentLineView: View {\n    @StateObject var viewModel: ContentLineViewModel\n\n    var body: some View {\n        ContentLineViewBody(\n            page: viewModel.page,\n            layoutForSize: { viewModel.layout(for: $0, showHeaderFooter: false) },\n            scrollToVerse: viewModel.scrollToVerse,\n            wordFrames: viewModel.wordFrames,\n            highlightColorsByVerse: viewModel.highlightColorsByVerse,\n            chromeStyle: viewModel.chromeStyle,\n            imageRenderingMode: viewModel.imageRenderingMode,\n            imageForLine: viewModel.lineImage(for:),\n            imageForSideline: viewModel.sidelineImage(for:),\n            onGlobalFrameChange: viewModel.updateContentFrame\n        )\n        .geometryActions(\n            PageGeometryActions(\n                id: ObjectIdentifier(viewModel),\n                word: { _ in nil },\n                verse: { point in viewModel.verseAtGlobalPoint(point) }\n            )\n        )\n        .task {\n            await viewModel.loadLinePage()\n        }\n    }\n}\n\nstruct ContentLineViewBody: View {\n    // MARK: Internal\n\n    let page: Page\n    let layoutForSize: (CGSize) -> LinePageLayout?\n    let scrollToVerse: AyahNumber?\n    let wordFrames: WordFrameCollection\n    let highlightColorsByVerse: [AyahNumber: Color]\n    let chromeStyle: LinePageChromeStyle\n    let imageRenderingMode: QuranThemedImage.RenderingMode\n    let imageForLine: (Int) -> UIImage?\n    let imageForSideline: (String) -> UIImage?\n    let onGlobalFrameChange: (CGRect) -> Void\n\n    var body: some View {\n        AdaptiveQuranScrollView {\n            QuranPageHeader(\n                quarterName: page.localizedQuarterName,\n                suraNames: page.suraNames()\n            )\n        } footer: {\n            QuranPageFooter(page: page.localizedNumber)\n        } content: { availableContentSize in\n            lineCanvas(layoutForSize(availableContentSize))\n        }\n        .font(.footnote)\n        .populateReadableInsets()\n        .themedBackground()\n        .quranScrolling(scrollToValue: scrollToVerse, anchor: UnitPoint(x: 0, y: 0.2)) { ayah in\n            wordFrames.wordFramesForVerse(ayah).first?.word\n        }\n    }\n\n    // MARK: Private\n\n    @Environment(\\.colorScheme) private var colorScheme\n\n    private var chromePalette: LinePageChromePalette {\n        chromeStyle.palette(for: colorScheme)\n    }\n\n    @ViewBuilder\n    private func scrollAnchors(_ layout: LinePageLayout) -> some View {\n        let verses = Set(wordFrames.lines.flatMap(\\.frames).map(\\.word.verse)).sorted()\n\n        ForEach(verses, id: \\.self) { ayah in\n            if let anchorWord = wordFrames.wordFramesForVerse(ayah).first?.word,\n               let start = layout.selectionAnchors(for: ayah)?.start\n            {\n                VStack(spacing: 0) {\n                    Color.clear\n                        .frame(height: start.minY)\n\n                    Color.clear\n                        .frame(width: 1, height: 1)\n                        .id(anchorWord)\n\n                    Spacer(minLength: 0)\n                }\n                .frame(\n                    width: layout.contentSize.width,\n                    height: layout.contentSize.height,\n                    alignment: .topLeading\n                )\n            }\n        }\n    }\n\n    private func lineCanvas(_ layout: LinePageLayout?) -> some View {\n        ZStack(alignment: .topLeading) {\n            Color.clear\n                .frame(\n                    width: layout?.contentSize.width ?? 0,\n                    height: layout?.contentSize.height ?? 0\n                )\n\n            if let layout {\n                scrollAnchors(layout)\n\n                lineImages(layout)\n\n                ForEach(layout.sidelinePlacements, id: \\.self) { placement in\n                    if let image = imageForSideline(placement.sideline.id) {\n                        QuranThemedImage(image: image, renderingMode: imageRenderingMode)\n                            .frame(\n                                width: placement.frame.width,\n                                height: placement.frame.height\n                            )\n                            .offset(\n                                x: placement.frame.minX,\n                                y: placement.frame.minY\n                            )\n                    }\n                }\n\n                ForEach(layout.suraHeaderPlacements, id: \\.self) { placement in\n                    SuraHeaderView(tint: chromePalette.header.foreground)\n                        .frame(\n                            width: placement.frame.width,\n                            height: placement.frame.height\n                        )\n                        .offset(\n                            x: placement.frame.minX,\n                            y: placement.frame.minY\n                        )\n                }\n\n                ForEach(layout.ayahMarkerPlacements, id: \\.self) { placement in\n                    AyahNumberView(\n                        number: placement.marker.ayah.ayah,\n                        ringColor: chromePalette.marker.ringForeground,\n                        fillColor: chromePalette.marker.content?.background,\n                        textColor: chromePalette.marker.content?.foreground\n                    )\n                    .frame(\n                        width: placement.frame.width,\n                        height: placement.frame.height\n                    )\n                    .offset(\n                        x: placement.frame.minX,\n                        y: placement.frame.minY\n                    )\n                }\n\n                ForEach(layout.highlightRects, id: \\.self) { highlight in\n                    if let color = highlightColorsByVerse[highlight.ayah] {\n                        color\n                            .frame(\n                                width: highlight.rect.width,\n                                height: highlight.rect.height\n                            )\n                            .offset(\n                                x: highlight.rect.minX,\n                                y: highlight.rect.minY\n                            )\n                    }\n                }\n            }\n        }\n        .frame(\n            width: layout?.contentSize.width ?? 0,\n            height: layout?.contentSize.height ?? 0,\n            alignment: .topLeading\n        )\n        .environment(\\.layoutDirection, .leftToRight)\n        .onGlobalFrameChanged(onGlobalFrameChange)\n    }\n\n    private func lineImages(_ layout: LinePageLayout) -> some View {\n        VStack(alignment: .leading, spacing: 0) {\n            ForEach(Array(layout.lineFrames.enumerated()), id: \\.element) { item in\n                let lineFrame = item.element\n                let previousLineMaxY = item.offset == 0 ? 0 : layout.lineFrames[item.offset - 1].imageFrame.maxY\n                let topPadding = lineFrame.imageFrame.minY - previousLineMaxY\n\n                Group {\n                    if let image = imageForLine(lineFrame.lineNumber) {\n                        QuranThemedImage(image: image, renderingMode: imageRenderingMode)\n                    } else {\n                        Color.clear\n                    }\n                }\n                .frame(\n                    width: lineFrame.imageFrame.width,\n                    height: lineFrame.imageFrame.height,\n                    alignment: .topLeading\n                )\n                .padding(.top, topPadding)\n                .id(lineFrame.lineNumber)\n            }\n        }\n        .padding(.leading, layout.pageFrame.minX)\n        .frame(\n            width: layout.contentSize.width,\n            height: layout.contentSize.height,\n            alignment: .topLeading\n        )\n    }\n}\n\nenum LinePageChromeStyle: Equatable {\n    case greenChrome\n    case blueChrome\n\n    init(reading: Reading) {\n        self = reading.usesBlueLinePageChrome ? .blueChrome : .greenChrome\n    }\n}\n\nprivate struct LinePageChromeColors {\n    let foreground: Color\n    let background: Color?\n}\n\nprivate struct LinePageChromeMarkerPalette {\n    let ringForeground: Color\n    let content: LinePageChromeColors?\n}\n\nprivate struct LinePageChromePalette {\n    let header: LinePageChromeColors\n    let marker: LinePageChromeMarkerPalette\n}\n\nprivate func color(hex: Int) -> Color {\n    Color(uiColor: UIColor(rgb: hex))\n}\n\nprivate extension LinePageChromeStyle {\n    func palette(for colorScheme: ColorScheme) -> LinePageChromePalette {\n        switch (self, colorScheme) {\n        case (.blueChrome, .dark):\n            return LinePageChromePalette(\n                header: LinePageChromeColors(foreground: color(hex: 0x73AFFA), background: nil),\n                marker: LinePageChromeMarkerPalette(\n                    ringForeground: color(hex: 0x73AFFA),\n                    content: LinePageChromeColors(\n                        foreground: color(hex: 0x73AFFA),\n                        background: color(hex: 0x172554)\n                    )\n                )\n            )\n        case (.blueChrome, .light):\n            return LinePageChromePalette(\n                header: LinePageChromeColors(foreground: color(hex: 0x2563EB), background: nil),\n                marker: LinePageChromeMarkerPalette(\n                    ringForeground: color(hex: 0x2563EB),\n                    content: LinePageChromeColors(\n                        foreground: color(hex: 0x1D4ED8),\n                        background: color(hex: 0xEFF6FF)\n                    )\n                )\n            )\n        case (.greenChrome, .dark):\n            return LinePageChromePalette(\n                header: LinePageChromeColors(foreground: color(hex: 0x047857), background: nil),\n                marker: LinePageChromeMarkerPalette(\n                    ringForeground: color(hex: 0x047857),\n                    content: LinePageChromeColors(\n                        foreground: color(hex: 0x34D399),\n                        background: color(hex: 0x022C22)\n                    )\n                )\n            )\n        case (.greenChrome, .light):\n            return LinePageChromePalette(\n                header: LinePageChromeColors(foreground: color(hex: 0x047857), background: nil),\n                marker: LinePageChromeMarkerPalette(\n                    ringForeground: color(hex: 0x047857),\n                    content: LinePageChromeColors(\n                        foreground: color(hex: 0x047857),\n                        background: color(hex: 0xECFDF5)\n                    )\n                )\n            )\n        @unknown default:\n            return palette(for: .light)\n        }\n    }\n}\n"
  },
  {
    "path": "Features/QuranImageFeature/ContentLineViewModel.swift",
    "content": "//\n//  ContentLineViewModel.swift\n//\n//\n//  Created by Mohamed Afifi on 2026-03-29.\n//\n\nimport AnnotationsService\nimport Combine\nimport ImageService\nimport LinePagePersistence\nimport NoorUI\nimport QuranAnnotations\nimport QuranGeometry\nimport QuranKit\nimport SwiftUI\nimport VLogging\n\n@MainActor\nfinal class ContentLineViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    init(\n        reading: Reading,\n        page: Page,\n        linePageAssetService: LinePageAssetService,\n        highlightsService: QuranHighlightsService\n    ) {\n        self.reading = reading\n        self.page = page\n        self.linePageAssetService = linePageAssetService\n        highlights = highlightsService.highlights\n\n        highlightsService.$highlights\n            .sink { [weak self] in self?.highlights = $0 }\n            .store(in: &cancellables)\n\n        highlightsService.scrolling\n            .sink { [weak self] in\n                self?.scrollToVerseIfNeeded()\n            }\n            .store(in: &cancellables)\n    }\n\n    // MARK: Internal\n\n    let page: Page\n\n    @Published var assets: LinePageAssets?\n    @Published private(set) var geometryData = LinePageGeometryData(\n        highlightSpans: [],\n        ayahMarkers: [],\n        suraHeaders: [],\n        sidelines: []\n    )\n    @Published var highlights: QuranHighlights\n    @Published var scrollToVerse: AyahNumber?\n\n    var imageRenderingMode: QuranThemedImage.RenderingMode {\n        reading.usesInvertedQuranImageRenderingInDarkMode ? .invertInDarkMode : .tinted\n    }\n\n    var highlightColorsByVerse: [AyahNumber: Color] {\n        highlights.versesByHighlights().mapValues { Color($0) }\n    }\n\n    var chromeStyle: LinePageChromeStyle {\n        LinePageChromeStyle(reading: reading)\n    }\n\n    var wordFrames: WordFrameCollection {\n        wordFrameAdapter.wordFrames(\n            from: geometryData.highlightSpans,\n            quran: page.quran,\n            lineCount: geometryData.lineCount\n        )\n    }\n\n    func loadLinePage() async {\n        let page = page\n        let linePageAssetService = linePageAssetService\n\n        let result = await linePageAssetService.assetsForPage(page)\n\n        switch result {\n        case .available(let assets):\n            let persistence = GRDBLinePagePersistence(fileURL: assets.ayahInfoDatabaseURL)\n            self.assets = assets\n            geometryData = LinePageGeometryData(\n                lineCount: assets.lines.count,\n                highlightSpans: [],\n                ayahMarkers: [],\n                suraHeaders: [],\n                sidelines: geometrySidelines(from: assets)\n            )\n\n            do {\n                async let highlightSpans = persistence.highlightSpans(page)\n                async let ayahMarkers = persistence.ayahMarkers(page)\n                async let suraHeaders = persistence.suraHeaders(page)\n                let loadedHighlightSpans = try await highlightSpans\n                let loadedAyahMarkers = try await ayahMarkers\n                let loadedSuraHeaders = try await suraHeaders\n\n                geometryData = LinePageGeometryData(\n                    lineCount: assets.lines.count,\n                    highlightSpans: loadedHighlightSpans,\n                    ayahMarkers: loadedAyahMarkers,\n                    suraHeaders: loadedSuraHeaders,\n                    sidelines: geometrySidelines(from: assets)\n                )\n            } catch {\n                logger.warning(\"Quran Line Page: failed to load overlay data for page \\(page.pageNumber): \\(error)\")\n            }\n\n            scrollToVerseIfNeeded()\n        case .unavailable:\n            logger.warning(\"Quran Line Page: assets unavailable for page \\(page.pageNumber)\")\n        }\n    }\n\n    func layout(for availableSize: CGSize, showHeaderFooter: Bool = true) -> LinePageLayout? {\n        guard let assets else {\n            currentLayout = nil\n            return nil\n        }\n\n        let orientation: LinePageOrientation = availableSize.height > availableSize.width ? .portrait : .landscape\n        let layout = geometryEngine.layout(\n            LinePageGeometryInput(\n                availableSize: availableSize,\n                orientation: orientation,\n                pageParity: page.pageNumber.isMultiple(of: 2) ? .even : .odd,\n                displaySettings: LinePageDisplaySettings(\n                    showHeaderFooter: showHeaderFooter,\n                    showSidelines: !geometryData.sidelines.isEmpty\n                ),\n                data: LinePageGeometryData(\n                    lineCount: assets.lines.count,\n                    highlightSpans: geometryData.highlightSpans,\n                    ayahMarkers: geometryData.ayahMarkers,\n                    suraHeaders: geometryData.suraHeaders,\n                    sidelines: geometryData.sidelines\n                ),\n                highlights: LinePageHighlightState(\n                    highlightedVerses: Set(highlightColorsByVerse.keys)\n                ),\n                suraHeaderAspectRatio: suraHeaderAspectRatio\n            )\n        )\n        currentLayout = layout\n        return layout\n    }\n\n    func lineImage(for lineNumber: Int) -> UIImage? {\n        assets?.lines.first(where: { $0.lineNumber == lineNumber })?.image\n    }\n\n    func sidelineImage(for id: String) -> UIImage? {\n        assets?.sidelines.first(where: { $0.imageURL.lastPathComponent == id })?.image\n    }\n\n    func updateContentFrame(_ frame: CGRect) {\n        contentFrame = frame\n    }\n\n    func verseAtGlobalPoint(_ point: CGPoint) -> AyahNumber? {\n        guard let currentLayout else {\n            return nil\n        }\n        let localPoint = CGPoint(\n            x: point.x - contentFrame.minX,\n            y: point.y - contentFrame.minY\n        )\n        return currentLayout.verse(at: localPoint)\n    }\n\n    // MARK: Private\n\n    private let reading: Reading\n    private let linePageAssetService: LinePageAssetService\n    private let wordFrameAdapter = LinePageWordFrameAdapter()\n    private let geometryEngine = LinePageGeometryEngine()\n    private var cancellables: Set<AnyCancellable> = []\n    private var currentLayout: LinePageLayout?\n    private var contentFrame: CGRect = .zero\n\n    private var suraHeaderAspectRatio: CGFloat {\n        let image = NoorImage.suraHeader.uiImage\n        return image.size.height / image.size.width\n    }\n\n    private func geometrySidelines(from assets: LinePageAssets) -> [LinePageGeometryData.Sideline] {\n        assets.sidelines.map {\n            LinePageGeometryData.Sideline(\n                id: $0.imageURL.lastPathComponent,\n                targetLine: $0.targetLine,\n                direction: $0.direction,\n                intrinsicSize: $0.image.size\n            )\n        }\n    }\n\n    private func scrollToVerseIfNeededSynchronously() {\n        let ayah = highlights.firstScrollingVerse()\n        if let ayah {\n            logger.info(\"Quran Line Page: scrollToVerseIfNeeded \\(ayah)\")\n        }\n        scrollToVerse = ayah\n    }\n\n    private func scrollToVerseIfNeeded() {\n        DispatchQueue.main.async {\n            self.scrollToVerseIfNeededSynchronously()\n        }\n    }\n}\n"
  },
  {
    "path": "Features/QuranPagesFeature/Page+Localization.swift",
    "content": "//\n//  Page+Localization.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-19.\n//\n\nimport Caching\nimport Foundation\nimport NoorUI\nimport QuranKit\nimport QuranTextKit\n\nextension Page {\n    // TODO: Remove\n    public func suraNames() -> NSAttributedString {\n        let suras = verses.map(\\.sura).orderedUnique()\n        return suras.reduce(NSMutableAttributedString()) { fullString, sura in\n            if fullString.length > 0 {\n                fullString.append(NSAttributedString(string: \" - \"))\n            }\n            let suraString = attributedString(of: sura.localizedName(), arabicSuraName: sura.arabicSuraName, fontSize: 14)\n            fullString.append(suraString)\n            return fullString\n        }\n    }\n\n    public func suraNames() -> MultipartText {\n        let suras = verses.map(\\.sura).orderedUnique()\n        let textArray = suras.map { $0.multipartSuraName() }\n\n        var result: MultipartText = \"\"\n        for (index, text) in textArray.enumerated() {\n            if index == 0 {\n                result.append(text)\n            } else {\n                result.append(\" - \\(text)\")\n            }\n        }\n        return result\n    }\n}\n\nprivate extension Sura {\n    func multipartSuraName() -> MultipartText {\n        \"\\(localizedName()) \\(sura: arabicSuraName)\"\n    }\n}\n\nextension Page: @retroactive Pageable { }\n"
  },
  {
    "path": "Features/QuranPagesFeature/PageGeometryActions.swift",
    "content": "//\n//  PageGeometryActions.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-10-06.\n//\n\nimport Foundation\nimport QuranKit\nimport SwiftUI\n\npublic struct PageGeometryActions: Equatable {\n    let id: AnyHashable\n    public var word: @MainActor (CGPoint) -> Word?\n    public var verse: @MainActor (CGPoint) -> AyahNumber?\n\n    public init(id: some Hashable, word: @escaping (CGPoint) -> Word?, verse: @escaping (CGPoint) -> AyahNumber?) {\n        self.id = id\n        self.word = word\n        self.verse = verse\n    }\n\n    public nonisolated static func == (lhs: PageGeometryActions, rhs: PageGeometryActions) -> Bool {\n        return lhs.id == rhs.id\n    }\n}\n\nprivate struct PageGeometryActionsPreferenceKey: PreferenceKey {\n    public static var defaultValue: [PageGeometryActions] = []\n    public static func reduce(value: inout [PageGeometryActions], nextValue: () -> [PageGeometryActions]) {\n        value.append(contentsOf: nextValue())\n    }\n}\n\n@MainActor\nprivate struct PageGeometryActionsViewModifier: ViewModifier {\n    let actions: PageGeometryActions\n    @State private var frame: CGRect = .zero\n\n    func body(content: Content) -> some View {\n        content\n            .preference(key: PageGeometryActionsPreferenceKey.self, value: [actions])\n            .onGlobalFrameChanged {\n                frame = $0\n            }\n    }\n\n    func toLocalPoint(_ globalPoint: CGPoint) -> CGPoint {\n        CGPoint(\n            x: globalPoint.x - frame.minX,\n            y: globalPoint.y - frame.minY\n        )\n    }\n}\n\nextension View {\n    public func geometryActions(_ actions: PageGeometryActions) -> some View {\n        modifier(PageGeometryActionsViewModifier(actions: actions))\n    }\n\n    public func collectGeometryActions(_ actions: Binding<[PageGeometryActions]>) -> some View {\n        onPreferenceChange(PageGeometryActionsPreferenceKey.self) {\n            actions.wrappedValue = $0\n        }\n    }\n}\n"
  },
  {
    "path": "Features/QuranPagesFeature/QuranPaginationView.swift",
    "content": "//\n//  QuranPaginationView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-25.\n//\n\nimport NoorUI\nimport QuranKit\nimport SwiftUI\n\npublic enum PagingStrategy {\n    case singlePage\n    case doublePage\n}\n\npublic struct QuranPaginationView<Content: View>: View {\n    // MARK: Lifecycle\n\n    public init(pagingStrategy: PagingStrategy, selection: Binding<[Page]>, pages: [Page], content: @escaping (Page) -> Content) {\n        self.pagingStrategy = pagingStrategy\n        _selection = selection\n        self.pages = pages\n        self.content = content\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        Group {\n            switch pagingStrategy {\n            case .singlePage:\n                QuranSinglePaginationView(\n                    selection: singlePageSelection,\n                    pages: pages,\n                    content: contentView\n                )\n            case .doublePage:\n                QuranDoublePaginationView(\n                    selection: $selection,\n                    pages: pages,\n                    content: contentView\n                )\n            }\n        }\n        .environment(\\.layoutDirection, .rightToLeft)\n        .accessibilityIdentifier(\"pages\")\n        .themedBackground()\n        .themedForeground()\n        .populateThemeStyle()\n        .appearanceModeColorSchema()\n        .ignoresSafeArea()\n    }\n\n    // MARK: Private\n\n    @Environment(\\.layoutDirection) private var layoutDirection\n\n    private let pagingStrategy: PagingStrategy\n\n    @Binding private var selection: [Page]\n    private let pages: [Page]\n\n    @ViewBuilder private let content: (Page) -> Content\n\n    private var singlePageSelection: Binding<Page> {\n        Binding(\n            get: { selection[0] },\n            set: { selection = [$0] }\n        )\n    }\n\n    @ViewBuilder\n    private func contentView(for page: Page) -> some View {\n        content(page)\n            .environment(\\.layoutDirection, layoutDirection)\n    }\n}\n\nprivate struct QuranDoublePaginationView<Content: View>: View {\n    private struct DoublePage: Identifiable, Equatable {\n        let first: Page\n        let second: Page\n\n        var id: [Page] { [first, second] }\n    }\n\n    // MARK: Internal\n\n    @Binding var selection: [Page]\n    let pages: [Page]\n    @ViewBuilder let content: (Page) -> Content\n\n    var body: some View {\n        PageViewController(\n            transitionStyle: .scroll,\n            navigationOrientation: .horizontal,\n            interPageSpacing: ContentDimension.interPageSpacing,\n            animated: true,\n            selection: doublePageSelection\n        ) {\n            ForEach(doublePages) { doublePage in\n                HStack(spacing: 0) {\n                    QuranSeparators.PageSideSeparator(leading: true)\n                    content(doublePage.first)\n                    QuranSeparators.PageMiddleSeparator()\n                    content(doublePage.second)\n                    QuranSeparators.PageSideSeparator(leading: false)\n                }\n            }\n        }\n    }\n\n    // MARK: Private\n\n    private var doublePageSelection: Binding<DoublePage> {\n        Binding(\n            get: {\n                let pageIndex = selection.first.flatMap { pages.firstIndex(of: $0) } ?? 0\n                return doublePages[pageIndex / 2]\n            },\n            set: { selection = [$0.first, $0.second] }\n        )\n    }\n\n    private var doublePages: [DoublePage] {\n        stride(from: 0, to: pages.count, by: 2).map {\n            DoublePage(first: pages[$0], second: pages[$0 + 1])\n        }\n    }\n}\n\nprivate struct QuranSinglePaginationView<Content: View>: View {\n    // MARK: Internal\n\n    @Binding var selection: Page\n    let pages: [Page]\n    @ViewBuilder let content: (Page) -> Content\n\n    var body: some View {\n        PageViewController(\n            transitionStyle: .scroll,\n            navigationOrientation: .horizontal,\n            interPageSpacing: ContentDimension.interPageSpacing,\n            animated: true,\n            selection: $selection\n        ) {\n            ForEach(pages) { page in\n                Group {\n                    if isRightSide(page) {\n                        HStack(spacing: 0) {\n                            QuranSeparators.PageSideSeparator(leading: true)\n                            content(page)\n                            QuranSeparators.PageMiddleSeparator()\n                                .offset(x: middleOffset)\n                                .padding(.leading, -middleOffset)\n                        }\n                    } else {\n                        HStack(spacing: 0) {\n                            content(page)\n                            QuranSeparators.PageSideSeparator(leading: false)\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    // MARK: Private\n\n    private var middleOffset: CGFloat {\n        QuranSeparators.middleWidth\n    }\n\n    private func isRightSide(_ page: Page) -> Bool {\n        page.pageNumber % 2 == 1\n    }\n}\n\nextension Page: @retroactive Identifiable {\n    public var id: Int { pageNumber }\n}\n\nstruct QuranPaginationView_Previews: PreviewProvider {\n    struct QuranPaginationViewPreview: View {\n        static let quran = Quran.hafsMadani1405\n\n        @State var selection = [quran.pages[0]]\n        let pages = quran.pages\n\n        let pagingStrategy: PagingStrategy\n\n        var body: some View {\n            QuranPaginationView(\n                pagingStrategy: pagingStrategy,\n                selection: $selection,\n                pages: pages\n            ) { page in\n                ZStack {\n                    VStack {\n                        VStack(alignment: .leading) {\n                            HStack {\n                                Text(\"Page: \\(page.pageNumber) left\")\n                                Spacer()\n                                Text(\"Page: \\(page.pageNumber) Right\")\n                            }\n                            Spacer()\n                            HStack {\n                                Text(\"Page: \\(page.pageNumber)\")\n                                Spacer()\n                                Text(\"Page: \\(page.pageNumber)\")\n                            }\n                            Spacer()\n                            HStack {\n                                Text(\"Page: \\(page.pageNumber)\")\n                                Spacer()\n                                Text(\"Page: \\(page.pageNumber)\")\n                            }\n                        }\n                    }\n                }\n            }\n            .environment(\\.layoutDirection, .rightToLeft)\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        QuranPaginationViewPreview(pagingStrategy: .singlePage)\n        QuranPaginationViewPreview(pagingStrategy: .doublePage)\n    }\n}\n"
  },
  {
    "path": "Features/QuranTranslationFeature/ContentTranslationBuilder.swift",
    "content": "//\n//  ContentTranslationBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/30/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AnnotationsService\nimport AppDependencies\nimport QuranKit\nimport QuranPagesFeature\nimport QuranTextKit\nimport SwiftUI\nimport TranslationService\n\npublic struct ContentTranslationBuilder {\n    private let container: AppDependencies\n    private let highlightsService: QuranHighlightsService\n\n    public init(container: AppDependencies, highlightsService: QuranHighlightsService) {\n        self.container = container\n        self.highlightsService = highlightsService\n    }\n\n    @MainActor\n    public func build(at page: Page) -> some View {\n        let dataService = QuranTextDataService(\n            databasesURL: container.databasesURL,\n            quranFileURL: container.quranUthmaniV2Database\n        )\n\n        let localTranslationsRetriever = LocalTranslationsRetriever(databasesURL: container.databasesURL)\n        let viewModel = ContentTranslationViewModel(\n            localTranslationsRetriever: localTranslationsRetriever,\n            dataService: dataService,\n            highlightsService: highlightsService\n        )\n        viewModel.verses = page.verses\n        return ContentTranslationView(viewModel: viewModel)\n    }\n}\n"
  },
  {
    "path": "Features/QuranTranslationFeature/ContentTranslationView.swift",
    "content": "//\n//  ContentTranslationView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-29.\n//\n\nimport NoorUI\nimport QuranKit\nimport QuranPagesFeature\nimport QuranText\nimport SwiftUI\nimport UIx\nimport Utilities\n\npublic struct ContentTranslationView: View {\n    @StateObject var viewModel: ContentTranslationViewModel\n\n    public init(viewModel: @autoclosure @escaping () -> ContentTranslationViewModel) {\n        _viewModel = StateObject(wrappedValue: viewModel())\n    }\n\n    public var body: some View {\n        ContentTranslationViewBody(\n            items: viewModel.items,\n            arabicFontSize: viewModel.arabicFontSize,\n            translationFontSize: viewModel.translationFontSize,\n            highlights: viewModel.highlights,\n            scrollToItem: viewModel.scrollToItem,\n            tracker: viewModel.tracker,\n            footnote: $viewModel.footnote,\n            openURL: { viewModel.openURL($0) }\n        )\n        .geometryActions(\n            PageGeometryActions(\n                id: ObjectIdentifier(viewModel),\n                word: { _ in nil },\n                verse: { point in viewModel.ayahAtPoint(point) }\n            )\n        )\n        .task(id: Pair(viewModel.verses, viewModel.selectedTranslations)) {\n            await viewModel.load()\n        }\n    }\n}\n\nprivate struct ContentTranslationViewBody: View {\n    let items: [TranslationItem]\n\n    let arabicFontSize: FontSize\n    let translationFontSize: FontSize\n    let highlights: [AyahNumber: Color]\n    let scrollToItem: TranslationItemId?\n    let tracker: CollectionTracker<TranslationItemId>\n\n    @Binding var footnote: TranslationFootnote?\n\n    let openURL: (TranslationURL) -> Void\n\n    var body: some View {\n        List {\n            ForEach(items) { item in\n                item\n            }\n        }\n        .listStyle(.plain)\n        .environment(\\.defaultMinListRowHeight, 1)\n        .populateReadableInsets()\n        .openTranslationURL(openURL)\n        .trackCollection(with: tracker)\n        .sheet(item: $footnote) { $0 }\n        .quranScrolling(scrollToValue: scrollToItem)\n    }\n}\n"
  },
  {
    "path": "Features/QuranTranslationFeature/ContentTranslationViewModel.swift",
    "content": "//\n//  ContentTranslationViewModel.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-29.\n//\n\nimport AnnotationsService\nimport Combine\nimport Crashing\nimport Foundation\nimport QuranKit\nimport QuranText\nimport QuranTextKit\nimport SwiftUI\nimport TranslationService\nimport UIx\nimport VLogging\n\n@MainActor\npublic final class ContentTranslationViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    public init(\n        localTranslationsRetriever: LocalTranslationsRetriever,\n        dataService: QuranTextDataService,\n        highlightsService: QuranHighlightsService\n    ) {\n        self.dataService = dataService\n        self.highlightsService = highlightsService\n        self.localTranslationsRetriever = localTranslationsRetriever\n        arabicFontSize = fontSizePreferences.arabicFontSize\n        translationFontSize = fontSizePreferences.translationFontSize\n        selectedTranslations = selectedTranslationsPreferences.selectedTranslationIds\n        highlights = highlightsService.highlights.versesByHighlights().mapValues { Color($0) }\n\n        highlightsService.$highlights\n            .sink { [weak self] in self?.highlights = $0.versesByHighlights().mapValues { Color($0) } }\n            .store(in: &cancellables)\n\n        highlightsService.scrolling\n            .sink { [weak self] in\n                self?.scrollToVerseIfNeeded()\n            }\n            .store(in: &cancellables)\n\n        fontSizePreferences.$translationFontSize\n            .sink { [weak self] in self?.translationFontSize = $0 }\n            .store(in: &cancellables)\n\n        fontSizePreferences.$arabicFontSize\n            .sink { [weak self] in self?.arabicFontSize = $0 }\n            .store(in: &cancellables)\n\n        selectedTranslationsPreferences.$selectedTranslationIds\n            .sink { [weak self] in self?.selectedTranslations = $0 }\n            .store(in: &cancellables)\n    }\n\n    // MARK: Public\n\n    @Published public var showHeaderAndFooter = true\n    @Published public var verses: [AyahNumber] = []\n\n    // MARK: Internal\n\n    let tracker = CollectionTracker<TranslationItemId>()\n\n    @Published var selectedTranslations: [Translation.ID]\n    @Published var translations: [Translation] = []\n    @Published var verseTexts: [AyahNumber: VerseText] = [:]\n    @Published var expandedTranslations: [AyahNumber: [Translation: [Range<String.Index>]]] = [:]\n\n    @Published var translationFontSize: FontSize\n    @Published var arabicFontSize: FontSize\n\n    @Published var highlights: [AyahNumber: Color]\n\n    @Published var footnote: TranslationFootnote?\n\n    @Published var scrollToItem: TranslationItemId?\n\n    var items: [TranslationItem] {\n        guard let page = verseTexts.first?.key.page else {\n            return []\n        }\n        guard verseTexts.first?.value.translations.count == translations.count else {\n            return []\n        }\n\n        var items: [TranslationItem] = []\n\n        for (verse, verseText) in verseTexts.sorted(by: { $0.key < $1.key }) {\n            let color = highlights[verse]\n\n            // Add sura name, if a new sura\n            if verse.sura.firstVerse == verse {\n                items.append(.suraName(TranslationSuraName(sura: verse.sura, arabicFontSize: arabicFontSize), color))\n            }\n\n            // Add arabic quran text\n            let arabicVerseNumber = NumberFormatter.arabicNumberFormatter.format(verse.ayah)\n            let arabicText = verseText.arabicText + \" \" + arabicVerseNumber\n            items.append(.arabicText(TranslationArabicText(verse: verse, text: arabicText, arabicFontSize: arabicFontSize), color))\n\n            for (index, translation) in translations.enumerated() {\n                let text = verseText.translations[index]\n\n                switch text {\n                case .reference(let reference):\n                    items.append(\n                        .translationReferenceVerse(\n                            TranslationReferenceVerse(\n                                verse: verse,\n                                translation: translation,\n                                reference: reference,\n                                translationFontSize: translationFontSize\n                            ), color\n                        )\n                    )\n                case .string(let string):\n                    let chunks: [Range<String.Index>]\n                    let readMore: Bool\n                    if let cutoffChunk = cutoffChunkIfTruncationNeeded(string.text) {\n                        if let expandedChunks = expandedChunks(verse: verse, translation: translation) {\n                            chunks = expandedChunks\n                            readMore = false\n                        } else {\n                            chunks = [cutoffChunk]\n                            readMore = true\n                        }\n                    } else {\n                        chunks = [string.text.startIndex ..< string.text.endIndex]\n                        readMore = false\n                    }\n\n                    for chunkIndex in 0 ..< chunks.count {\n                        items.append(\n                            .translationTextChunk(\n                                TranslationTextChunk(\n                                    verse: verse,\n                                    translation: translation,\n                                    text: string,\n                                    chunks: chunks,\n                                    chunkIndex: chunkIndex,\n                                    readMore: chunkIndex == chunks.count - 1 ? readMore : false, // Add read more to the last chunk.\n                                    translationFontSize: translationFontSize\n                                ), color\n                            )\n                        )\n                    }\n                }\n\n                // Show translator if showing more than a single translation.\n                if translations.count > 1 {\n                    items.append(\n                        .translatorText(\n                            TranslatorText(\n                                verse: verse,\n                                translation: translation,\n                                translationFontSize: translationFontSize\n                            ), color\n                        )\n                    )\n                }\n            }\n\n            let isLastVerseInTheView = verses.last == verse\n            if !isLastVerseInTheView {\n                items.append(.verseSeparator(TranslationVerseSeparator(verse: verse), color))\n            }\n        }\n\n        if showHeaderAndFooter {\n            items.insert(.pageHeader(TranslationPageHeader(page: page)), at: 0)\n            items.append(.pageFooter(TranslationPageFooter(page: page)))\n        }\n\n        return items\n    }\n\n    func load() async {\n        do {\n            logger.info(\"Loading translations data; selectedTranslations='\\(selectedTranslations)'; verses='\\(verses)'\")\n            let localTranslations = try await localTranslationsRetriever.getLocalTranslations()\n            translations = selectedTranslationsPreferences.selectedTranslations(from: localTranslations)\n\n            let verses = verses\n            verseTexts = try await dataService.textForVerses(verses, translations: translations)\n\n            scrollToVerseIfNeeded()\n        } catch {\n            // TODO: should show error to the user\n            crasher.recordError(error, reason: \"Failed to retrieve quran page details\")\n        }\n    }\n\n    func openURL(_ url: TranslationURL) {\n        switch url {\n        case .footnote(let translationId, let sura, let ayah, let footnoteIndex):\n            setFootnoteIfNeeded(translationId: translationId, sura: sura, ayah: ayah, footnoteIndex: footnoteIndex)\n\n        case .readMore(let translationId, let sura, let ayah):\n            expandTranslationIfNeeded(translationId: translationId, sura: sura, ayah: ayah)\n        }\n    }\n\n    func ayahAtPoint(_ point: CGPoint) -> AyahNumber? {\n        tracker.itemAtPoint(point)?.ayah\n    }\n\n    // MARK: Private\n\n    private static let maxChunkSize = 800\n\n    private var cancellables: Set<AnyCancellable> = []\n    private let highlightsService: QuranHighlightsService\n    private let dataService: QuranTextDataService\n    private let localTranslationsRetriever: LocalTranslationsRetriever\n    private let selectedTranslationsPreferences = SelectedTranslationsPreferences.shared\n    private let fontSizePreferences = FontSizePreferences.shared\n\n    private func cutoffChunkIfTruncationNeeded(_ string: String) -> Range<String.Index>? {\n        guard let maxUntruncatedIndex = string.index(string.startIndex, offsetBy: Self.maxChunkSize, limitedBy: string.endIndex) else {\n            return nil\n        }\n        let chunkEndIndex = string[..<maxUntruncatedIndex].lastIndex(of: \" \") ?? maxUntruncatedIndex\n        return string.startIndex ..< chunkEndIndex\n    }\n\n    private func expandedChunks(verse: AyahNumber, translation: Translation) -> [Range<String.Index>]? {\n        expandedTranslations[verse]?[translation]\n    }\n\n    private func expandTranslationIfNeeded(translationId: Translation.ID, sura: Int, ayah: Int) {\n        performOnTranslationText(translationId: translationId, sura: sura, ayah: ayah) { ayah, translation, string in\n            if let cutoffChunk = cutoffChunkIfTruncationNeeded(string.text) {\n                let truncatedChunks = string.text.chunkRanges(range: cutoffChunk.upperBound ..< string.text.endIndex, maxChunkSize: Self.maxChunkSize)\n                expandedTranslations[ayah, default: [:]][translation] = [cutoffChunk] + truncatedChunks\n            }\n        }\n    }\n\n    private func setFootnoteIfNeeded(translationId: Translation.ID, sura: Int, ayah: Int, footnoteIndex: Int) {\n        performOnTranslationText(translationId: translationId, sura: sura, ayah: ayah) { ayah, translation, string in\n            footnote = TranslationFootnote(\n                string: string,\n                footnoteIndex: footnoteIndex,\n                translation: translation,\n                translationFontSize: translationFontSize\n            )\n        }\n    }\n\n    private func performOnTranslationText(translationId: Translation.ID, sura: Int, ayah: Int, _ body: (AyahNumber, Translation, TranslationString) -> Void) {\n        guard let quran = verses.first?.quran else {\n            return\n        }\n        let ayah = AyahNumber(quran: quran, sura: sura, ayah: ayah)\n        let translation = translations.first { $0.id == translationId }\n        let translationIndex = translation.flatMap { translations.firstIndex(of: $0) }\n        let verseText = ayah.flatMap { ayah in verseTexts[ayah] }\n        if let ayah, let translation, let translationIndex, let verseText {\n            if case .string(let string) = verseText.translations[translationIndex] {\n                body(ayah, translation, string)\n            }\n        }\n    }\n\n    private func scrollToVerseIfNeededSynchronously() {\n        guard let ayah = highlightsService.highlights.firstScrollingVerse() else {\n            return\n        }\n        for item in items {\n            if item.id.ayah == ayah {\n                logger.info(\"Quran Translation: scrollToVerseIfNeeded \\(ayah)\")\n                scrollToItem = item.id\n                break\n            }\n        }\n    }\n\n    private func scrollToVerseIfNeeded() {\n        // Execute in the next runloop to allow the highlightsService value to load.\n        DispatchQueue.main.async {\n            self.scrollToVerseIfNeededSynchronously()\n        }\n    }\n}\n"
  },
  {
    "path": "Features/QuranTranslationFeature/Translation+UI.swift",
    "content": "//\n//  Translation+UI.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 10/29/21.\n//  Copyright © 2021 Quran.com. All rights reserved.\n//\n\nimport NoorUI\nimport QuranText\nimport SwiftUI\n\nextension Translation {\n    var textFont: Font {\n        languageCode == \"ar\" ? .arabicTafseer() : .body\n    }\n\n    var characterDirection: Locale.LanguageDirection {\n        Locale.characterDirection(forLanguage: languageCode)\n    }\n}\n"
  },
  {
    "path": "Features/QuranTranslationFeature/TranslationFootnote.swift",
    "content": "//\n//  TranslationFootnote.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-20.\n//\n\nimport Localization\nimport QuranText\nimport SwiftUI\n\nstruct TranslationFootnote: View, Identifiable {\n    struct Id: Hashable {\n        let string: TranslationString\n        let footnoteIndex: Int\n\n        let translation: Translation\n        let translationFontSize: FontSize\n    }\n\n    var id: Id { Id(string: string, footnoteIndex: footnoteIndex, translation: translation, translationFontSize: translationFontSize) }\n\n    var text: String {\n        let text = string.footnotes[footnoteIndex]\n        return text.trimmingCharacters(in: CharacterSet(charactersIn: \"[]\"))\n    }\n\n    let string: TranslationString\n    let footnoteIndex: Int\n\n    let translation: Translation\n    let translationFontSize: FontSize\n\n    @Environment(\\.dismiss) private var dismiss\n\n    var body: some View {\n        NavigationView {\n            ScrollView {\n                Text(text)\n                    .font(translation.textFont)\n                    .dynamicTypeSize(translationFontSize.dynamicTypeSize)\n                    .padding()\n            }\n            .frame(maxWidth: .infinity, maxHeight: .infinity)\n            .themedForeground()\n            .themedBackground()\n            .navigationBarTitleDisplayMode(.inline)\n            .navigationTitle(lFormat(\"translation.text.footnote-title\", footnoteIndex + 1))\n            .toolbar {\n                Button {\n                    dismiss()\n                } label: {\n                    Text(l(\"button.done\"))\n                        .bold()\n                        .foregroundStyle(Color.appIdentity)\n                }\n            }\n        }\n        .sheetPresentationDetents([.medium, .large])\n    }\n}\n\nprivate struct TranslationFootnotePreview: View {\n    static let string = TranslationString(\n        text: \"\",\n        quranRanges: [],\n        footnoteRanges: [],\n        footnotes: [\"Footnote # 1\", \"Footnote # 2\"]\n    )\n\n    static var translation: Translation {\n        Translation(\n            id: 1,\n            displayName: \"\",\n            translator: \"\",\n            translatorForeign: \"Khan & Hilai\",\n            fileURL: URL(validURL: \"a\"),\n            fileName: \"quran.en.khanhilali.db\",\n            languageCode: \"\",\n            version: 5,\n            installedVersion: 5\n        )\n    }\n\n    @State var footnote: TranslationFootnote? = buildFootnote(index: 0)\n\n    var body: some View {\n        List {\n            ForEach(0 ..< Self.string.footnotes.count, id: \\.self) { index in\n                Button {\n                    footnote = Self.buildFootnote(index: index)\n                } label: {\n                    Text(\"Footnote \\(index + 1)\")\n                }\n            }\n        }\n        .sheet(item: $footnote) { $0 }\n    }\n\n    private static func buildFootnote(index: Int) -> TranslationFootnote {\n        TranslationFootnote(string: string, footnoteIndex: index, translation: translation, translationFontSize: .medium)\n    }\n}\n\n#Preview {\n    TranslationFootnotePreview()\n        .environment(\\.themeStyle, .calm)\n}\n"
  },
  {
    "path": "Features/QuranTranslationFeature/TranslationItem+View.swift",
    "content": "//\n//  TranslationItem+View.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-28.\n//\n\nimport NoorUI\nimport QuranKit\nimport QuranText\nimport SwiftUI\n\nextension TranslationPageHeader: View {\n    var body: some View {\n        QuranPageHeader(quarterName: page.localizedQuarterName, suraNames: page.suraNames())\n    }\n}\n\nextension TranslationPageFooter: View {\n    var body: some View {\n        QuranPageFooter(page: page.localizedNumber)\n    }\n}\n\nextension TranslationSuraName: View {\n    var body: some View {\n        QuranSuraName(\n            suraName: sura.localizedName(withPrefix: false),\n            besmAllah: sura.startsWithBesmAllah ? sura.quran.arabicBesmAllah : \"\",\n            besmAllahFontSize: arabicFontSize\n        )\n    }\n}\n\nextension TranslationArabicText: View {\n    var body: some View {\n        QuranArabicText(verse: verse, text: text, fontSize: arabicFontSize)\n    }\n}\n\nextension TranslationTextChunk {\n    var readMoreURL: URL {\n        TranslationURL.readMore(\n            translationId: translation.id,\n            sura: verse.sura.suraNumber,\n            ayah: verse.ayah\n        ).url\n    }\n}\n\nextension TranslationTextChunk: View {\n    var body: some View {\n        QuranTranslationTextChunk(\n            text: text.text,\n            chunk: chunks[chunkIndex],\n            footnoteRanges: text.footnoteRanges,\n            quranRanges: text.quranRanges,\n            firstChunk: chunkIndex == 0,\n            readMoreURL: readMore ? readMoreURL : nil,\n            footnoteURL: { index in\n                TranslationURL.footnote(\n                    translationId: translation.id,\n                    sura: verse.sura.suraNumber,\n                    ayah: verse.ayah,\n                    footnoteIndex: index\n                ).url\n            },\n            font: translation.textFont,\n            fontSize: translationFontSize,\n            characterDirection: translation.characterDirection\n        )\n    }\n}\n\nextension TranslationReferenceVerse: View {\n    var body: some View {\n        QuranTranslationReferenceVerse(reference: reference, fontSize: translationFontSize, characterDirection: translation.characterDirection)\n    }\n}\n\nextension TranslatorText: View {\n    var body: some View {\n        QuranTranslatorName(name: translation.translationName, fontSize: translationFontSize, characterDirection: translation.characterDirection)\n    }\n}\n\nextension TranslationItem: View {\n    var body: some View {\n        VStack {\n            switch self {\n            case .pageHeader(let pageHeader):\n                pageHeader\n            case .pageFooter(let pageFooter):\n                pageFooter\n            case .verseSeparator:\n                QuranVerseSeparator()\n            case .suraName(let suraName, _):\n                suraName\n            case .arabicText(let arabicText, _):\n                arabicText\n            case .translationTextChunk(let translationTextChunk, _):\n                translationTextChunk\n            case .translationReferenceVerse(let translationReferenceVerse, _):\n                translationReferenceVerse\n            case .translatorText(let translatorText, _):\n                translatorText\n            }\n        }\n        .font(.footnote)\n        .listRowSeparator(.hidden)\n        .listRowInsets(.zero)\n        .listRowBackground(Color.clear)\n        .background(color)\n        .trackingTarget(item: id)\n    }\n}\n\nimport NoorFont\n\n#Preview {\n    ContentTranslationPreview()\n}\n\nprivate struct ContentTranslationPreview: View {\n    @State var readMore: Bool = true\n\n    let quran = Quran.hafsMadani1405\n\n    let fontSize = FontSize.large\n\n    var translation: Translation {\n        Translation(\n            id: 1,\n            displayName: \"\",\n            translator: \"\",\n            translatorForeign: \"Khan & Hilai\",\n            fileURL: URL(validURL: \"a\"),\n            fileName: \"quran.en.khanhilali.db\",\n            languageCode: \"\",\n            version: 5,\n            installedVersion: 5\n        )\n    }\n\n    var translationText: String {\n        \"\"\"\n        Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.\n        \"\"\"\n    }\n\n    var chunks: [Range<String.Index>] {\n        translationText.chunkRanges(maxChunkSize: 70)\n    }\n\n    var body: some View {\n        ZStack(alignment: .bottomTrailing) {\n            List {\n                TranslationItem.pageHeader(.init(page: quran.pages[0]))\n                TranslationItem.suraName(.init(sura: quran.firstSura, arabicFontSize: fontSize), nil)\n                TranslationItem.arabicText(.init(\n                    verse: quran.firstVerse, text: quran.arabicBesmAllah, arabicFontSize: fontSize\n                ), nil)\n                ForEach(0 ..< (readMore ? 1 : chunks.count), id: \\.self) { chunkIndex in\n                    TranslationItem.translationTextChunk(\n                        .init(\n                            verse: quran.firstVerse,\n                            translation: translation,\n                            text: .init(text: translationText, quranRanges: [], footnoteRanges: [], footnotes: []),\n                            chunks: chunks,\n                            chunkIndex: chunkIndex,\n                            readMore: readMore && chunkIndex == 0,\n                            translationFontSize: fontSize\n                        ), nil\n                    )\n                }\n                TranslationItem.translatorText(.init(verse: quran.firstVerse, translation: translation, translationFontSize: fontSize), nil)\n                TranslationItem.verseSeparator(.init(verse: quran.firstVerse), nil)\n\n                TranslationItem.translationReferenceVerse(.init(verse: quran.firstVerse, translation: translation, reference: quran.lastVerse, translationFontSize: .medium), nil)\n                TranslationItem.verseSeparator(.init(verse: quran.firstVerse), nil)\n\n                TranslationItem.pageFooter(.init(page: quran.firstVerse.page))\n            }\n            .listStyle(.plain)\n            .environment(\\.defaultMinListRowHeight, 1)\n            .populateReadableInsets()\n\n            Button {\n                readMore.toggle()\n            } label: {\n                Text(\"Toggle Read more\")\n            }\n            .buttonStyle(.borderedProminent)\n            .padding()\n            .padding()\n        }\n        .ignoresSafeArea()\n        .onAppear {\n            FontName.registerFonts()\n        }\n    }\n}\n"
  },
  {
    "path": "Features/QuranTranslationFeature/TranslationItem.swift",
    "content": "//\n//  TranslationItem.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-29.\n//\n\nimport QuranKit\nimport QuranText\nimport SwiftUI\n\nenum TranslationItemId: Hashable, Sendable {\n    case pageHeader(Page)\n    case pageFooter(Page)\n    case separator(AyahNumber)\n    case suraName(Sura)\n    case arabic(AyahNumber)\n    case translator(AyahNumber, translationId: Translation.ID)\n    case translationReference(AyahNumber, translationId: Translation.ID)\n    case translationTextChunk(AyahNumber, translationId: Translation.ID, chunkIndex: Int)\n\n    var ayah: AyahNumber? {\n        switch self {\n        case .pageHeader, .pageFooter:\n            nil\n        case .suraName(let sura):\n            sura.firstVerse\n        case .separator(let ayahNumber),\n             .arabic(let ayahNumber),\n             .translator(let ayahNumber, _),\n             .translationReference(let ayahNumber, _),\n             .translationTextChunk(let ayahNumber, _, _):\n            ayahNumber\n        }\n    }\n}\n\nstruct TranslationPageHeader: Identifiable & Hashable {\n    let page: Page\n\n    var id: TranslationItemId { .pageHeader(page) }\n}\n\nstruct TranslationPageFooter: Identifiable & Hashable {\n    let page: Page\n\n    var id: TranslationItemId { .pageFooter(page) }\n}\n\nstruct TranslationVerseSeparator: Identifiable & Hashable {\n    let verse: AyahNumber\n\n    var id: TranslationItemId { .separator(verse) }\n}\n\nstruct TranslationSuraName: Identifiable & Hashable {\n    let sura: Sura\n    let arabicFontSize: FontSize\n\n    var id: TranslationItemId { .suraName(sura) }\n}\n\nstruct TranslationArabicText: Identifiable & Hashable {\n    let verse: AyahNumber\n    let text: String\n    let arabicFontSize: FontSize\n\n    var id: TranslationItemId { .arabic(verse) }\n}\n\nstruct TranslationTextChunk: Identifiable & Hashable {\n    let verse: AyahNumber\n    let translation: Translation\n    let text: TranslationString\n    let chunks: [Range<String.Index>]\n    let chunkIndex: Int\n    let readMore: Bool\n\n    let translationFontSize: FontSize\n\n    var id: TranslationItemId { .translationTextChunk(verse, translationId: translation.id, chunkIndex: chunkIndex) }\n}\n\nstruct TranslationReferenceVerse: Identifiable & Hashable {\n    let verse: AyahNumber\n\n    let translation: Translation\n    let reference: AyahNumber\n\n    let translationFontSize: FontSize\n\n    var id: TranslationItemId { .translationReference(verse, translationId: translation.id) }\n}\n\nstruct TranslatorText: Identifiable & Hashable {\n    let verse: AyahNumber\n    let translation: Translation\n\n    let translationFontSize: FontSize\n\n    var id: TranslationItemId { .translator(verse, translationId: translation.id) }\n}\n\nenum TranslationItem: Identifiable & Hashable {\n    case pageHeader(TranslationPageHeader)\n    case pageFooter(TranslationPageFooter)\n    case verseSeparator(TranslationVerseSeparator, Color?)\n    case suraName(TranslationSuraName, Color?)\n    case arabicText(TranslationArabicText, Color?)\n    case translationTextChunk(TranslationTextChunk, Color?)\n    case translationReferenceVerse(TranslationReferenceVerse, Color?)\n    case translatorText(TranslatorText, Color?)\n\n    var id: TranslationItemId {\n        switch self {\n        case .pageHeader(let item): return item.id\n        case .pageFooter(let item): return item.id\n        case .verseSeparator(let item, _): return item.id\n        case .suraName(let item, _): return item.id\n        case .arabicText(let item, _): return item.id\n        case .translationTextChunk(let item, _): return item.id\n        case .translationReferenceVerse(let item, _): return item.id\n        case .translatorText(let item, _): return item.id\n        }\n    }\n\n    var color: Color? {\n        switch self {\n        case .pageHeader, .pageFooter:\n            return nil\n        case .verseSeparator(_, let color),\n             .suraName(_, let color),\n             .arabicText(_, let color),\n             .translationTextChunk(_, let color),\n             .translationReferenceVerse(_, let color),\n             .translatorText(_, let color):\n            return color\n        }\n    }\n}\n"
  },
  {
    "path": "Features/QuranTranslationFeature/TranslationURL.swift",
    "content": "//\n//  TranslationURL.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-24.\n//\n\nimport Foundation\nimport QuranText\nimport SwiftUI\nimport UIx\n\nenum TranslationURL: Codable {\n    case footnote(translationId: Translation.ID, sura: Int, ayah: Int, footnoteIndex: Int)\n    case readMore(translationId: Translation.ID, sura: Int, ayah: Int)\n\n    private static let scheme = \"quran-ios\"\n    private static let host = \"translationURL\"\n    private static let data = \"data\"\n\n    var url: URL {\n        let encoder = JSONEncoder()\n        let jsonData = try! encoder.encode(self)\n        let jsonString = String(data: jsonData, encoding: .utf8)?\n            .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)\n\n        var components = URLComponents()\n        components.scheme = Self.scheme\n        components.host = Self.host\n        components.queryItems = [URLQueryItem(name: Self.data, value: jsonString)]\n        return components.url!\n    }\n\n    init?(url: URL) {\n        guard let components = URLComponents(url: url, resolvingAgainstBaseURL: true),\n              components.scheme == Self.scheme,\n              components.host == Self.host,\n              let queryItems = components.queryItems,\n              let dataItem = queryItems.first(where: { $0.name == Self.data }),\n              let dataString = dataItem.value,\n              let jsonData = dataString.removingPercentEncoding?.data(using: .utf8)\n        else {\n            return nil\n        }\n\n        let decoder = JSONDecoder()\n        self = try! decoder.decode(TranslationURL.self, from: jsonData)\n    }\n}\n\nextension View {\n    func openTranslationURL(_ openURL: @escaping (TranslationURL) -> Void) -> some View {\n        tryOpenURL { url in\n            if let translationURL = TranslationURL(url: url) {\n                openURL(translationURL)\n                return .handled\n            } else {\n                return .systemAction\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Features/QuranViewFeature/QuranBuilder.swift",
    "content": "//\n//  QuranBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 3/31/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AnnotationsService\nimport AppDependencies\nimport AudioBannerFeature\nimport AyahMenuFeature\nimport MoreMenuFeature\nimport NoteEditorFeature\nimport QuranContentFeature\nimport QuranKit\nimport ReadingService\nimport TranslationsFeature\nimport TranslationVerseFeature\nimport UIKit\nimport WordPointerFeature\n\n@MainActor\npublic struct QuranBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func build(input: QuranInput) -> UIViewController {\n        let highlightsService = QuranHighlightsService()\n\n        let quran = ReadingPreferences.shared.reading.quran\n        let pageBookmarkService = PageBookmarkService(persistence: container.pageBookmarkPersistence)\n        let interactorDeps = QuranInteractor.Deps(\n            quran: quran,\n            analytics: container.analytics,\n            pageBookmarkService: pageBookmarkService,\n            noteService: container.noteService(),\n            ayahMenuBuilder: AyahMenuBuilder(container: container),\n            moreMenuBuilder: MoreMenuBuilder(),\n            audioBannerBuilder: AudioBannerBuilder(container: container),\n            wordPointerBuilder: WordPointerBuilder(container: container),\n            noteEditorBuilder: NoteEditorBuilder(container: container),\n            contentBuilder: ContentBuilder(container: container, highlightsService: highlightsService),\n            translationsSelectionBuilder: TranslationsListBuilder(container: container),\n            translationVerseBuilder: TranslationVerseBuilder(container: container),\n            resources: container.readingResources\n        )\n        let interactor = QuranInteractor(deps: interactorDeps, input: input)\n        let viewController = QuranViewController(interactor: interactor)\n        return viewController\n    }\n\n    // MARK: Internal\n\n    let container: AppDependencies\n}\n"
  },
  {
    "path": "Features/QuranViewFeature/QuranInteractor.swift",
    "content": "//\n//  QuranInteractor.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 3/31/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport Analytics\nimport AnnotationsService\nimport AudioBannerFeature\nimport AyahMenuFeature\nimport Combine\nimport Crashing\nimport FeaturesSupport\nimport MoreMenuFeature\nimport NoorUI\nimport NoteEditorFeature\nimport QuranAnnotations\nimport QuranContentFeature\nimport QuranKit\nimport QuranText\nimport QuranTextKit\nimport ReadingService\nimport TranslationService\nimport TranslationsFeature\nimport TranslationVerseFeature\nimport UIKit\nimport UIx\nimport VLogging\nimport WordPointerFeature\n\n@MainActor\nprotocol QuranPresentable: UIViewController {\n    var pagesView: UIView { get }\n\n    func startHiddenBarsTimer()\n    func hideBars()\n\n    func setVisiblePages(_ pages: [Page])\n    func updateBookmark(_ isBookmarked: Bool)\n\n    func shareText(_ lines: [String], in sourceView: UIView, at point: CGPoint, completion: @escaping () -> Void)\n\n    func presentMoreMenu(_ viewController: UIViewController)\n    func presentAyahMenu(_ viewController: UIViewController, in sourceView: UIView, at point: CGPoint)\n    func presentTranslatedVerse(_ viewController: UIViewController, didDismiss: @escaping () -> Void)\n    func presentAudioBanner(_ audioBanner: UIViewController)\n    func presentWordPointer(_ viewController: UIViewController)\n    func presentQuranContent(_ viewController: UIViewController)\n    func presentTranslationsSelection(_ viewController: UIViewController)\n\n    func dismissWordPointer(_ viewController: UIViewController)\n    func dismissPresentedViewController(completion: (() -> Void)?)\n}\n\n@MainActor\nfinal class QuranInteractor: WordPointerListener, ContentListener, NoteEditorListener,\n    MoreMenuListener, AudioBannerListener, AyahMenuListener\n{\n    struct Deps {\n        let quran: Quran\n        let analytics: AnalyticsLibrary\n        let pageBookmarkService: PageBookmarkService\n        let noteService: NoteService\n        let ayahMenuBuilder: AyahMenuBuilder\n        let moreMenuBuilder: MoreMenuBuilder\n        let audioBannerBuilder: AudioBannerBuilder\n        let wordPointerBuilder: WordPointerBuilder\n        let noteEditorBuilder: NoteEditorBuilder\n        let contentBuilder: ContentBuilder\n        let translationsSelectionBuilder: TranslationsListBuilder\n        let translationVerseBuilder: TranslationVerseBuilder\n        let resources: ReadingResourcesService\n    }\n\n    // MARK: Lifecycle\n\n    init(deps: Deps, input: QuranInput) {\n        self.deps = deps\n        self.input = input\n        logger.info(\"Quran: opening quran \\(input)\")\n    }\n\n    // MARK: Internal\n\n    @Published var contentStatus: ContentStatusView.State?\n\n    weak var presenter: QuranPresentable?\n\n    // MARK: - Preferences\n\n    var quranMode: QuranMode {\n        contentStatePreferences.quranMode\n    }\n\n    // MARK: - Audio Banner\n\n    var visiblePages: [Page] { contentViewModel?.visiblePages ?? [] }\n\n    func start() {\n        deps.noteService.notes(quran: deps.quran)\n            .receive(on: DispatchQueue.main)\n            .sink { [weak self] in self?.notes = $0 }\n            .store(in: &cancellables)\n\n        deps.pageBookmarkService.pageBookmarks(quran: deps.quran)\n            .receive(on: DispatchQueue.main)\n            .sink { [weak self] in self?.pageBookmarks = $0 }\n            .store(in: &cancellables)\n\n        contentStatePreferences.$quranMode\n            .sink { [weak self] _ in self?.onQuranModeUpdated() }\n            .store(in: &cancellables)\n\n        deps.resources.publisher\n            .receive(on: DispatchQueue.main)\n            .sink { [weak self] status in\n                switch status {\n                case .downloading(let progress):\n                    self?.contentStatus = .downloading(progress: progress)\n                case .error(let error):\n                    self?.contentStatus = .error(error, retry: { [weak self] in\n                        guard let self else { return }\n                        contentStatus = .downloading(progress: 0)\n                        Task {\n                            await self.deps.resources.retry()\n                        }\n                    })\n                case .ready:\n                    self?.contentStatus = nil\n                    self?.loadContent()\n                }\n            }\n            .store(in: &cancellables)\n    }\n\n    // MARK: - Popover\n\n    func didDismissPopover() {\n        logger.info(\"Quran: dismiss popover\")\n        contentViewModel?.removeAyahMenuHighlight()\n    }\n\n    // MARK: - More Menu\n\n    func onMoreBarButtonTapped() {\n        logger.info(\"Quran: more bar button tapped\")\n        var state = MoreMenuControlsState()\n        state.wordPointer = readingPreferences.reading.supportsWordPositions ? .conditional : .alwaysOff\n        // TODO: Enable vertical scrolling.\n        state.verticalScrolling = .alwaysOff\n        let model = MoreMenuModel(isWordPointerActive: isWordPointerActive, state: state)\n        let viewController = deps.moreMenuBuilder.build(withListener: self, model: model)\n        presenter?.presentMoreMenu(viewController)\n    }\n\n    func onQuranModeUpdated() {\n        let noTranslationsSelected = selectedTranslationsPreferences.selectedTranslationIds.isEmpty\n        if quranMode == .translation, noTranslationsSelected {\n            presentTranslationsSelection()\n        }\n    }\n\n    func onTranslationsSelectionsTapped() {\n        presentTranslationsSelection()\n    }\n\n    func highlightReadingAyah(_ ayah: AyahNumber?) {\n        logger.info(\"Quran: highlight reading verse \\(String(describing: ayah))\")\n        contentViewModel?.highlightReadingAyah(ayah)\n    }\n\n    // MARK: - Ayah Menu\n\n    func playAudio(_ from: AyahNumber, to: AyahNumber?, repeatVerses: Bool) {\n        Task { @MainActor in // TODO: remove\n            audioBanner?.play(from: from, to: to, repeatVerses: repeatVerses)\n        }\n    }\n\n    func deleteNotes(_ notes: [Note], verses: [AyahNumber]) async {\n        let containsText = notes.contains { note in\n            !(note.note ?? \"\").isEmpty\n        }\n        if containsText {\n            // confirm deletion first if there is text\n            presenter?.confirmNoteDelete(\n                delete: { await self.forceDeleteNotes(notes, verses: verses) },\n                cancel: { self.contentViewModel?.removeAyahMenuHighlight() }\n            )\n        } else {\n            // delete highlight\n            await forceDeleteNotes(notes, verses: verses)\n        }\n    }\n\n    func shareText(_ lines: [String], in sourceView: UIView, at point: CGPoint) {\n        logger.info(\"Quran: share text\")\n        dismissAyahMenu()\n        presenter?.shareText(lines, in: sourceView, at: point, completion: {})\n    }\n\n    func editNote(_ note: Note) {\n        dismissAyahMenu()\n        presenter?.rotateToPortraitIfPhone()\n        let viewController = deps.noteEditorBuilder.build(withListener: self, note: note)\n        presenter?.present(viewController, animated: true)\n    }\n\n    func dismissNoteEditor() {\n        logger.info(\"Quran: dismiss note editor\")\n        presenter?.dismiss(animated: true)\n    }\n\n    func showTranslation(_ verses: [AyahNumber]) {\n        guard let verse = verses.first else {\n            return\n        }\n\n        let viewController = deps.translationVerseBuilder.build(\n            startingVerse: verse,\n            actions: .init(updateCurrentVerseTo: { [weak self] verse in\n                self?.contentViewModel?.highlightTranslationVerse(verse)\n            })\n        )\n        presenter?.dismissPresentedViewController {\n            self.presenter?.presentTranslatedVerse(viewController) { [weak self] in\n                self?.contentViewModel?.removeAyahMenuHighlight()\n            }\n        }\n    }\n\n    func presentAyahMenu(in sourceView: UIView, at point: CGPoint, verses: [AyahNumber]) {\n        logger.info(\"Quran: present ayah menu, verses: \\(verses)\")\n        let notes = notesInteractingVerses(verses)\n        let input = AyahMenuInput(\n            sourceView: sourceView,\n            pointInView: point,\n            verses: verses,\n            notes: notes\n        )\n        let ayahMenuViewController = deps.ayahMenuBuilder.build(withListener: self, input: input)\n        presenter?.presentAyahMenu(ayahMenuViewController, in: sourceView, at: point)\n    }\n\n    func dismissAyahMenu() {\n        logger.info(\"Quran: dismiss ayah menu\")\n        presenter?.dismissPresentedViewController(completion: nil)\n        contentViewModel?.removeAyahMenuHighlight()\n    }\n\n    // MARK: - Word Pointer\n\n    func onWordPointerPanBegan() {\n        presenter?.hideBars()\n    }\n\n    func word(at point: CGPoint) -> Word? {\n        contentViewController?.word(at: point)\n    }\n\n    func highlightWord(_ word: Word?) {\n        contentViewModel?.highlightWord(word)\n    }\n\n    func onIsWordPointerActiveUpdated(to isWordPointerActive: Bool) {\n        self.isWordPointerActive = isWordPointerActive\n        if isWordPointerActive {\n            if let presenter {\n                showWordPointer(referenceView: presenter.pagesView)\n            }\n        } else {\n            hideWordPointer()\n        }\n    }\n\n    func userWillBeginDragScroll() {\n        logger.info(\"Quran: userWillBeginDragScroll\")\n        presenter?.hideBars()\n    }\n\n    func toogleBookmark() async {\n        logger.info(\"Quran: onBookmarkBarButtonTapped\")\n        let pages = visiblePages\n        let wasBookmarked = bookmarked(pages)\n\n        do {\n            let analytics = deps.analytics\n            let service = deps.pageBookmarkService\n            try await withThrowingTaskGroup(of: Void.self) { group in\n                for page in pages {\n                    group.addTask {\n                        if !wasBookmarked {\n                            analytics.bookmarkPage(page)\n                            try await service.insertPageBookmark(page)\n                        } else {\n                            analytics.removeBookmarkPage(page)\n                            try await service.removePageBookmark(page)\n                        }\n                    }\n                    try await group.waitForAll()\n                }\n            }\n        } catch {\n            crasher.recordError(error, reason: \"Failed to toggle page bookmark\")\n        }\n    }\n\n    // MARK: Private\n\n    private let readingPreferences = ReadingPreferences.shared\n    private let contentStatePreferences = QuranContentStatePreferences.shared\n    private let selectedTranslationsPreferences = SelectedTranslationsPreferences.shared\n\n    private var notes: [Note] = []\n\n    private var deps: Deps\n    private let input: QuranInput\n    private var audioBanner: AudioBannerViewModel?\n    private var cancellables: Set<AnyCancellable> = []\n    private var isWordPointerActive: Bool = false\n    private var wordPointer: WordPointerViewController?\n\n    private var visiblePageCancellable: AnyCancellable?\n\n    private var contentViewController: ContentViewController?\n\n    private var contentViewModel: ContentViewModel? {\n        didSet {\n            visiblePageCancellable = contentViewModel?.$visiblePages\n                .sink { [weak self] in self?.setVisiblePages($0) }\n        }\n    }\n\n    private var pageBookmarks: [PageBookmark] = [] {\n        didSet {\n            reloadPageBookmark()\n        }\n    }\n\n    private func setVisiblePages(_ pages: [Page]) {\n        logger.info(\"Quran: set visible pages \\(pages)\")\n        presenter?.setVisiblePages(pages)\n        showPageBookmarkIfNeeded(for: pages)\n    }\n\n    private func loadContent() {\n        let (viewController, viewModel) = deps.audioBannerBuilder.build(withListener: self)\n        audioBanner = viewModel\n        presenter?.presentAudioBanner(viewController)\n\n        (contentViewController, contentViewModel) = presentQuranContent(with: input)\n        presenter?.startHiddenBarsTimer()\n    }\n\n    private func presentTranslationsSelection() {\n        presenter?.dismissPresentedViewController {\n            let controller = self.deps.translationsSelectionBuilder.build()\n            self.presenter?.presentTranslationsSelection(controller)\n        }\n    }\n\n    private func forceDeleteNotes(_ notes: [Note], verses: [AyahNumber]) async {\n        contentViewModel?.removeAyahMenuHighlight()\n        do {\n            try await deps.noteService.removeNotes(with: verses)\n        } catch {\n            crasher.recordError(error, reason: \"Failed to remove notes\")\n        }\n    }\n\n    private func notesInteractingVerses(_ verses: [AyahNumber]) -> [Note] {\n        let selectedVerses = Set(verses)\n        return notes.filter { !selectedVerses.isDisjoint(with: $0.verses) }\n    }\n\n    private func dismissWordPointer() {\n        logger.info(\"Quran: dismiss word pointer\")\n        guard let viewController = wordPointer else {\n            return\n        }\n        presenter?.dismissWordPointer(viewController)\n        wordPointer = nil\n    }\n\n    private func showWordPointer(referenceView: UIView) {\n        logger.info(\"Quran: show word pointer\")\n        presentWordPointerIfNeeded()\n        wordPointer?.showWordPointer(referenceView: referenceView)\n    }\n\n    private func hideWordPointer() {\n        logger.info(\"Quran: hide word pointer\")\n        wordPointer?.hideWordPointer { self.dismissWordPointer() }\n    }\n\n    private func presentWordPointerIfNeeded() {\n        guard wordPointer == nil else {\n            return\n        }\n        let viewController = deps.wordPointerBuilder.build(withListener: self)\n        wordPointer = viewController\n        presenter?.presentWordPointer(viewController)\n    }\n\n    // MARK: - Quran Content\n\n    private func presentQuranContent(with input: QuranInput) -> (ContentViewController, ContentViewModel) {\n        let (viewController, contentViewModel) = deps.contentBuilder.build(withListener: self, input: input)\n        presenter?.presentQuranContent(viewController)\n        return (viewController, contentViewModel)\n    }\n\n    // MARK: - Page Bookmark\n\n    private func reloadPageBookmark() {\n        logger.info(\"Quran: reloadPageBookmark\")\n        if !visiblePages.isEmpty {\n            showPageBookmarkIfNeeded(for: visiblePages)\n        }\n    }\n\n    private func bookmarked(_ pages: [Page]) -> Bool {\n        let visibleBookmarks = pageBookmarks.filter { pages.contains($0.page) }\n        return !visibleBookmarks.isEmpty\n    }\n\n    private func showPageBookmarkIfNeeded(for pages: [Page]) {\n        presenter?.updateBookmark(bookmarked(pages))\n    }\n}\n\nprivate extension Reading {\n    var supportsWordPositions: Bool {\n        switch self {\n        case .hafs_1405:\n            return true\n        case .hafs_1421:\n            return false\n        case .hafs_1440:\n            return false\n        case .hafs_1439:\n            return false\n        case .hafs_1441:\n            return false\n        case .tajweed:\n            // TODO: Enable word-by-word translation.\n            // Tajweed ayah info contains words dimensions, but they don't match the word-by-word database.\n            return false\n        }\n    }\n}\n\nprivate extension AnalyticsLibrary {\n    func bookmarkPage(_ page: Page) {\n        logEvent(\"BookmarkPage\", value: page.pageNumber.description)\n    }\n}\n"
  },
  {
    "path": "Features/QuranViewFeature/QuranView.swift",
    "content": "//\n//  QuranView.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/12/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\nimport UIKit\nimport ViewConstrainer\n\n@MainActor\nprotocol QuranViewDelegate: AnyObject {\n    func onQuranViewTapped(_ quranView: QuranView)\n}\n\nclass QuranView: UIView, UIGestureRecognizerDelegate, UINavigationBarDelegate {\n    // MARK: Lifecycle\n\n    @available(*, unavailable)\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"Not implemented\")\n    }\n\n    init() {\n        super.init(frame: .zero)\n        setUp()\n    }\n\n    // MARK: Internal\n\n    weak var delegate: QuranViewDelegate?\n\n    var contentView: UIView?\n\n    let navigationBar = UINavigationBar()\n    let navigationItem = UINavigationItem()\n\n    override func layoutSubviews() {\n        navigationItem.titleView?.setNeedsLayout()\n        super.layoutSubviews()\n    }\n\n    func position(for bar: UIBarPositioning) -> UIBarPosition {\n        .topAttached\n    }\n\n    func addWordPointerView(_ wordPointerView: UIView) {\n        addAutoLayoutSubview(wordPointerView)\n        wordPointerView.vc.edges()\n    }\n\n    func addContentView(_ contentView: UIView) {\n        self.contentView = contentView\n        addAutoLayoutSubview(contentView)\n        contentView.vc\n            .verticalEdges()\n            .horizontalEdges()\n        sendSubviewToBack(contentView)\n    }\n\n    func addAudioBannerView(_ audioBannerView: UIView) {\n        audioView = audioBannerView\n        addAutoLayoutSubview(audioBannerView)\n        audioBannerView.vc\n            .horizontalEdges()\n            .bottom()\n    }\n\n    func setBarsHidden(_ hidden: Bool) {\n        audioView?.alpha = hidden ? 0 : 1\n        audioView?.isUserInteractionEnabled = !hidden\n    }\n\n    @objc\n    func onViewTapped(_ sender: UITapGestureRecognizer) {\n        if let audioView, audioView.bounds.contains(sender.location(in: audioView)), audioView.isUserInteractionEnabled {\n            return\n        }\n        delegate?.onQuranViewTapped(self)\n    }\n\n    override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {\n        gestureRecognizer != tapGesture || !isFirstResponder // dismiss bars only if not first responder\n    }\n\n    // MARK: Private\n\n    private let tapGesture = UITapGestureRecognizer()\n    private var audioView: UIView?\n\n    private func setUp() {\n        clipsToBounds = true\n        tapGesture.addTarget(self, action: #selector(onViewTapped(_:)))\n        tapGesture.delegate = self\n        addGestureRecognizer(tapGesture)\n\n        // navigation bar\n        addAutoLayoutSubview(navigationBar)\n        navigationBar.vc.horizontalEdges()\n        safeAreaLayoutGuide.topAnchor.constraint(equalTo: navigationBar.topAnchor).isActive = true\n        navigationBar.pushItem(navigationItem, animated: false)\n        navigationBar.delegate = self\n    }\n}\n"
  },
  {
    "path": "Features/QuranViewFeature/QuranViewController.swift",
    "content": "//\n//  QuranViewController.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/28/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Combine\nimport Localization\nimport NoorUI\nimport QuranKit\nimport QuranTextKit\nimport SwiftUI\nimport Timing\nimport UIKit\nimport UIx\nimport VLogging\n\nclass QuranViewController: BaseViewController, QuranViewDelegate,\n    QuranPresentable, PopoverPresenterDelegate, ForcedNavigationBarVisibilityController\n{\n    // MARK: Lifecycle\n\n    init(interactor: QuranInteractor) {\n        self.interactor = interactor\n        super.init(nibName: nil, bundle: nil)\n        interactor.presenter = self\n        interactor.start()\n        hidesBottomBarWhenPushed = true\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Internal\n\n    let interactor: QuranInteractor\n\n    var pagesView: UIView { quranView!.contentView! }\n\n    // MARK: - View hierarchy\n\n    var navigationBarHidden: Bool { true }\n\n    override var prefersHomeIndicatorAutoHidden: Bool {\n        prefersStatusBarHidden\n    }\n\n    override var prefersStatusBarHidden: Bool {\n        // hide if it is compact size or status bar is shown\n        statusBarHidden || traitCollection.containsTraits(in: UITraitCollection(verticalSizeClass: .compact))\n    }\n\n    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {\n        .fade\n    }\n\n    override func loadView() {\n        view = QuranView()\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        // Set initial background color while the pages are being loaded, no need to listen for updates.\n        view.backgroundColor = ThemeService.shared.themeStyle.backgroundColor\n        quranView?.navigationItem.largeTitleDisplayMode = .never\n        quranView?.delegate = self\n\n        // set the custom title view\n        quranView?.navigationItem.titleView = TwoLineNavigationTitleView(\n            firstLineFont: .boldSystemFont(ofSize: 15),\n            secondLineFont: .systemFont(ofSize: 15, weight: .light)\n        )\n\n        let backImage: UIImage?\n        backImage = UIImage(systemName: \"chevron.backward\")\n\n        quranView?.navigationItem.leftBarButtonItem = UIBarButtonItem(\n            image: backImage,\n            style: .plain,\n            target: self,\n            action: #selector(backTapped)\n        )\n\n        setupContentStatus()\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        UIApplication.shared.isIdleTimerDisabled = true\n        navigationController?.setNavigationBarHidden(true, animated: animated)\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n        navigationController?.setNavigationBarHidden(false, animated: animated)\n    }\n\n    override func viewDidDisappear(_ animated: Bool) {\n        super.viewDidDisappear(animated)\n        UIApplication.shared.isIdleTimerDisabled = false\n    }\n\n    // MARK: - Content Status\n\n    func setupContentStatus() {\n        interactor.$contentStatus\n            .receive(on: DispatchQueue.main)\n            .sink { [weak self] in self?.updateContentStatus($0) }\n            .store(in: &cancellables)\n    }\n\n    func hideBars() {\n        setBarsHidden(true)\n    }\n\n    func startHiddenBarsTimer() {\n        // increate the timer duration to give existing users the time to see the new buttons\n        barsTimer = Timer(interval: 5) { [weak self] in\n            if self?.presentedViewController == nil {\n                self?.setBarsHidden(true)\n            }\n        }\n    }\n\n    // MARK: - Quran View Delegate\n\n    func onQuranViewTapped(_ quranView: QuranView) {\n        if interactor.contentStatus == nil && quranView.contentView != nil {\n            setBarsHidden(!statusBarHidden)\n        }\n    }\n\n    // MARK: - View Controllable\n\n    func shareText(_ lines: [String], in sourceView: UIView, at point: CGPoint, completion: @escaping () -> Void) {\n        let activityViewController = UIActivityViewController(activityItems: lines, applicationActivities: nil)\n        activityViewController.completionWithItemsHandler = { _, _, _, _ in\n            completion()\n        }\n        if let sharePresentationController = activityViewController.popoverPresentationController {\n            sharePresentationController.sourceView = sourceView\n            sharePresentationController.sourceRect = CGRect(x: point.x, y: point.y, width: 1, height: 1)\n        }\n        present(activityViewController, animated: true, completion: nil)\n    }\n\n    func presentWordPointer(_ viewController: UIViewController) {\n        addChild(viewController)\n        quranView?.addWordPointerView(viewController.view)\n        viewController.didMove(toParent: self)\n    }\n\n    func dismissWordPointer(_ viewController: UIViewController) {\n        removeChild(viewController)\n    }\n\n    func presentMoreMenu(_ viewController: UIViewController) {\n        presentPopover(viewController, pointingTo: quranView!.navigationItem.rightBarButtonItems!.first!)\n    }\n\n    func presentTranslationsSelection(_ viewController: UIViewController) {\n        let translationsNavigationController = TranslationsSelectionNavigationController(rootViewController: viewController)\n        viewController.navigationItem.leftBarButtonItem = UIBarButtonItem(\n            image: UIImage(systemName: \"x.circle\"),\n            style: .done,\n            target: self,\n            action: #selector(onTranslationsSelectionDoneTapped)\n        )\n        present(translationsNavigationController, animated: true, completion: nil)\n    }\n\n    func presentAudioBanner(_ audioBanner: UIViewController) {\n        addChild(audioBanner)\n        quranView?.addAudioBannerView(audioBanner.view)\n        audioBanner.didMove(toParent: self)\n        setAudioBarHidden(false)\n    }\n\n    func presentAyahMenu(_ viewController: UIViewController, in sourceView: UIView, at point: CGPoint) {\n        popoverPresenter.present(\n            presenting: self,\n            presented: viewController,\n            pointingTo: sourceView,\n            at: CGRect(x: point.x, y: point.y, width: 1, height: 1),\n            permittedArrowDirections: []\n        )\n    }\n\n    func presentQuranContent(_ viewController: UIViewController) {\n        addContent(viewController)\n    }\n\n    func presentTranslatedVerse(_ viewController: UIViewController, didDismiss: @escaping () -> Void) {\n        if let sheet = viewController.sheetPresentationController {\n            sheet.detents = [.medium(), .large()]\n            sheet.prefersGrabberVisible = true\n        }\n        if let navigationController = viewController as? UINavigationController {\n            navigationController.visibleViewController?.navigationItem.rightBarButtonItem = UIBarButtonItem(\n                barButtonSystemItem: .done,\n                target: self,\n                action: #selector(dismissTranslatedVerse)\n            )\n        }\n        presentationsMonitor.monitor(viewController, actions: .init(didDismiss: { _ in\n            didDismiss()\n        }))\n        present(viewController, animated: true)\n    }\n\n    override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {\n        if let presentedViewController {\n            presentationsMonitor.dismiss(presentedViewController)\n        }\n        super.dismiss(animated: flag, completion: completion)\n    }\n\n    func dismissPresentedViewController(completion: (() -> Void)?) {\n        dismiss(animated: true, completion: completion)\n    }\n\n    func didDismissPopover() {\n        interactor.didDismissPopover()\n    }\n\n    func setVisiblePages(_ pages: [Page]) {\n        title = pages.map { $0.startSura.localizedName(withPrefix: true) }.joined(separator: \" | \")\n        updateTitle(pages)\n    }\n\n    func updateBookmark(_ isBookmarked: Bool) {\n        updateRightBarItems(animated: false, isBookmarked: isBookmarked)\n    }\n\n    // MARK: Private\n\n    private class TranslationsSelectionNavigationController: BaseNavigationController {}\n\n    private var contentStatusView: UIHostingController<ContentStatusView>?\n\n    private var cancellables: Set<AnyCancellable> = []\n    private lazy var popoverPresenter = PhonePopoverPresenter(delegate: self)\n    private let presentationsMonitor = PresentationsMonitor()\n\n    // MARK: - Navigation bars\n\n    private var barsTimer: Timing.Timer?\n\n    // MARK: - Navigation Bar\n\n    private lazy var moreNavigationButton: UIBarButtonItem = {\n        let moreImage = UIImage.symbol(\"ellipsis.circle\")\n        return UIBarButtonItem(image: moreImage, style: .plain, target: self, action: #selector(onMoreBarButtonTapped(_:)))\n    }()\n\n    private var titleView: TwoLineNavigationTitleView? { quranView?.navigationItem.titleView as? TwoLineNavigationTitleView }\n    private var quranView: QuranView? {\n        view as? QuranView\n    }\n\n    private var statusBarHidden = false {\n        didSet {\n            setNeedsStatusBarAppearanceUpdate()\n            setNeedsUpdateOfHomeIndicatorAutoHidden()\n        }\n    }\n\n    private func stopBarHiddenTimer() {\n        barsTimer?.cancel()\n        barsTimer = nil\n    }\n\n    @objc\n    private func backTapped() {\n        navigationController?.popViewController(animated: true)\n    }\n\n    private func updateContentStatus(_ newStatus: ContentStatusView.State?) {\n        if let newStatus {\n            if let contentStatusView {\n                contentStatusView.rootView = ContentStatusView(state: newStatus)\n            } else {\n                let contentStatusView = UIHostingController(rootView: ContentStatusView(state: newStatus))\n                self.contentStatusView = contentStatusView\n                addContent(contentStatusView)\n            }\n        } else {\n            if let contentStatusView {\n                removeChild(contentStatusView)\n            }\n        }\n    }\n\n    private func setBarsHidden(_ hidden: Bool) {\n        // remove the timer\n        stopBarHiddenTimer()\n\n        // make it visible\n        if quranView?.navigationBar.isHidden ?? true, !hidden {\n            quranView?.navigationBar.isHidden = false\n        }\n\n        // animate the change\n        UIView.animate(withDuration: 0.3, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 0, animations: {\n            self.statusBarHidden = hidden\n            self.setAudioBarHidden(hidden)\n            self.quranView?.navigationBar.alpha = hidden ? 0 : 1\n        }, completion: { _ in\n            self.quranView?.navigationBar.isHidden = hidden\n        })\n    }\n\n    private func setAudioBarHidden(_ hidden: Bool) {\n        quranView?.setBarsHidden(hidden)\n    }\n\n    private func addContent(_ viewController: UIViewController) {\n        addChild(viewController)\n        quranView?.addContentView(viewController.view)\n        viewController.didMove(toParent: self)\n    }\n\n    @objc\n    private func dismissTranslatedVerse() {\n        dismiss(animated: true)\n    }\n\n    @objc\n    private func onTranslationsSelectionDoneTapped() {\n        logger.info(\"Quran: translations selection dismissed\")\n        dismiss(animated: true)\n    }\n\n    private func updateTitle(_ pages: [Page]) {\n        if pages.isEmpty {\n            titleView?.firstLine = \"\"\n            titleView?.secondLine = \"\"\n            return\n        }\n        let suras = pages.map(\\.startSura)\n        let juzs = pages.map(\\.startJuz)\n        let pageNumbers = pages.map(\\.pageNumber).map(NumberFormatter.shared.format).joined(separator: \" - \")\n        let pageDescription = lFormat(\n            \"page_description\",\n            table: .android,\n            pageNumbers,\n            NumberFormatter.shared.format(juzs.min()!.juzNumber)\n        )\n        titleView?.firstLine = suras.min()!.localizedName(withPrefix: true)\n        titleView?.secondLine = pageDescription\n    }\n\n    private func updateRightBarItems(animated: Bool, isBookmarked: Bool) {\n        let bookmarkImage = UIImage.symbol(isBookmarked ? \"bookmark.fill\" : \"bookmark\")\n        let bookmark = UIBarButtonItem(image: bookmarkImage, style: .plain, target: self, action: #selector(onBookmarkButtonTapped))\n        if isBookmarked {\n            bookmark.tintColor = .systemRed\n        }\n\n        quranView?.navigationItem.setRightBarButtonItems([moreNavigationButton, bookmark], animated: animated)\n    }\n\n    @objc\n    private func onBookmarkButtonTapped() {\n        Task {\n            await interactor.toogleBookmark()\n        }\n    }\n\n    @objc\n    private func onMoreBarButtonTapped(_ barButton: UIBarButtonItem) {\n        interactor.onMoreBarButtonTapped()\n    }\n}\n"
  },
  {
    "path": "Features/ReadingSelectorFeature/ReadingSelectorBuilder.swift",
    "content": "//\n//  ReadingSelectorBuilder.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2023-02-14.\n//  Copyright © 2023 Quran.com. All rights reserved.\n//\n\nimport AppDependencies\nimport ReadingService\nimport UIKit\n\n@MainActor\npublic struct ReadingSelectorBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func build() -> UIViewController {\n        let viewModel = ReadingSelectorViewModel(resources: container.readingResources)\n        return ReadingSelectorViewController(viewModel: viewModel)\n    }\n\n    // MARK: Private\n\n    private let container: AppDependencies\n}\n"
  },
  {
    "path": "Features/ReadingSelectorFeature/ReadingSelectorViewController.swift",
    "content": "//\n//  ReadingSelectorViewController.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2023-02-13.\n//  Copyright © 2023 Quran.com. All rights reserved.\n//\n\nimport Localization\nimport SwiftUI\n\nfinal class ReadingSelectorViewController: UIHostingController<ReadingSelector> {\n    init(viewModel: ReadingSelectorViewModel) {\n        super.init(rootView: ReadingSelector(viewModel: viewModel))\n\n        navigationItem.title = l(\"reading.selector.title\")\n        navigationItem.prompt = l(\"reading.selector.selection-description\")\n    }\n\n    @available(*, unavailable)\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n}\n"
  },
  {
    "path": "Features/ReadingSelectorFeature/ReadingSelectorViewModel.swift",
    "content": "//\n//  ReadingSelectorViewModel.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2023-02-14.\n//  Copyright © 2023 Quran.com. All rights reserved.\n//\n\nimport Foundation\nimport QuranKit\nimport ReadingService\n\n@MainActor\nclass ReadingSelectorViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    init(resources: ReadingResourcesService) {\n        self.resources = resources\n    }\n\n    // MARK: Internal\n\n    @Published var selectedReading: Reading?\n    @Published var progress: Double?\n    @Published var error: Error?\n\n    var readings: [ReadingInfo<Reading>] {\n        Reading.allReadings.map { ReadingInfo($0) }\n    }\n\n    func start() async {\n        async let reading: () = listenToReadingChanges()\n        async let resources: () = listenToResourcesEvents()\n        _ = await (reading, resources)\n    }\n\n    func showReading(_ reading: Reading) {\n        preferences.reading = reading\n    }\n\n    // MARK: Private\n\n    private let preferences = ReadingPreferences.shared\n    private let resources: ReadingResourcesService\n\n    private func listenToReadingChanges() async {\n        let readingsSequence = preferences.$reading\n            .prepend(preferences.reading)\n            .values()\n        for await reading in readingsSequence {\n            selectedReading = reading\n        }\n    }\n\n    private func listenToResourcesEvents() async {\n        let resourceStatuses = resources.publisher.values()\n        for await status in resourceStatuses {\n            switch status {\n            case .downloading(let progress):\n                self.progress = progress\n                error = nil\n            case .error(let error):\n                progress = nil\n                self.error = error\n            case .ready:\n                progress = nil\n                error = nil\n            }\n        }\n    }\n}\n\nprivate extension ReadingInfo where Value == Reading {\n    init(_ reading: Reading) {\n        self.init(\n            value: reading,\n            title: reading.title,\n            description: reading.description,\n            properties: reading.properties\n        )\n    }\n}\n"
  },
  {
    "path": "Features/ReadingSelectorFeature/View/Reading+Resources.swift",
    "content": "//\n//  Reading+Resources.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2023-02-19.\n//  Copyright © 2023 Quran.com. All rights reserved.\n//\n\nimport Localization\nimport QuranGeometry\nimport QuranKit\n\nextension Reading {\n    struct Property: Hashable {\n        enum PropertType {\n            case supports\n            case lacks\n        }\n\n        // MARK: Internal\n\n        let type: PropertType\n        let property: String\n    }\n\n    var title: String {\n        switch self {\n        case .hafs_1405:\n            return l(\"reading.hafs-1405.title\")\n        case .hafs_1421:\n            return l(\"reading.hafs-1421.title\")\n        case .hafs_1440:\n            return l(\"reading.hafs-1440.title\")\n        case .hafs_1439:\n            return l(\"reading.hafs-1439.title\")\n        case .hafs_1441:\n            return l(\"reading.hafs-1441.title\")\n        case .tajweed:\n            return l(\"reading.tajweed.title\")\n        }\n    }\n\n    var description: String {\n        switch self {\n        case .hafs_1405:\n            return l(\"reading.hafs-1405.description\")\n        case .hafs_1421:\n            return l(\"reading.hafs-1421.description\")\n        case .hafs_1440:\n            return l(\"reading.hafs-1440.description\")\n        case .hafs_1439:\n            return l(\"reading.hafs-1439.description\")\n        case .hafs_1441:\n            return l(\"reading.hafs-1441.description\")\n        case .tajweed:\n            return l(\"reading.tajweed.description\")\n        }\n    }\n\n    var properties: [Property] {\n        switch self {\n        case .hafs_1405:\n            return [\n                Property(type: .supports, property: l(\"reading.selector.property.hafs\")),\n                Property(type: .supports, property: l(\"reading.hafs-1405.issue\")),\n                Property(type: .supports, property: l(\"reading.selector.property.pages.604\")),\n                Property(type: .supports, property: l(\"reading.selector.property.lines.15\")),\n                Property(type: .supports, property: l(\"reading.selector.property.word-translation.supported\")),\n            ]\n        case .hafs_1421:\n            return [\n                Property(type: .supports, property: l(\"reading.selector.property.hafs\")),\n                Property(type: .supports, property: l(\"reading.hafs-1421.issue\")),\n                Property(type: .supports, property: l(\"reading.selector.property.pages.604\")),\n                Property(type: .supports, property: l(\"reading.selector.property.lines.15\")),\n                Property(type: .lacks, property: l(\"reading.selector.property.word-translation.not-supported\")),\n            ]\n        case .hafs_1440:\n            return [\n                Property(type: .supports, property: l(\"reading.selector.property.hafs\")),\n                Property(type: .supports, property: l(\"reading.hafs-1440.issue\")),\n                Property(type: .supports, property: l(\"reading.selector.property.pages.604\")),\n                Property(type: .supports, property: l(\"reading.selector.property.lines.15\")),\n                Property(type: .lacks, property: l(\"reading.selector.property.word-translation.not-supported\")),\n            ]\n        case .hafs_1439:\n            return [\n                Property(type: .supports, property: l(\"reading.selector.property.hafs\")),\n                Property(type: .supports, property: l(\"reading.hafs-1439.issue\")),\n                Property(type: .supports, property: l(\"reading.selector.property.pages.604\")),\n                Property(type: .supports, property: l(\"reading.selector.property.lines.15\")),\n                Property(type: .lacks, property: l(\"reading.selector.property.word-translation.not-supported\")),\n            ]\n        case .hafs_1441:\n            return [\n                Property(type: .supports, property: l(\"reading.selector.property.hafs\")),\n                Property(type: .supports, property: l(\"reading.hafs-1441.issue\")),\n                Property(type: .supports, property: l(\"reading.selector.property.pages.604\")),\n                Property(type: .supports, property: l(\"reading.selector.property.lines.15\")),\n                Property(type: .lacks, property: l(\"reading.selector.property.word-translation.not-supported\")),\n            ]\n        case .tajweed:\n            return [\n                Property(type: .supports, property: l(\"reading.selector.property.hafs\")),\n                Property(type: .supports, property: l(\"reading.selector.property.pages.604\")),\n                Property(type: .supports, property: l(\"reading.selector.property.lines.15\")),\n                Property(type: .lacks, property: l(\"reading.selector.property.word-translation.not-supported\")),\n            ]\n        }\n    }\n\n    var imageName: String {\n        switch self {\n        case .hafs_1405:\n            return \"hafs_1405\"\n        case .hafs_1421:\n            return \"hafs_1421\"\n        case .hafs_1440:\n            return \"hafs_1440\"\n        case .hafs_1439:\n            return \"hafs_1439\"\n        case .hafs_1441:\n            return \"hafs_1441\"\n        case .tajweed:\n            return \"tajweed\"\n        }\n    }\n\n    var suraHeaders: [SuraHeaderLocation] {\n        guard self == .hafs_1421 else {\n            return []\n        }\n\n        return [\n            SuraHeaderLocation(sura: Sura(quran: quran, suraNumber: 112)!, x: 14, y: 93, width: 1092, height: 116),\n            SuraHeaderLocation(sura: Sura(quran: quran, suraNumber: 113)!, x: 14, y: 557, width: 1092, height: 116),\n            SuraHeaderLocation(sura: Sura(quran: quran, suraNumber: 114)!, x: 14, y: 1148, width: 1092, height: 116),\n        ]\n    }\n\n    var ayahNumbers: [AyahNumberLocation] {\n        guard self == .hafs_1421 else {\n            return []\n        }\n\n        return [\n            AyahNumberLocation(ayah: AyahNumber(quran: quran, sura: 112, ayah: 1)!, x: 747, y: 322),\n            AyahNumberLocation(ayah: AyahNumber(quran: quran, sura: 112, ayah: 2)!, x: 425, y: 322),\n            AyahNumberLocation(ayah: AyahNumber(quran: quran, sura: 112, ayah: 3)!, x: 78, y: 317),\n            AyahNumberLocation(ayah: AyahNumber(quran: quran, sura: 112, ayah: 4)!, x: 289, y: 434),\n            AyahNumberLocation(ayah: AyahNumber(quran: quran, sura: 113, ayah: 1)!, x: 656, y: 793),\n            AyahNumberLocation(ayah: AyahNumber(quran: quran, sura: 113, ayah: 2)!, x: 276, y: 794),\n            AyahNumberLocation(ayah: AyahNumber(quran: quran, sura: 113, ayah: 3)!, x: 722, y: 910),\n            AyahNumberLocation(ayah: AyahNumber(quran: quran, sura: 113, ayah: 4)!, x: 70, y: 909),\n            AyahNumberLocation(ayah: AyahNumber(quran: quran, sura: 113, ayah: 5)!, x: 288, y: 1019),\n            AyahNumberLocation(ayah: AyahNumber(quran: quran, sura: 114, ayah: 1)!, x: 584, y: 1379),\n            AyahNumberLocation(ayah: AyahNumber(quran: quran, sura: 114, ayah: 2)!, x: 164, y: 1376),\n            AyahNumberLocation(ayah: AyahNumber(quran: quran, sura: 114, ayah: 3)!, x: 874, y: 1495),\n            AyahNumberLocation(ayah: AyahNumber(quran: quran, sura: 114, ayah: 4)!, x: 187, y: 1493),\n            AyahNumberLocation(ayah: AyahNumber(quran: quran, sura: 114, ayah: 5)!, x: 237, y: 1614),\n            AyahNumberLocation(ayah: AyahNumber(quran: quran, sura: 114, ayah: 6)!, x: 323, y: 1728),\n        ]\n    }\n}\n"
  },
  {
    "path": "Features/ReadingSelectorFeature/View/ReadingDetails.swift",
    "content": "//\n//  ReadingDetails.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-02-14.\n//\n\nimport Localization\nimport NoorUI\nimport SwiftUI\n\nstruct ReadingDetails<Value: Hashable, ImageView: View>: View {\n    // MARK: Internal\n\n    let reading: ReadingInfo<Value>\n    let imageView: ImageView\n    let useAction: () -> Void\n    let closeAction: () -> Void\n\n    @ScaledMetric var cornerRadius = Dimensions.cornerRadius\n\n    var body: some View {\n        NavigationView {\n            ScrollView {\n                VStack {\n                    setCurrentMushafButton\n                        .padding(.top)\n\n                    Text(reading.description)\n                        .padding(.top)\n\n                    propertiesList\n                        .padding(.top)\n                        .frame(maxWidth: .infinity, alignment: .leading)\n\n                    ReadingImage(imageView: imageView)\n                        .padding(.top)\n\n                    setCurrentMushafButton\n                        .padding(.top)\n                }\n                .padding(.horizontal)\n            }\n            .navigationTitle(reading.title)\n            .navigationBarTitleDisplayMode(.inline)\n            .navigationBarItems(\n                leading: setCurrentMushafBarButton,\n                trailing: closeButton\n            )\n        }\n    }\n\n    // MARK: Private\n\n    private var propertiesList: some View {\n        VStack {\n            ForEach(reading.properties, id: \\.self) { property in\n                HStack(alignment: .top) {\n                    switch property.type {\n                    case .supports:\n                        Image(systemName: \"checkmark.seal\")\n                            .foregroundColor(Color.appIdentity)\n                    case .lacks:\n                        Image(systemName: \"xmark.seal\")\n                            .foregroundColor(Color.red)\n                    }\n                    Text(property.property)\n                    Spacer()\n                }\n            }\n        }\n    }\n\n    private var setCurrentMushafBarButton: some View {\n        Button(action: useAction) {\n            Text(l(\"reading.selector.selectMushaf.short\"))\n        }\n    }\n\n    private var closeButton: some View {\n        Button(action: closeAction) {\n            Image(systemName: \"xmark.circle\")\n        }\n        .accentColor(.label)\n    }\n\n    private var setCurrentMushafButton: some View {\n        Button(action: useAction) {\n            HStack {\n                Spacer()\n                Text(l(\"reading.selector.selectMushaf.long\"))\n                    .foregroundColor(.white)\n                Spacer()\n            }\n            .padding()\n            .background(\n                RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)\n                    .fill(\n                        LinearGradient(\n                            gradient: Gradient(\n                                colors: [Color.appIdentity, Color.appIdentity.opacity(0.7)]),\n                            startPoint: .leading,\n                            endPoint: .trailing\n                        )\n                    )\n            )\n        }\n        .buttonStyle(.plain)\n    }\n}\n\nstruct ReadingDetails_Previews: PreviewProvider {\n    struct Preview: View {\n        // MARK: Internal\n\n        let reading: ReadingInfo = ReadingInfoTestData.readings[0]\n\n        var body: some View {\n            ReadingDetails(\n                reading: reading,\n                imageView: imageView,\n                useAction: {},\n                closeAction: {}\n            )\n        }\n\n        // MARK: Private\n\n        private var imageView: some View {\n            Image(uiImage: UIImage(contentsOfFile: testResourceURL(\"images/page604.png\").absoluteString)!)\n                .resizable()\n                .aspectRatio(contentMode: .fit)\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        Preview()\n            .accentColor(.appIdentity)\n    }\n}\n"
  },
  {
    "path": "Features/ReadingSelectorFeature/View/ReadingImage.swift",
    "content": "//\n//  ReadingImage.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-02-18.\n//\n\nimport NoorUI\nimport SwiftUI\n\nstruct ReadingImage<ImageView: View>: View {\n    let imageView: ImageView\n    @ScaledMetric var cornerRadius = Dimensions.cornerRadius\n\n    var body: some View {\n        Group {\n            imageView\n                .padding(.vertical)\n        }\n        .background(\n            RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)\n                .foregroundColor(Color.tertiarySystemBackground)\n                .shadow(radius: 3)\n        )\n    }\n}\n"
  },
  {
    "path": "Features/ReadingSelectorFeature/View/ReadingImageView.swift",
    "content": "//\n//  ReadingImageView.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2023-04-23.\n//  Copyright © 2023 Quran.com. All rights reserved.\n//\n\nimport NoorUI\nimport QuranGeometry\nimport SwiftUI\n\nstruct ReadingImageView: View {\n    let image: UIImage\n    let suraHeaders: [SuraHeaderLocation]\n    let ayahNumbers: [AyahNumberLocation]\n    let renderingMode: QuranThemedImage.RenderingMode\n\n    var body: some View {\n        AdaptiveImageScrollView(decorations: decorations, renderingMode: renderingMode) {\n            image\n        } onScaleChange: { _ in\n        } onGlobalFrameChange: { _ in\n        } header: {\n        } footer: {\n        }\n        .aspectRatio(image.size, contentMode: .fit)\n    }\n\n    private var decorations: ImageDecorations {\n        ImageDecorations(\n            suraHeaders: suraHeaders,\n            ayahNumbers: ayahNumbers,\n            wordFrames: WordFrameCollection(lines: []),\n            highlights: [:]\n        )\n    }\n}\n"
  },
  {
    "path": "Features/ReadingSelectorFeature/View/ReadingInfo.swift",
    "content": "//\n//  ReadingInfo.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-02-13.\n//\n\nimport Localization\nimport QuranKit\n\nstruct ReadingInfo<Value: Hashable>: Hashable, Identifiable {\n    // MARK: Lifecycle\n\n    init(value: Value, title: String, description: String, properties: [Reading.Property]) {\n        self.value = value\n        self.title = title\n        self.description = description\n        self.properties = properties\n    }\n\n    // MARK: Internal\n\n    let value: Value\n    let title: String\n    let description: String\n    let properties: [Reading.Property]\n\n    var id: Value { value }\n}\n\n// Test data\nenum ReadingInfoTestData {\n    enum Reading: CaseIterable {\n        case a, b, c, d, e\n    }\n\n    // MARK: Internal\n\n    static var readings: [ReadingInfo<Reading>] {\n        Reading.allCases.map {\n            ReadingInfo<Reading>(\n                value: $0,\n                title: l(\"reading.hafs-1405.title\"),\n                description: l(\"reading.hafs-1405.description\"),\n                properties: [\n                    .init(type: .supports, property: \"Property 1\"),\n                    .init(type: .supports, property: \"Property 2\"),\n                    .init(type: .lacks, property: \"Property 3\"),\n                ]\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "Features/ReadingSelectorFeature/View/ReadingItem.swift",
    "content": "//\n//  ReadingItem.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-02-18.\n//\n\nimport NoorUI\nimport SwiftUI\nimport UIx\n\nstruct ReadingItem<Value: Hashable, ImageView: View>: View {\n    // MARK: Internal\n\n    let reading: ReadingInfo<Value>\n    let imageView: ImageView\n    let selected: Bool\n    let progress: Double?\n    let action: () -> Void\n\n    @ScaledMetric var cornerRadius = Dimensions.cornerRadius\n\n    var body: some View {\n        Button(action: action) {\n            ZStack(alignment: .topTrailing) {\n                SingleAxisGeometryReader { width in\n                    HStack {\n                        VStack(alignment: .leading) {\n                            if let progress {\n                                ProgressView(value: progress, total: 1)\n                            }\n                            titleView\n                            descriptionView\n                        }\n                        .frame(width: width * 0.65)\n\n                        ReadingImage(imageView: imageView)\n                    }\n                }\n                .padding()\n                .background(background)\n                .padding()\n\n                checkmarkView\n            }\n            .padding(.horizontal)\n        }\n        .buttonStyle(.plain)\n    }\n\n    // MARK: Private\n\n    private var titleView: some View {\n        Text(reading.title)\n            .font(.headline)\n            .padding(.bottom)\n    }\n\n    private var descriptionView: some View {\n        Text(reading.description)\n            .font(.footnote)\n    }\n\n    private var backgroundRectangle: some InsettableShape {\n        RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)\n    }\n\n    private var background: some View {\n        backgroundRectangle\n            .strokeBorder(selected ? Color.appIdentity : .clear, lineWidth: 2)\n            .background(backgroundRectangle\n                .foregroundColor(Color.secondarySystemGroupedBackground)\n            )\n            .shadow(radius: 5, x: 0, y: 3)\n    }\n\n    @ViewBuilder private var checkmarkView: some View {\n        if selected {\n            NoorSystemImage.checkmark.image\n                .foregroundColor(.white)\n                .padding()\n                .background(\n                    Circle()\n                        .foregroundColor(Color.appIdentity)\n                        .shadow(radius: 3)\n                )\n        }\n    }\n}\n"
  },
  {
    "path": "Features/ReadingSelectorFeature/View/ReadingSelector.swift",
    "content": "//\n//  ReadingSelector.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-02-12.\n//\n\nimport NoorUI\nimport QuranKit\nimport SwiftUI\nimport UIx\n\nstruct ReadingSelector: View {\n    // MARK: Internal\n\n    @StateObject var viewModel: ReadingSelectorViewModel\n\n    var body: some View {\n        ReadingSelectorUI(\n            error: $viewModel.error,\n            progress: viewModel.progress,\n            selectedValue: viewModel.selectedReading,\n            readings: viewModel.readings,\n            imageView: imageView,\n            selectItem: { viewModel.showReading($0) },\n            start: { await viewModel.start() },\n            retry: { }\n        )\n        .populateThemeStyle()\n    }\n\n    // MARK: Private\n\n    private func imageView(reading: ReadingInfo<Reading>) -> some View {\n        ReadingImageView(\n            image: UIImage(named: reading.value.imageName)!,\n            suraHeaders: reading.value.suraHeaders,\n            ayahNumbers: reading.value.ayahNumbers,\n            renderingMode: renderingMode(for: reading.value)\n        )\n    }\n\n    private func renderingMode(for reading: Reading) -> QuranThemedImage.RenderingMode {\n        reading.usesInvertedQuranImageRenderingInDarkMode ? .invertInDarkMode : .tinted\n    }\n}\n\nprivate struct ReadingSelectorUI<Value: Hashable, ImageView: View>: View {\n    // MARK: Internal\n\n    @Binding var error: Error?\n\n    let progress: Double?\n    let selectedValue: Value?\n    let readings: [ReadingInfo<Value>]\n    let imageView: (ReadingInfo<Value>) -> ImageView\n    let selectItem: (Value) -> Void\n    let start: AsyncAction\n    let retry: AsyncAction\n\n    var body: some View {\n        ScrollView {\n            VStack {\n                ForEach(readings) { reading in\n                    let selected = selectedValue == reading.value\n                    ReadingItem(\n                        reading: reading,\n                        imageView: imageView(reading),\n                        selected: selected,\n                        progress: selected ? progress : nil\n                    ) {\n                        readingInfoDetails = reading\n                    }\n                }\n            }\n        }\n        .sheet(item: $readingInfoDetails) { reading in\n            ReadingDetails(\n                reading: reading,\n                imageView: imageView(reading),\n                useAction: {\n                    readingInfoDetails = nil\n                    selectItem(reading.value)\n                },\n                closeAction: { readingInfoDetails = nil }\n            )\n        }\n        .background(\n            Color.systemGroupedBackground\n                .edgesIgnoringSafeArea(.all)\n        )\n        .task { await start() }\n        .errorAlert(error: $error, retry: retry)\n    }\n\n    // MARK: Private\n\n    @State private var readingInfoDetails: ReadingInfo<Value>?\n}\n\nstruct ReadingSelector_Previews: PreviewProvider {\n    private struct Container: View {\n        // MARK: Internal\n\n        @State var selectedValue = ReadingInfoTestData.Reading.b\n        @State var error: Error?\n\n        var body: some View {\n            NavigationView {\n                ReadingSelectorUI(\n                    error: $error,\n                    progress: 0.3,\n                    selectedValue: selectedValue,\n                    readings: ReadingInfoTestData.readings,\n                    imageView: imageView,\n                    selectItem: { selectedValue = $0 },\n                    start: { },\n                    retry: { }\n                )\n                .navigationTitle(\"Reading Selector\")\n                .toolbar {\n                    if error == nil {\n                        Button(\"Error\") { error = URLError(.notConnectedToInternet) }\n                    }\n                }\n            }\n        }\n\n        // MARK: Private\n\n        private func imageView(reading: ReadingInfo<ReadingInfoTestData.Reading>) -> some View {\n            Image(uiImage: UIImage(contentsOfFile: testResourceURL(\"images/page604.png\").absoluteString)!)\n                .resizable()\n                .aspectRatio(contentMode: .fit)\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        Container()\n    }\n}\n"
  },
  {
    "path": "Features/ReciterListFeature/ReciterListBuilder.swift",
    "content": "//\n//  ReciterListBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/6/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport UIKit\n\npublic struct ReciterListBuilder {\n    // MARK: Lifecycle\n\n    public init() {}\n\n    // MARK: Public\n\n    @MainActor\n    public func build(withListener listener: ReciterListListener, standalone: Bool) -> UIViewController {\n        let viewModel = ReciterListViewModel(standalone: standalone)\n        let viewController = ReciterListViewController(viewModel: viewModel)\n        viewModel.listener = listener\n        return viewController\n    }\n}\n"
  },
  {
    "path": "Features/ReciterListFeature/ReciterListView.swift",
    "content": "//\n//  ReciterListView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-25.\n//\n\nimport Localization\nimport NoorUI\nimport QuranAudio\nimport SwiftUI\nimport UIx\nimport VLogging\n\nstruct ReciterListView: View {\n    @StateObject var viewModel: ReciterListViewModel\n\n    var body: some View {\n        ReciterListViewUI(\n            standalone: viewModel.standalone,\n            recentReciters: viewModel.recentReciters,\n            downloadedReciters: viewModel.downloadedReciters,\n            englishReciters: viewModel.englishReciters,\n            arabicReciters: viewModel.arabicReciters,\n            selectedReciter: viewModel.selectedReciter,\n            start: { await viewModel.start() },\n            selectAction: { viewModel.selectReciter($0) }\n        )\n    }\n}\n\nprivate struct ReciterListViewUI: View {\n    // MARK: Internal\n\n    @Environment(\\.dismiss) var dismiss\n\n    let standalone: Bool\n    let recentReciters: [Reciter]\n    let downloadedReciters: [Reciter]\n    let englishReciters: [Reciter]\n    let arabicReciters: [Reciter]\n\n    let selectedReciter: Reciter?\n\n    let start: AsyncAction\n    let selectAction: ItemAction<Reciter>\n\n    var body: some View {\n        Group {\n            if standalone {\n                CocoaNavigationView {\n                    content\n                        .background(Color.blue)\n                }\n                .background(Color.yellow)\n            } else {\n                content\n                    .background(Color.green)\n            }\n        }\n        .background(Color.red)\n    }\n\n    // MARK: Private\n\n    private var content: some View {\n        NoorList {\n            NoorSection(\n                title: l(\"reciters.recent\"),\n                recentReciters,\n                listItem: {\n                    listItem($0, recent: true)\n                }\n            )\n\n            NoorSection(\n                title: l(\"reciters.downloaded\"),\n                downloadedReciters,\n                listItem: {\n                    listItem($0, recent: false)\n                }\n            )\n\n            NoorSection(\n                title: allTitle(languageCode: \"en\"),\n                englishReciters,\n                listItem: {\n                    listItem($0, recent: false)\n                }\n            )\n\n            NoorSection(\n                title: allTitle(languageCode: \"ar\"),\n                arabicReciters,\n                listItem: {\n                    listItem($0, recent: false)\n                }\n            )\n        }\n        .task { await start() }\n        .navigationTitle(l(\"reciters.title\"))\n        .toolbar {\n            ToolbarItem(placement: .navigationBarTrailing) {\n                Button {\n                    logger.info(\"Reciters: dismiss reciters list tapped\")\n                    dismiss()\n                } label: {\n                    Text(l(\"button.done\"))\n                        .font(.headline)\n                }\n            }\n        }\n    }\n\n    private func allTitle(languageCode: String) -> String {\n        if let language = Locale.fixedCurrentLocaleNumbers.localizedString(forLanguageCode: languageCode) {\n            return l(\"reciters.all\") + \" (\" + language.capitalized + \")\"\n        }\n        return l(\"reciters.all\")\n    }\n\n    private func listItem(_ reciter: Reciter, recent: Bool = false) -> some View {\n        NoorListItem(\n            image: recent ? .init(NoorSystemImage.lastPage) : nil,\n            title: .text(reciter.localizedName),\n            accessory: reciter == selectedReciter ? .image(.checkmark, color: .appIdentity) : nil\n        ) {\n            logger.info(\"Reciters: reciter selected \\(reciter.id)\")\n            selectAction(reciter)\n            dismiss()\n        }\n    }\n}\n\nstruct ReciterListView_Previews: PreviewProvider {\n    struct Preview: View {\n        @State var selectedReciter: Reciter?\n\n        var body: some View {\n            ReciterListViewUI(\n                standalone: true,\n                recentReciters: [reciter(id: 1), reciter(id: 2)],\n                downloadedReciters: [reciter(id: 1), reciter(id: 3), reciter(id: 10), reciter(id: 12)],\n                englishReciters: (1 ... 9).map { reciter(id: $0) },\n                arabicReciters: (10 ... 20).map { reciter(id: $0) },\n                selectedReciter: selectedReciter,\n                start: {},\n                selectAction: { selectedReciter = $0 }\n            )\n        }\n\n        func reciter(id: Int) -> Reciter {\n            let name = \"Reciter \" + String(id)\n            return Reciter(\n                id: id,\n                nameKey: name,\n                directory: String(id),\n                audioURL: URL(validURL: \"http://example.com\"),\n                audioType: .gapless(databaseName: name),\n                hasGaplessAlternative: false,\n                category: .arabic\n            )\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        VStack {}\n            .sheet(isPresented: .constant(true)) {\n                Preview()\n            }\n    }\n}\n"
  },
  {
    "path": "Features/ReciterListFeature/ReciterListViewController.swift",
    "content": "//\n//  ReciterListViewController.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-25.\n//\n\nimport SwiftUI\nimport UIx\n\nfinal class ReciterListViewController: UIHostingController<ReciterListView>, StackableViewController {\n    // MARK: Lifecycle\n\n    init(viewModel: ReciterListViewModel) {\n        self.viewModel = viewModel\n        super.init(rootView: ReciterListView(viewModel: viewModel))\n        rotateToPortraitIfPhone()\n    }\n\n    @available(*, unavailable)\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"Not implemented\")\n    }\n\n    // MARK: Internal\n\n    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {\n        traitCollection.userInterfaceIdiom == .pad ? .all : .portrait\n    }\n\n    // MARK: Private\n\n    private let viewModel: ReciterListViewModel\n}\n"
  },
  {
    "path": "Features/ReciterListFeature/ReciterListViewModel.swift",
    "content": "//\n//  ReciterListViewModel.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-25.\n//\n\nimport Combine\nimport QuranAudio\nimport ReciterService\nimport VLogging\n\n@MainActor\npublic protocol ReciterListListener: AnyObject {\n    func onSelectedReciterChanged(to reciter: Reciter)\n}\n\n@MainActor\nfinal class ReciterListViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    init(standalone: Bool) {\n        self.standalone = standalone\n    }\n\n    // MARK: Internal\n\n    let standalone: Bool\n    weak var listener: ReciterListListener?\n\n    @Published var recentReciters: [Reciter] = []\n    @Published var downloadedReciters: [Reciter] = []\n    @Published var englishReciters: [Reciter] = []\n    @Published var arabicReciters: [Reciter] = []\n\n    @Published var selectedReciter: Reciter?\n\n    func start() async {\n        logger.info(\"Reciters: loading reciters\")\n\n        let allReciters = await reciterRetreiver.getReciters()\n        logger.info(\"Reciters: reciters loaded\")\n\n        recentReciters = recentRecitersService.recentReciters(allReciters)\n        downloadedReciters = downloadedRecitersService.downloadedReciters(allReciters)\n\n        englishReciters = allReciters.filter { $0.category != .arabic }\n        arabicReciters = allReciters.filter { $0.category == .arabic }\n\n        let selectedReciterId = preferences.lastSelectedReciterId\n        selectedReciter = allReciters.first { $0.id == selectedReciterId }\n    }\n\n    func selectReciter(_ reciter: Reciter) {\n        listener?.onSelectedReciterChanged(to: reciter)\n    }\n\n    // MARK: Private\n\n    private let reciterRetreiver = ReciterDataRetriever()\n    private let recentRecitersService = RecentRecitersService()\n    private let downloadedRecitersService = DownloadedRecitersService()\n    private let preferences = ReciterPreferences.shared\n}\n"
  },
  {
    "path": "Features/SearchFeature/SearchBuilder.swift",
    "content": "//\n//  SearchBuilder.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/15/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n\nimport AppDependencies\nimport FeaturesSupport\nimport QuranTextKit\nimport UIKit\n\n@MainActor\npublic struct SearchBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func build(withListener listener: QuranNavigator) -> UIViewController {\n        let viewModel = SearchViewModel(\n            analytics: container.analytics,\n            searchService: CompositeSearcher(\n                databasesURL: container.databasesURL,\n                quranFileURL: container.quranUthmaniV2Database\n            ),\n            navigateTo: { [weak listener] verse in\n                listener?.navigateTo(page: verse.page, lastPage: nil, highlightingSearchAyah: verse)\n            }\n        )\n        let viewController = SearchViewController(viewModel: viewModel)\n        return viewController\n    }\n\n    // MARK: Internal\n\n    let container: AppDependencies\n}\n"
  },
  {
    "path": "Features/SearchFeature/SearchTypes.swift",
    "content": "//\n//  SearchTypes.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-16.\n//\n\nimport QuranText\n\nenum SearchUIState {\n    case entry\n    case search(_ term: String)\n}\n\nenum SearchState {\n    case searching\n    case searchResult(_ results: [SearchResults])\n}\n\nenum KeyboardState {\n    case open\n    case closed\n}\n"
  },
  {
    "path": "Features/SearchFeature/SearchView.swift",
    "content": "//\n//  SearchView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-17.\n//\n\nimport Localization\nimport NoorUI\nimport QuranKit\nimport QuranText\nimport SwiftUI\nimport UIx\n\nstruct SearchView: View {\n    @StateObject var viewModel: SearchViewModel\n\n    var body: some View {\n        SearchViewUI(\n            error: $viewModel.error,\n            uiState: viewModel.uiState,\n            searchState: viewModel.searchState,\n            term: viewModel.searchTerm,\n            recents: viewModel.recents,\n            populars: viewModel.populars,\n            autocompletions: viewModel.autocompletions,\n            start: { await viewModel.start() },\n            search: { viewModel.search(for: $0) },\n            selectSearchResult: { viewModel.select(searchResult: $0.result, source: $0.source) }\n        )\n    }\n}\n\nprivate struct SearchViewUI: View {\n    @Binding var error: Error?\n\n    let uiState: SearchUIState\n    let searchState: SearchState\n\n    let term: String\n    let recents: [String]\n    let populars: [String]\n    let autocompletions: [String]\n\n    let start: AsyncAction\n    let search: AsyncItemAction<String>\n    let selectSearchResult: ItemAction<(result: SearchResult, source: SearchResults.Source)>\n\n    var body: some View {\n        Group {\n            switch uiState {\n            case .entry:\n                if autocompletions.isEmpty {\n                    entry\n                } else {\n                    autocompletionsView\n                }\n            case .search:\n                switch searchState {\n                case .searching:\n                    NoorList {\n                        LoadingView()\n                    }\n                case .searchResult(let results):\n                    searchResultsView(searchResults: results)\n                }\n            }\n        }\n        .task { await start() }\n        .errorAlert(error: $error)\n    }\n\n    var noResultsData: some View {\n        DataUnavailableView(\n            title: lFormat(\"no_results\", table: .android, term),\n            text: \"\",\n            image: .search\n        )\n    }\n\n    @ViewBuilder\n    var autocompletionsView: some View {\n        NoorList(listType: .searching) {\n            NoorSection(autocompletions.map(SelfIdentifiable.init)) { item in\n                NoorListItem(\n                    image: .init(.search),\n                    title: autocompletionText(of: item.value)\n                ) {\n                    await search(item.value)\n                }\n            }\n        }\n    }\n\n    @ViewBuilder\n    var entry: some View {\n        NoorList {\n            NoorSection(title: l(\"search.recents.title\"), recents.map(SelfIdentifiable.init)) { item in\n                NoorListItem(\n                    image: .init(.search),\n                    title: .text(item.value)\n                ) {\n                    await search(item.value)\n                }\n            }\n\n            NoorSection(title: l(\"search.popular.title\"), populars.map(SelfIdentifiable.init)) { item in\n                NoorListItem(\n                    image: .init(.search),\n                    title: .text(item.value)\n                ) {\n                    await search(item.value)\n                }\n            }\n        }\n    }\n\n    @ViewBuilder\n    func searchResultsView(searchResults: [SearchResults]) -> some View {\n        if !searchResults.isEmpty {\n            NoorList {\n                ForEach(searchResults) { result in\n                    let plainTitle = title(of: result)\n                    let title = lFormat(\"search.result.count\", plainTitle, result.items.count)\n                    NoorSection(title: title, result.items) { item in\n                        let localizedVerse = item.ayah.localizedName\n                        let arabicSuraName = item.ayah.sura.arabicSuraName\n                        NoorListItem(\n                            subheading: \"(\\(String(item.ayah.sura.suraNumber))) \\(localizedVerse) \\(sura: arabicSuraName)\",\n                            title: searchResultText(of: item),\n                            accessory: .text(NumberFormatter.shared.format(item.ayah.page.pageNumber))\n                        ) {\n                            selectSearchResult((item, result.source))\n                        }\n                    }\n                }\n            }\n        } else {\n            noResultsData\n        }\n    }\n\n    func title(of searchResults: SearchResults) -> String {\n        switch searchResults.source {\n        case .translation(let translation):\n            return translation.translationName\n        case .quran:\n            return (Bundle.main.localizedInfoDictionary?[\"CFBundleName\"] as? String) ?? \"Quran\"\n        }\n    }\n\n    func autocompletionText(of item: String) -> MultipartText {\n        let ranges = [item.range(of: term, options: .caseInsensitive)].compactMap { $0 }\n        let highlightRanges = ranges.map { HighlightingRange($0, foregroundColor: .secondaryLabel) }\n        return \"\\(item, lineLimit: 1, highlighting: highlightRanges)\"\n    }\n\n    func searchResultText(of item: SearchResult) -> MultipartText {\n        let highlightRanges = item.ranges.map { HighlightingRange($0, fontWeight: .heavy) }\n        return \"\\(item.text, highlighting: highlightRanges)\"\n    }\n}\n\nstruct SearchView_Previews: PreviewProvider {\n    struct Preview: View {\n        static let englishText = \"This is an autocompletion text in English, what if this is a long text\"\n        static let arabicText = \"هذا خط عربي يوضح خاصية التكملة للعرب\"\n        static let quran = Quran.hafsMadani1405\n\n        static let populatedResults = SearchResults(source: .quran, items: [\n            SearchResult(\n                text: englishText,\n                ranges: [\n                    englishText.range(of: \"auto\")!,\n                    englishText.range(of: \"ong\")!,\n                    englishText.range(of: \"gli\")!,\n                    englishText.range(of: \"what\")!,\n                ],\n                ayah: quran.suras[3].verses[5]\n            ),\n            SearchResult(\n                text: arabicText,\n                ranges: [\n                    arabicText.range(of: \"خط\")!,\n                    arabicText.range(of: \"يوض\")!,\n                    arabicText.range(of: \"ية\")!,\n                    arabicText.range(of: \"كمل\")!,\n                ],\n                ayah: quran.suras[3].verses[5]\n            ),\n        ])\n\n        @State var uiState = SearchUIState.search(\"abc\")\n        @State var searchState = SearchState.searching\n        @State var error: Error?\n        @State var autocompletions: [String] = []\n\n        var body: some View {\n            NavigationView {\n                SearchViewUI(\n                    error: $error,\n                    uiState: uiState,\n                    searchState: searchState,\n                    term: \"is\",\n                    recents: [\"Recent 1\", \"Recent 2\"],\n                    populars: [\"Popular 1\", \"Popular 2\"],\n                    autocompletions: autocompletions,\n                    start: { },\n                    search: { _ in },\n                    selectSearchResult: { _ in }\n                )\n                .navigationTitle(\"Search\")\n                .toolbar {\n                    ScrollView(.horizontal) {\n                        HStack {\n                            Button(\"Entry\") {\n                                uiState = .entry\n                                autocompletions = []\n                            }\n                            Button(\"Autocomplete\") {\n                                uiState = .entry\n                                autocompletions = [Self.englishText, Self.arabicText]\n                            }\n                            Button(\"Search\") {\n                                uiState = .search(\"abc\")\n                                searchState = .searchResult([Self.populatedResults])\n                            }\n                            Button(\"No Results\") {\n                                uiState = .search(\"abc\")\n                                searchState = .searchResult([])\n                            }\n                            Button(\"Loading\") {\n                                uiState = .search(\"abc\")\n                                searchState = .searching\n                            }\n                            Button(\"Error\") { error = URLError(.notConnectedToInternet) }\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        VStack {\n            Preview()\n        }\n    }\n}\n"
  },
  {
    "path": "Features/SearchFeature/SearchViewController.swift",
    "content": "//\n//  SearchViewController.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-20.\n//\n\nimport Combine\nimport Foundation\nimport Localization\nimport SwiftUI\nimport VLogging\n\nfinal class SearchViewController: UIViewController, UISearchBarDelegate {\n    // MARK: Lifecycle\n\n    init(viewModel: SearchViewModel) {\n        self.viewModel = viewModel\n        searchResultsViewController = UIHostingController(rootView: SearchView(viewModel: viewModel))\n        super.init(nibName: nil, bundle: nil)\n    }\n\n    @available(*, unavailable)\n    @MainActor\n    dynamic required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Internal\n\n    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {\n        if UIDevice.current.userInterfaceIdiom == .phone {\n            return .portrait\n        } else {\n            return super.supportedInterfaceOrientations\n        }\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        title = lAndroid(\"menu_search\")\n\n        addFullScreenChild(searchResultsViewController)\n\n        searchController.obscuresBackgroundDuringPresentation = false\n        searchController.hidesNavigationBarDuringPresentation = true\n        searchController.searchBar.placeholder = l(\"search.placeholder.text\")\n        searchController.searchBar.delegate = self\n        navigationItem.searchController = searchController\n        navigationItem.hidesSearchBarWhenScrolling = false\n        definesPresentationContext = true\n\n        viewModel.$searchTerm\n            .receive(on: DispatchQueue.main)\n            .sink { [weak self] searchTerm in\n                self?.searchController.searchBar.text = searchTerm\n            }\n            .store(in: &cancellables)\n\n        viewModel.$keyboardState\n            .removeDuplicates()\n            .receive(on: DispatchQueue.main)\n            .sink { [weak self] state in\n                switch state {\n                case .closed:\n                    self?.searchController.searchBar.endEditing(true)\n                case .open:\n                    self?.searchController.searchBar.becomeFirstResponder()\n                }\n            }\n            .store(in: &cancellables)\n    }\n\n    // MARK: - Search delegate methods\n\n    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {\n        logger.info(\"[Search] textDidChange to \\(searchText)\")\n        viewModel.autocomplete(searchText)\n    }\n\n    func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {\n        logger.info(\"[Search] searchBarTextDidBeginEditing \\(searchBar.text ?? \"\")\")\n        viewModel.keyboardState = .open\n    }\n\n    func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {\n        logger.info(\"[Search] searchBarTextDidEndEditing \\(searchBar.text ?? \"\")\")\n        viewModel.keyboardState = .closed\n    }\n\n    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {\n        logger.info(\"[Search] searchBarSearchButtonClicked \\(searchBar.text ?? \"\")\")\n        viewModel.searchForUserTypedTerm()\n    }\n\n    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {\n        logger.info(\"[Search] searchBarCancelButtonClicked\")\n        viewModel.reset()\n    }\n\n    // MARK: Private\n\n    private var cancellables: Set<AnyCancellable> = []\n    private let viewModel: SearchViewModel\n    private let searchController = UISearchController(searchResultsController: nil)\n    private let searchResultsViewController: UIHostingController<SearchView>\n}\n"
  },
  {
    "path": "Features/SearchFeature/SearchViewModel.swift",
    "content": "//\n//  SearchViewModel.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-17.\n//\n\nimport Analytics\nimport Combine\nimport Dispatch\nimport QuranKit\nimport QuranText\nimport QuranTextKit\nimport ReadingService\nimport TranslationService\nimport VLogging\n\n@MainActor\nfinal class SearchViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    init(analytics: AnalyticsLibrary, searchService: CompositeSearcher, navigateTo: @escaping (AyahNumber) -> Void) {\n        self.analytics = analytics\n        self.searchService = searchService\n        self.navigateTo = navigateTo\n    }\n\n    // MARK: Internal\n\n    @Published var error: Error? = nil\n\n    @Published var searchState = SearchState.searching\n\n    @Published var searchTerm = \"\"\n    @Published var autocompletions: [String] = []\n    @Published var recents: [String] = []\n\n    @Published var keyboardState: KeyboardState = .closed\n\n    @Published var uiState = SearchUIState.entry {\n        didSet {\n            logger.debug(\"[Search] New UI state: \\(uiState)\")\n        }\n    }\n\n    var populars: [String] { recentsService.popularTerms }\n\n    func start() async {\n        async let reading: () = observeReadingChanges()\n        async let autocomplete: () = observeSearchTermChanges()\n        async let recents: () = observeRecentSearchItemsChanges()\n        async let search: () = observeSearchChanges()\n        _ = await [reading, autocomplete, recents, search]\n    }\n\n    func select(searchResult: SearchResult, source: SearchResults.Source) {\n        logger.info(\"Search: search result selected '\\(searchResult)', source: \\(source)\")\n        // show translation if not an active translation\n        switch source {\n        case .quran: break\n        case .translation(let translation):\n            contentStatePreferences.quranMode = .translation\n            var translationIds = selectedTranslationsPreferences.selectedTranslationIds\n            if !translationIds.contains(translation.id) {\n                translationIds.append(translation.id)\n                selectedTranslationsPreferences.selectedTranslationIds = translationIds\n            }\n        }\n\n        // navigate to the selected page\n        analytics.openingQuran(from: .searchResults)\n        navigateTo(searchResult.ayah)\n    }\n\n    func reset() {\n        uiState = .entry\n        searchTerm = \"\"\n        autocompletions = []\n    }\n\n    func autocomplete(_ term: String) {\n        if searchTerm != term {\n            uiState = .entry\n            searchTerm = term\n        }\n    }\n\n    func searchForUserTypedTerm() {\n        search(for: searchTerm)\n    }\n\n    func search(for term: String) {\n        keyboardState = .closed\n        searchTerm = term\n        uiState = .search(term)\n    }\n\n    // MARK: Private\n\n    private let analytics: AnalyticsLibrary\n    private let searchService: CompositeSearcher\n    private let navigateTo: (AyahNumber) -> Void\n\n    private let recentsService = SearchRecentsService.shared\n    private let readingPreferences = ReadingPreferences.shared\n    private let contentStatePreferences = QuranContentStatePreferences.shared\n    private let selectedTranslationsPreferences = SelectedTranslationsPreferences.shared\n\n    private func search(for term: String) async throws -> [SearchResults] {\n        searchState = .searching\n        let quran = readingPreferences.reading.quran\n        let results = try await searchService.search(for: term, quran: quran)\n\n        analytics.searching(for: term, results: results)\n        recentsService.addToRecents(term)\n\n        return results\n    }\n\n    private func observeSearchChanges() async {\n        let states = $uiState.values()\n        for await state in states {\n            switch state {\n            case .entry:\n                continue\n            case .search(let term):\n                searchState = .searching\n                let result = await Result(catching: { try await search(for: term) })\n                if searchTerm == term {\n                    switch result {\n                    case .success(let results):\n                        searchState = .searchResult(results)\n                    case .failure(let error):\n                        self.error = error\n                        searchState = .searchResult([])\n                    }\n                }\n            }\n        }\n    }\n\n    private func observeRecentSearchItemsChanges() async {\n        let recentsSequence = recentsService.$recentSearchItems\n            .prepend(recentsService.recentSearchItems)\n            .values()\n        for await recents in recentsSequence {\n            self.recents = recents\n        }\n    }\n\n    private func observeReadingChanges() async {\n        let readings = readingPreferences.$reading\n            .values()\n        for await _ in readings {\n            searchTerm = \"\"\n        }\n    }\n\n    private func observeSearchTermChanges() async {\n        let searchTermSequence = $searchTerm\n            .dropFirst() // Drop initial empty value.\n            .throttle(for: .milliseconds(300), scheduler: DispatchQueue.main, latest: true)\n            .values()\n        for await term in searchTermSequence {\n            logger.debug(\"[Search] Autocomplete requested for \\(term)\")\n            let autocompletions = await autocomplete(term)\n            if searchTerm == term {\n                self.autocompletions = autocompletions\n            }\n        }\n    }\n\n    private func autocomplete(_ term: String) async -> [String] {\n        let quran = readingPreferences.reading.quran\n        return await searchService.autocomplete(term: term, quran: quran)\n    }\n}\n\nprivate extension AnalyticsLibrary {\n    func searching(for term: String, results: [SearchResults]) {\n        logEvent(\"SearchTerm\", value: term)\n        logEvent(\"SearchSections\", value: results.count.description)\n        for result in results {\n            logEvent(\"SearchSource\", value: result.source.name)\n            logEvent(\"SearchResultsCount\", value: result.items.count.description)\n        }\n    }\n}\n"
  },
  {
    "path": "Features/SettingsFeature/Sources/ContactUsService.swift",
    "content": "//\n//  ContactUsService.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-28.\n//\n\nimport SafariServices\nimport UIKit\n\nstruct ContactUsService {\n    // MARK: Internal\n\n    func contactUsController() -> UIViewController {\n        let appVersion = Bundle.main.object(forInfoDictionaryKey: \"CFBundleShortVersionString\") as? String ?? \"Unknown\"\n        let device = Self.unameMachine\n        let iosVersion = UIDevice.current.systemVersion\n        let appDetails = [appVersion, device, iosVersion].joined(separator: \"|\")\n        let decodedAppDetails = appDetails.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!\n        let urlString = \"https://docs.google.com/forms/d/e/1FAIpQLSduPT6DFmx2KGOS0I7khpww4FuvLGEDBlzKBhdw6dgIPU_6sg/viewform?entry.1440014003=\"\n            + decodedAppDetails\n        let url = URL(string: urlString)!\n        return SFSafariViewController(url: url)\n    }\n\n    // MARK: Private\n\n    private static var unameMachine: String {\n        var utsnameInstance = utsname()\n        uname(&utsnameInstance)\n        let optionalString: String? = withUnsafePointer(to: &utsnameInstance.machine) {\n            $0.withMemoryRebound(to: CChar.self, capacity: 1) { String(validatingUTF8: $0) }\n        }\n        return optionalString ?? \"Unknown\"\n    }\n}\n"
  },
  {
    "path": "Features/SettingsFeature/Sources/Diagnostics/DiagnosticsBuilder.swift",
    "content": "//\n//  DiagnosticsBuilder.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-10.\n//\n\nimport AppDependencies\nimport Localization\nimport SwiftUI\n\n@MainActor\npublic struct DiagnosticsBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func build(navigationController: UINavigationController?) -> UIViewController {\n        let service = DiagnosticsService(\n            logsDirectory: container.logsDirectory,\n            databasesDirectory: container.databasesURL\n        )\n        let viewModel = DiagnosticsViewModel(\n            diagnosticsService: service,\n            navigationController: navigationController\n        )\n        let view = DiagnosticsView(viewModel: viewModel)\n        let viewController = UIHostingController(rootView: view)\n        viewController.title = l(\"diagnostics.title\")\n        return viewController\n    }\n\n    // MARK: Internal\n\n    let container: AppDependencies\n}\n"
  },
  {
    "path": "Features/SettingsFeature/Sources/Diagnostics/DiagnosticsService.swift",
    "content": "//\n//  DiagnosticsService.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-09.\n//\n\nimport Foundation\nimport Preferences\nimport VLogging\nimport Zip\n\npublic struct DiagnosticsPreferences {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Public\n\n    public static let shared = DiagnosticsPreferences()\n\n    @Preference(enableDebugLogging)\n    public var enableDebugLogging: Bool\n\n    // MARK: Private\n\n    private static let enableDebugLogging = PreferenceKey<Bool>(key: \"enableDebugLogging\", defaultValue: false)\n}\n\nstruct DiagnosticsService {\n    struct DiagnosticsZip {\n        let url: URL\n        let cleanUp: () -> Void\n    }\n\n    // MARK: Internal\n\n    let logsDirectory: URL\n    let databasesDirectory: URL\n\n    func buildDiagnosticsZip() throws -> DiagnosticsZip {\n        let fileManager = FileManager.default\n\n        // Prepare 'extras' directory.\n        try? fileManager.removeItem(at: extras)\n        try? fileManager.createDirectory(at: extras, withIntermediateDirectories: true)\n        defer { try? fileManager.removeItem(at: extras) }\n\n        try? saveUserDefaults()\n        try? copyDatabases()\n\n        // Create temporary file.\n        let tempDirectoryURL = fileManager.temporaryDirectory\n        let fileName = UUID().uuidString + \".zip\"\n        let zipFileURL = tempDirectoryURL.appendingPathComponent(fileName)\n\n        // Zip 'Logs' directory.\n        logger.info(\"Zip diagnostics to \\(zipFileURL)\")\n        try Zip.zipFiles(paths: [logsDirectory], zipFilePath: zipFileURL, password: nil, progress: nil)\n        logger.info(\"Diagnostics Zipped\")\n\n        return DiagnosticsZip(url: zipFileURL) {\n            logger.info(\"Cleanup Diagnostics.\")\n            try? FileManager.default.removeItem(at: zipFileURL)\n        }\n    }\n\n    // MARK: Private\n\n    private var extras: URL {\n        logsDirectory.appendingPathComponent(\"extras\", isDirectory: true)\n    }\n\n    private func makeJSONSerializable(_ value: Any) -> Any {\n        switch value {\n        case let dataValue as Data:\n            // Convert Data to Base64 encoded string\n            return dataValue.base64EncodedString()\n        case let dateValue as Date:\n            // Convert Date to String\n            let dateFormatter = ISO8601DateFormatter()\n            return dateFormatter.string(from: dateValue)\n        case let arrayValue as [Any]:\n            // Recursively process each element in the array\n            return arrayValue.map { makeJSONSerializable($0) }\n        case let dictionaryValue as [String: Any]:\n            return dictionaryValue.mapValues { makeJSONSerializable($0) }\n        default:\n            // Return the value as it is for serializable types\n            return value\n        }\n    }\n\n    private func saveUserDefaults() throws {\n        let dictionary = UserDefaults.standard.dictionaryRepresentation()\n        let cleanedDictionary = makeJSONSerializable(dictionary)\n        let data = try JSONSerialization.data(withJSONObject: cleanedDictionary, options: .prettyPrinted)\n        let fileURL = extras.appendingPathComponent(\"UserDefaultsData.json\")\n        try data.write(to: fileURL, options: .atomicWrite)\n    }\n\n    private func copyDatabases() throws {\n        let fileManager = FileManager.default\n\n        // Get the databases directory contents\n        let contents = try fileManager.contentsOfDirectory(at: databasesDirectory, includingPropertiesForKeys: nil)\n        for file in contents {\n            let destinationFile = extras.appendingPathComponent(file.lastPathComponent)\n            try? fileManager.copyItem(at: file, to: destinationFile)\n        }\n    }\n}\n"
  },
  {
    "path": "Features/SettingsFeature/Sources/Diagnostics/DiagnosticsView.swift",
    "content": "//\n//  DiagnosticsView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-09.\n//\n\nimport Localization\nimport NoorUI\nimport SwiftUI\nimport UIx\n\nstruct DiagnosticsView: View {\n    @StateObject var viewModel: DiagnosticsViewModel\n\n    var body: some View {\n        DiagnosticsViewUI(\n            error: $viewModel.error,\n            enableDebugLogging: $viewModel.enableDebugLogging,\n            shareLog: { viewModel.shareLogs() }\n        )\n    }\n}\n\nprivate struct DiagnosticsViewUI: View {\n    @Binding var error: Error?\n    @Binding var enableDebugLogging: Bool\n    let shareLog: AsyncAction\n\n    var body: some View {\n        NoorList {\n            NoorBasicSection {\n                Text(l(\"diagnostics.details\"))\n                    .foregroundColor(Color.secondaryLabel)\n                    .listRowBackground(Color.clear)\n            }\n\n            NoorBasicSection(footer: l(\"diagnostics.enable_debug_logs.details\")) {\n                Toggle(isOn: $enableDebugLogging) {\n                    Text(l(\"diagnostics.enable_debug_logs\"))\n                }\n            }\n\n            NoorBasicSection {\n                NoorListItem(\n                    title: .text(l(\"diagnostics.share_app_logs\")),\n                    action: shareLog\n                )\n            }\n        }\n        .errorAlert(error: $error)\n    }\n}\n\nstruct DiagnosticsView_Previews: PreviewProvider {\n    struct Container: View {\n        @State var error: Error?\n        @State var enableDebugLogging = true\n\n        var body: some View {\n            DiagnosticsViewUI(\n                error: $error,\n                enableDebugLogging: $enableDebugLogging,\n                shareLog: {}\n            )\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        VStack {\n            Container()\n        }\n    }\n}\n"
  },
  {
    "path": "Features/SettingsFeature/Sources/Diagnostics/DiagnosticsViewModel.swift",
    "content": "//\n//  DiagnosticsViewModel.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-10.\n//\n\nimport Combine\nimport UIKit\n\n@MainActor\nfinal class DiagnosticsViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    init(diagnosticsService: DiagnosticsService, navigationController: UINavigationController?) {\n        self.diagnosticsService = diagnosticsService\n        self.navigationController = navigationController\n    }\n\n    // MARK: Internal\n\n    @Published var error: Error? = nil\n\n    @Published var enableDebugLogging = DiagnosticsPreferences.shared.enableDebugLogging {\n        didSet {\n            DiagnosticsPreferences.shared.enableDebugLogging = enableDebugLogging\n        }\n    }\n\n    func shareLogs() {\n        do {\n            let diagnosticsZip = try diagnosticsService.buildDiagnosticsZip()\n            navigationController?.share([diagnosticsZip.url]) {\n                diagnosticsZip.cleanUp()\n            }\n        } catch {\n            self.error = error\n        }\n    }\n\n    // MARK: Private\n\n    private let diagnosticsService: DiagnosticsService\n    private weak var navigationController: UINavigationController?\n}\n"
  },
  {
    "path": "Features/SettingsFeature/Sources/SettingsBuilder.swift",
    "content": "//\n//  SettingsBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 3/31/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AppDependencies\nimport AudioDownloadsFeature\nimport Localization\nimport ReadingSelectorFeature\nimport SettingsService\nimport SwiftUI\nimport TranslationsFeature\nimport UIKit\n\n@MainActor\npublic struct SettingsBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func build(navigationController: UINavigationController) -> UIViewController {\n        let viewModel = SettingsRootViewModel(\n            analytics: container.analytics,\n            reviewService: ReviewService(analytics: container.analytics),\n            authenticationClient: container.authenticationClient,\n            audioDownloadsBuilder: AudioDownloadsBuilder(container: container),\n            translationsListBuilder: TranslationsListBuilder(container: container),\n            readingSelectorBuilder: ReadingSelectorBuilder(container: container),\n            diagnosticsBuilder: DiagnosticsBuilder(container: container),\n            quranProfileURL: container.quranProfileURL,\n            navigationController: navigationController\n        )\n        let view = SettingsRootView(viewModel: viewModel)\n        let viewController = UIHostingController(rootView: view)\n        viewController.title = lAndroid(\"menu_settings\")\n        return viewController\n    }\n\n    // MARK: Internal\n\n    let container: AppDependencies\n}\n"
  },
  {
    "path": "Features/SettingsFeature/Sources/SettingsRootView.swift",
    "content": "//\n//  SettingsRootView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-25.\n//\n//\n\nimport Localization\nimport NoorUI\nimport SwiftUI\nimport UIx\n\nstruct SettingsRootView: View {\n    @StateObject var viewModel: SettingsRootViewModel\n\n    var body: some View {\n        SettingsRootViewUI(\n            appearanceMode: $viewModel.appearanceMode,\n            error: $viewModel.error,\n            audioEnd: viewModel.audioEnd.name,\n            isAuthenticated: viewModel.isAuthenticated,\n            loggedInUserEmail: viewModel.currentUserEmail,\n            openQuranComProfile: { viewModel.openQuranComProfile() },\n            navigateToAudioEndSelector: { viewModel.navigateToAudioEndSelector() },\n            navigateToAudioManager: { viewModel.navigateToAudioManager() },\n            navigateToTranslationsList: { viewModel.navigateToTranslationsList() },\n            navigateToReadingSelector: { viewModel.navigateToReadingSelectors() },\n            donate: { viewModel.donate() },\n            shareApp: { viewModel.shareApp() },\n            writeReview: { viewModel.writeReview() },\n            contactUs: { viewModel.contactUs() },\n            navigateToDiagnotics: { viewModel.navigateToDiagnotics() },\n            refreshAuthenticationState: { await viewModel.refreshAuthenticationState() },\n            loginAction: { await viewModel.loginToQuranCom() },\n            logoutAction: { await viewModel.logoutFromQuranCom() }\n        )\n    }\n}\n\nprivate struct SettingsRootViewUI: View {\n    // MARK: Internal\n\n    @Binding var appearanceMode: AppearanceMode\n    @Binding var error: Error?\n\n    let audioEnd: String\n    let isAuthenticated: Bool\n    let loggedInUserEmail: String?\n    let openQuranComProfile: AsyncAction\n    let navigateToAudioEndSelector: AsyncAction\n    let navigateToAudioManager: AsyncAction\n    let navigateToTranslationsList: AsyncAction\n    let navigateToReadingSelector: AsyncAction\n    let donate: AsyncAction\n    let shareApp: AsyncAction\n    let writeReview: AsyncAction\n    let contactUs: AsyncAction\n    let navigateToDiagnotics: AsyncAction\n    let refreshAuthenticationState: AsyncAction\n    let loginAction: AsyncAction\n    let logoutAction: AsyncAction\n\n    var body: some View {\n        NoorList {\n            #if QURAN_SYNC\n                NoorBasicSection {\n                    if isAuthenticated {\n                        authenticatedQuranComSection\n                    } else {\n                        unauthenticatedQuranComSection\n                    }\n                }\n            #endif\n\n            NoorBasicSection {\n                VStack {\n                    AppearanceModeSelector(appearanceMode: $appearanceMode)\n                }\n            }\n\n            NoorBasicSection {\n                NoorListItem(\n                    image: .init(.mushafs),\n                    title: .text(l(\"reading.selector.title\")),\n                    accessory: .disclosureIndicator,\n                    action: navigateToReadingSelector\n                )\n            }\n\n            NoorBasicSection {\n                NoorListItem(\n                    image: .init(.audio),\n                    title: .text(l(\"audio.download-play-amount\")),\n                    subtitle: .init(text: audioEnd, location: .trailing),\n                    accessory: .disclosureIndicator,\n                    action: navigateToAudioEndSelector\n                )\n\n                NoorListItem(\n                    image: .init(.downloads),\n                    title: .text(lAndroid(\"audio_manager\")),\n                    accessory: .disclosureIndicator,\n                    action: navigateToAudioManager\n                )\n            }\n\n            NoorBasicSection {\n                NoorListItem(\n                    image: .init(.translation),\n                    title: .text(lAndroid(\"prefs_translations\")),\n                    accessory: .disclosureIndicator,\n                    action: navigateToTranslationsList\n                )\n            }\n\n            NoorBasicSection {\n                NoorListItem(\n                    image: .init(.heart),\n                    title: .text(l(\"setting.donate\")),\n                    accessory: .disclosureIndicator,\n                    action: donate\n                )\n\n                NoorListItem(\n                    image: .init(.share),\n                    title: .text(l(\"setting.share_app\")),\n                    accessory: .disclosureIndicator,\n                    action: shareApp\n                )\n\n                NoorListItem(\n                    image: .init(.star),\n                    title: .text(l(\"setting.write_review\")),\n                    accessory: .disclosureIndicator,\n                    action: writeReview\n                )\n\n                NoorListItem(\n                    image: .init(.mail),\n                    title: .text(l(\"setting.contact_us\")),\n                    accessory: .disclosureIndicator,\n                    action: contactUs\n                )\n            }\n\n            NoorBasicSection {\n                NoorListItem(\n                    image: .init(.debug),\n                    title: .text(l(\"diagnostics.title\")),\n                    accessory: .disclosureIndicator,\n                    action: navigateToDiagnotics\n                )\n            }\n        }\n        .task { await refreshAuthenticationState() }\n        .errorAlert(error: $error)\n    }\n\n    // MARK: Private\n\n    private var unauthenticatedQuranComSection: some View {\n        Group {\n            NoorListItem(\n                image: .init(.profile, color: .secondaryLabel),\n                title: styledText(l(\"setting.quran_account.sign_in\"), fontWeight: .semibold),\n                accessory: .disclosureIndicator,\n                action: loginAction\n            )\n\n            NoorListItem(\n                image: .init(.checkmark, color: .accentColor),\n                title: .text(l(\"setting.quran_account.sync_devices\"))\n            )\n\n            NoorListItem(\n                image: .init(.checkmark, color: .accentColor),\n                title: .text(l(\"setting.quran_account.custom_collections\"))\n            )\n\n            NoorListItem(\n                image: .init(.checkmark, color: .accentColor),\n                title: .text(l(\"setting.quran_account.attach_notes\"))\n            )\n        }\n    }\n\n    private var authenticatedQuranComSection: some View {\n        Group {\n            NoorListItem(\n                image: .init(.profile, color: .secondaryLabel),\n                title: .text(loggedInUserEmail ?? l(\"setting.quran_account.profile\")),\n                accessory: .image(.settings, color: .secondaryLabel),\n                action: openQuranComProfile\n            )\n\n            NoorListItem(\n                image: .init(.signOut, color: .secondaryLabel),\n                title: styledText(l(\"setting.quran_account.sign_out\"), foregroundColor: .red),\n                action: logoutAction\n            )\n        }\n    }\n\n    private func styledText(\n        _ text: String,\n        foregroundColor: Color? = nil,\n        fontWeight: Font.Weight? = nil\n    ) -> MultipartText {\n        let range = text.startIndex ..< text.endIndex\n        return \"\\(text, highlighting: [HighlightingRange(range, foregroundColor: foregroundColor, fontWeight: fontWeight)])\"\n    }\n}\n\nstruct SettingsRootView_Previews: PreviewProvider {\n    struct Container: View {\n        @State var appearanceMode: AppearanceMode\n\n        var body: some View {\n            SettingsRootViewUI(\n                appearanceMode: $appearanceMode,\n                error: .constant(nil),\n                audioEnd: \"Surah\",\n                isAuthenticated: false,\n                loggedInUserEmail: nil,\n                openQuranComProfile: {},\n                navigateToAudioEndSelector: {},\n                navigateToAudioManager: {},\n                navigateToTranslationsList: {},\n                navigateToReadingSelector: {},\n                donate: {},\n                shareApp: {},\n                writeReview: {},\n                contactUs: {},\n                navigateToDiagnotics: {},\n                refreshAuthenticationState: {},\n                loginAction: {},\n                logoutAction: {}\n            )\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        VStack {\n            Container(appearanceMode: .auto)\n        }\n    }\n}\n"
  },
  {
    "path": "Features/SettingsFeature/Sources/SettingsRootViewModel.swift",
    "content": "//\n//  SettingsRootViewModel.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-26.\n//\n\nimport Analytics\nimport AudioDownloadsFeature\nimport AuthenticationClient\nimport Combine\nimport Localization\nimport MobileSync\nimport NoorUI\nimport QuranAudio\nimport QuranAudioKit\nimport ReadingSelectorFeature\nimport SafariServices\nimport SettingsService\nimport TranslationsFeature\nimport UIKit\nimport UIx\nimport VLogging\n\n@MainActor\nfinal class SettingsRootViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    init(\n        analytics: AnalyticsLibrary,\n        reviewService: ReviewService,\n        authenticationClient: (any AuthenticationClient)?,\n        audioDownloadsBuilder: AudioDownloadsBuilder,\n        translationsListBuilder: TranslationsListBuilder,\n        readingSelectorBuilder: ReadingSelectorBuilder,\n        diagnosticsBuilder: DiagnosticsBuilder,\n        quranProfileURL: URL,\n        navigationController: UINavigationController\n    ) {\n        appearanceMode = themeService.appearanceMode\n        audioEnd = audioPreferences.audioEnd\n        self.analytics = analytics\n        self.reviewService = reviewService\n        self.authenticationClient = authenticationClient\n        self.audioDownloadsBuilder = audioDownloadsBuilder\n        self.translationsListBuilder = translationsListBuilder\n        self.readingSelectorBuilder = readingSelectorBuilder\n        self.diagnosticsBuilder = diagnosticsBuilder\n        self.quranProfileURL = quranProfileURL\n        self.navigationController = navigationController\n\n        themeService.appearanceModePublisher.assign(to: &$appearanceMode)\n        audioPreferences.$audioEnd.assign(to: &$audioEnd)\n    }\n\n    // MARK: Internal\n\n    let analytics: AnalyticsLibrary\n    let reviewService: ReviewService\n    let audioDownloadsBuilder: AudioDownloadsBuilder\n    let translationsListBuilder: TranslationsListBuilder\n    let readingSelectorBuilder: ReadingSelectorBuilder\n    let diagnosticsBuilder: DiagnosticsBuilder\n\n    let contactUsService = ContactUsService()\n    let themeService = ThemeService.shared\n    let audioPreferences = AudioPreferences.shared\n\n    weak var navigationController: UINavigationController?\n\n    @Published var audioEnd: AudioEnd\n    @Published var error: Error? = nil\n    @Published var isAuthenticated: Bool = false\n    @Published var loggedInUser: UserInfo? = nil\n\n    var currentUserEmail: String? {\n        loggedInUser?.email\n    }\n\n    @Published var appearanceMode: AppearanceMode {\n        didSet {\n            themeService.appearanceMode = appearanceMode\n        }\n    }\n\n    func navigateToAudioEndSelector() {\n        logger.info(\"Settings: presentAudioEndSelector\")\n        showSingleChoiceSelector(\n            title: l(\"audio.download-play-amount\"),\n            sections: [SingleChoiceSection(\n                header: l(\"audio.download-play-amount.description\"),\n                items: [AudioEnd.juz, .sura, .page, .quran]\n            )],\n            selected: audioPreferences.audioEnd,\n            itemText: { $0.name },\n            onSelection: { [weak self] item in\n                self?.audioPreferences.audioEnd = item\n            }\n        )\n    }\n\n    func navigateToAudioManager() {\n        logger.info(\"Settings: presentAudioDownloads\")\n        let viewController = audioDownloadsBuilder.build()\n        navigationController?.pushViewController(viewController, animated: true)\n    }\n\n    func navigateToTranslationsList() {\n        logger.info(\"Settings: presentTranslationsList\")\n        let viewController = translationsListBuilder.build()\n        navigationController?.pushViewController(viewController, animated: true)\n    }\n\n    func navigateToReadingSelectors() {\n        logger.info(\"Settings: navigateToReadingSelectors\")\n        let viewController = readingSelectorBuilder.build()\n        navigationController?.pushViewController(viewController, animated: true)\n    }\n\n    func shareApp() {\n        logger.info(\"Settings: Share the app.\")\n        let url = URL(validURL: \"https://itunes.apple.com/app/id1118663303\")\n        let appName = \"Quran - by Quran.com - قرآن\"\n\n        navigationController?.share([appName, url])\n    }\n\n    func donate() {\n        logger.info(\"Settings: Open donation page.\")\n        let url = URL(validURL: \"https://give.quran.foundation/ios\")\n        let viewController = SFSafariViewController(url: url)\n        navigationController?.present(viewController, animated: true)\n    }\n\n    func writeReview() {\n        logger.info(\"Settings: Navigate to app store to write a review.\")\n        reviewService.openAppReview()\n    }\n\n    func contactUs() {\n        logger.info(\"Settings: presentContactUs\")\n        let viewController = contactUsService.contactUsController()\n        navigationController?.present(viewController, animated: true)\n    }\n\n    func openQuranComProfile() {\n        logger.info(\"Settings: Open Quran.com profile.\")\n        let viewController = SFSafariViewController(url: quranProfileURL)\n        navigationController?.present(viewController, animated: true)\n    }\n\n    func navigateToDiagnotics() {\n        logger.info(\"Settings: navigateToDiagnotics\")\n        let viewController = diagnosticsBuilder.build(navigationController: navigationController)\n        navigationController?.pushViewController(viewController, animated: true)\n    }\n\n    func refreshAuthenticationState() async {\n        guard let authenticationClient else {\n            isAuthenticated = false\n            loggedInUser = nil\n            return\n        }\n\n        isAuthenticated = await authenticationClient.safelyRestoreState() == .authenticated\n        loggedInUser = isAuthenticated ? await authenticationClient.loggedInUser : nil\n    }\n\n    func loginToQuranCom() async {\n        guard let viewController = navigationController else {\n            return\n        }\n\n        do {\n            let authenticationClient = try requireAuthenticationClient()\n            try await authenticationClient.login(on: viewController)\n            isAuthenticated = true\n            loggedInUser = await authenticationClient.loggedInUser\n        } catch {\n            logger.error(\"Failed to login to Quran.com: \\(error)\")\n            self.error = error\n        }\n    }\n\n    func logoutFromQuranCom() async {\n        do {\n            let authenticationClient = try requireAuthenticationClient()\n            try await authenticationClient.logout()\n            isAuthenticated = false\n            loggedInUser = nil\n        } catch {\n            logger.error(\"Failed to logout from Quran.com: \\(error)\")\n            self.error = error\n        }\n    }\n\n    // MARK: Private\n\n    private let authenticationClient: (any AuthenticationClient)?\n    private let quranProfileURL: URL\n\n    private func requireAuthenticationClient() throws -> any AuthenticationClient {\n        guard let authenticationClient else {\n            throw AuthenticationClientError.clientIsNotAuthenticated(nil)\n        }\n        return authenticationClient\n    }\n\n    private func showSingleChoiceSelector<T: Hashable>(\n        title: String,\n        sections: [SingleChoiceSection<T>],\n        selected: T?,\n        itemText: @escaping (T) -> String,\n        onSelection: @escaping (T) -> Void\n    ) {\n        let viewController = singleChoiceSelector(\n            sections: sections,\n            selected: selected,\n            itemText: itemText,\n            onSelection: { [weak self] item in\n                onSelection(item)\n                self?.navigationController?.popViewController(animated: true)\n            }\n        )\n        viewController.title = title\n        navigationController?.pushViewController(viewController, animated: true)\n    }\n}\n"
  },
  {
    "path": "Features/SettingsFeature/Sources/UIViewController+Share.swift",
    "content": "//\n//  UIViewController+Share.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-10.\n//\n\nimport UIKit\n\nextension UIViewController {\n    func share(_ activityItems: [Any], completion: (() -> Void)? = nil) {\n        let activityViewController = UIActivityViewController(\n            activityItems: activityItems, applicationActivities: nil\n        )\n        activityViewController.completionWithItemsHandler = { _, _, _, _ in\n            completion?()\n        }\n\n        let view = navigationController?.view ?? view\n        let viewBound = view.map { CGRect(x: $0.bounds.midX, y: $0.bounds.midY, width: 0, height: 0) }\n        activityViewController.modalPresentationStyle = .formSheet\n        activityViewController.popoverPresentationController?.permittedArrowDirections = []\n        activityViewController.popoverPresentationController?.sourceView = view\n        activityViewController.popoverPresentationController?.sourceRect = viewBound ?? .zero\n        present(activityViewController, animated: true)\n    }\n}\n"
  },
  {
    "path": "Features/SettingsFeature/Tests/SettingsRootViewModelTests.swift",
    "content": "import Analytics\nimport AppDependencies\nimport AudioDownloadsFeature\nimport AuthenticationClient\nimport BatchDownloader\nimport Foundation\nimport LastPagePersistence\nimport MobileSync\nimport NotePersistence\nimport PageBookmarkPersistence\nimport ReadingSelectorFeature\nimport ReadingService\nimport SettingsService\nimport TranslationsFeature\nimport UIKit\nimport XCTest\n@testable import SettingsFeature\n\n@MainActor\nfinal class SettingsRootViewModelTests: XCTestCase {\n    // MARK: Internal\n\n    func test_refreshAuthenticationState_returnsNotAuthenticated_whenClientIsMissing() async {\n        let sut = makeSUT(authenticationClient: nil)\n\n        await sut.refreshAuthenticationState()\n\n        XCTAssertFalse(sut.isAuthenticated)\n        XCTAssertNil(sut.currentUserEmail)\n    }\n\n    func test_refreshAuthenticationState_returnsRestoredState_whenRestoreSucceeds() async {\n        let client = AuthenticationClientSpy()\n        client.restoreStateResult = .authenticated\n        client.loggedInUserValue = makeUser(email: \"user@example.com\")\n        let sut = makeSUT(authenticationClient: client)\n\n        await sut.refreshAuthenticationState()\n\n        XCTAssertTrue(sut.isAuthenticated)\n        XCTAssertEqual(sut.currentUserEmail, \"user@example.com\")\n        XCTAssertEqual(client.restoreStateCallCount, 1)\n        XCTAssertEqual(client.authenticationStateReads, 0)\n    }\n\n    func test_refreshAuthenticationState_fallsBackToCurrentState_whenRestoreFails() async {\n        let client = AuthenticationClientSpy()\n        client.restoreStateError = NSError(domain: \"test\", code: 1)\n        client.authenticationStateValue = .authenticated\n        client.loggedInUserValue = makeUser(email: \"user@example.com\")\n        let sut = makeSUT(authenticationClient: client)\n\n        await sut.refreshAuthenticationState()\n\n        XCTAssertTrue(sut.isAuthenticated)\n        XCTAssertEqual(sut.currentUserEmail, \"user@example.com\")\n        XCTAssertEqual(client.restoreStateCallCount, 1)\n        XCTAssertEqual(client.authenticationStateReads, 1)\n    }\n\n    func test_login_updatesAuthenticationStateAndEmail() async {\n        let client = AuthenticationClientSpy()\n        client.loggedInUserValue = makeUser(email: \"user@example.com\")\n        let navigationController = UINavigationController()\n        let sut = makeSUT(authenticationClient: client, navigationController: navigationController)\n\n        await sut.loginToQuranCom()\n\n        XCTAssertTrue(sut.isAuthenticated)\n        XCTAssertEqual(sut.currentUserEmail, \"user@example.com\")\n        XCTAssertEqual(client.loginCallCount, 1)\n        XCTAssertTrue(client.lastLoginViewController === navigationController)\n        XCTAssertNil(sut.error)\n    }\n\n    func test_login_setsErrorWhenClientIsMissing() async {\n        let navigationController = UINavigationController()\n        let sut = makeSUT(authenticationClient: nil, navigationController: navigationController)\n\n        await sut.loginToQuranCom()\n\n        assertClientIsNotAuthenticated(sut.error)\n    }\n\n    func test_logout_clearsAuthenticationStateAndEmail() async {\n        let client = AuthenticationClientSpy()\n        client.loggedInUserValue = makeUser(email: \"user@example.com\")\n        let sut = makeSUT(authenticationClient: client)\n        sut.isAuthenticated = true\n        sut.loggedInUser = makeUser(email: \"user@example.com\")\n\n        await sut.logoutFromQuranCom()\n\n        XCTAssertFalse(sut.isAuthenticated)\n        XCTAssertNil(sut.currentUserEmail)\n        XCTAssertEqual(client.logoutCallCount, 1)\n        XCTAssertNil(sut.error)\n    }\n\n    func test_logout_setsErrorWhenClientIsMissing() async {\n        let sut = makeSUT(authenticationClient: nil)\n\n        await sut.logoutFromQuranCom()\n\n        assertClientIsNotAuthenticated(sut.error)\n    }\n\n    // MARK: Private\n\n    private func makeSUT(\n        authenticationClient: (any AuthenticationClient)?,\n        navigationController: UINavigationController = UINavigationController()\n    ) -> SettingsRootViewModel {\n        let container = AppDependenciesStub(authenticationClient: authenticationClient)\n        return SettingsRootViewModel(\n            analytics: AnalyticsSpy(),\n            reviewService: ReviewService(analytics: AnalyticsSpy()),\n            authenticationClient: authenticationClient,\n            audioDownloadsBuilder: AudioDownloadsBuilder(container: container),\n            translationsListBuilder: TranslationsListBuilder(container: container),\n            readingSelectorBuilder: ReadingSelectorBuilder(container: container),\n            diagnosticsBuilder: DiagnosticsBuilder(container: container),\n            quranProfileURL: container.quranProfileURL,\n            navigationController: navigationController\n        )\n    }\n\n    private func assertClientIsNotAuthenticated(_ error: Error?, file: StaticString = #filePath, line: UInt = #line) {\n        guard case .clientIsNotAuthenticated = error as? AuthenticationClientError else {\n            return XCTFail(\"Expected clientIsNotAuthenticated, got \\(String(describing: error))\", file: file, line: line)\n        }\n    }\n}\n\nprivate struct AnalyticsSpy: AnalyticsLibrary {\n    func logEvent(_: String, value _: String) {}\n}\n\nprivate struct AppDependenciesStub: AppDependencies {\n    let authenticationClient: (any AuthenticationClient)?\n\n    var databasesURL: URL { URL(fileURLWithPath: \"/tmp\") }\n    var wordsDatabase: URL { URL(fileURLWithPath: \"/tmp/words.db\") }\n    var appHost: URL { URL(string: \"https://quran.com\")! }\n    var filesAppHost: URL { URL(string: \"https://files.quran.com\")! }\n    var quranProfileURL: URL { URL(string: \"https://quran.com/profile\")! }\n    var logsDirectory: URL { URL(fileURLWithPath: \"/tmp/logs\") }\n    var databasesDirectory: URL { URL(fileURLWithPath: \"/tmp\") }\n    var supportsCloudKit: Bool { false }\n    var downloadManager: DownloadManager { fatalError(\"Unused in tests\") }\n    var analytics: AnalyticsLibrary { AnalyticsSpy() }\n    var readingResources: ReadingResourcesService { fatalError(\"Unused in tests\") }\n    var remoteResources: ReadingRemoteResources? { nil }\n    var lastPagePersistence: LastPagePersistence { fatalError(\"Unused in tests\") }\n    var notePersistence: NotePersistence { fatalError(\"Unused in tests\") }\n    var pageBookmarkPersistence: PageBookmarkPersistence { fatalError(\"Unused in tests\") }\n}\n\nprivate func makeUser(email: String?) -> UserInfo {\n    UserInfo(\n        id: \"1\",\n        firstName: \"Test\",\n        lastName: \"User\",\n        name: \"Test User\",\n        email: email,\n        photoUrl: nil\n    )\n}\n\nprivate final class AuthenticationClientSpy: AuthenticationClient {\n    var restoreStateResult: AuthenticationState = .notAuthenticated\n    var restoreStateError: Error?\n    var authenticationStateValue: AuthenticationState = .notAuthenticated\n    var loggedInUserValue: UserInfo?\n    var loginError: Error?\n    var logoutError: Error?\n    var loginCallCount = 0\n    var logoutCallCount = 0\n    var restoreStateCallCount = 0\n    var authenticationStateReads = 0\n    weak var lastLoginViewController: UIViewController?\n\n    var authenticationState: AuthenticationState {\n        get async {\n            authenticationStateReads += 1\n            return authenticationStateValue\n        }\n    }\n\n    var loggedInUser: UserInfo? {\n        get async { loggedInUserValue }\n    }\n\n    func login(on viewController: UIViewController) async throws {\n        loginCallCount += 1\n        lastLoginViewController = viewController\n        if let loginError {\n            throw loginError\n        }\n    }\n\n    func restoreState() async throws -> AuthenticationState {\n        restoreStateCallCount += 1\n        if let restoreStateError {\n            throw restoreStateError\n        }\n        return restoreStateResult\n    }\n\n    func logout() async throws {\n        logoutCallCount += 1\n        if let logoutError {\n            throw logoutError\n        }\n    }\n\n    func authenticate(request: URLRequest) async throws -> URLRequest {\n        request\n    }\n\n    func getAuthenticationHeaders() async throws -> [String: String] {\n        [:]\n    }\n}\n"
  },
  {
    "path": "Features/TranslationVerseFeature/TranslationVerseBuilder.swift",
    "content": "//\n//  TranslationVerseBuilder.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2022-10-09.\n//  Copyright © 2022 Quran.com. All rights reserved.\n//\n\nimport AppDependencies\nimport MoreMenuFeature\nimport QuranKit\nimport QuranTextKit\nimport TranslationService\nimport TranslationsFeature\nimport UIKit\n\n@MainActor\npublic struct TranslationVerseBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func build(startingVerse: AyahNumber, actions: TranslationVerseActions) -> UIViewController {\n        let dataService = QuranTextDataService(\n            databasesURL: container.databasesURL,\n            quranFileURL: container.quranUthmaniV2Database\n        )\n        let localTranslationsRetriever = LocalTranslationsRetriever(databasesURL: container.databasesURL)\n        let viewModel = TranslationVerseViewModel(startingVerse: startingVerse, localTranslationsRetriever: localTranslationsRetriever, dataService: dataService, actions: actions)\n        let viewController = TranslationVerseViewController(\n            viewModel: viewModel,\n            moreMenuBuilder: MoreMenuBuilder(),\n            translationsSelectionBuilder: TranslationsListBuilder(container: container)\n        )\n        let navigationController = UINavigationController(rootViewController: viewController)\n        return navigationController\n    }\n\n    // MARK: Private\n\n    private let container: AppDependencies\n}\n"
  },
  {
    "path": "Features/TranslationVerseFeature/TranslationVerseView.swift",
    "content": "//\n//  TranslationVerseView.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-02-01.\n//\n\nimport QuranTranslationFeature\nimport SwiftUI\n\nstruct TranslationVerseView: View {\n    @StateObject var viewModel: TranslationVerseViewModel\n\n    var body: some View {\n        ContentTranslationView(viewModel: viewModel.translationViewModel)\n            .themedBackground()\n            .themedForeground()\n            .populateThemeStyle()\n    }\n}\n"
  },
  {
    "path": "Features/TranslationVerseFeature/TranslationVerseViewController.swift",
    "content": "//\n//  TranslationVerseViewController.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2022-10-09.\n//  Copyright © 2022 Quran.com. All rights reserved.\n//\n\nimport Combine\nimport MoreMenuFeature\nimport NoorUI\nimport SwiftUI\nimport TranslationService\nimport TranslationsFeature\nimport UIx\nimport VLogging\n\nclass TranslationVerseViewController: UIHostingController<TranslationVerseView> {\n    // MARK: Lifecycle\n\n    init(\n        viewModel: TranslationVerseViewModel,\n        moreMenuBuilder: MoreMenuBuilder,\n        translationsSelectionBuilder: TranslationsListBuilder\n    ) {\n        self.viewModel = viewModel\n        self.moreMenuBuilder = moreMenuBuilder\n        self.translationsSelectionBuilder = translationsSelectionBuilder\n\n        let viewModel = self.viewModel\n        let view = TranslationVerseView(viewModel: viewModel)\n        super.init(rootView: view)\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Internal\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        configureNavigationBar()\n\n        viewModel.$currentVerse\n            .receive(on: DispatchQueue.main)\n            .sink { [weak self] verse in\n                self?.nextButton?.isEnabled = verse.next != nil\n                self?.previousButton?.isEnabled = verse.previous != nil\n                self?.updateTitle()\n            }\n            .store(in: &cancellables)\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        let noTranslationsSelected = selectedTranslationsPreferences.selectedTranslationIds.isEmpty\n        if firstTime && noTranslationsSelected {\n            presentTranslationsSelection()\n        }\n        firstTime = false\n    }\n\n    // MARK: Private\n\n    private let viewModel: TranslationVerseViewModel\n    private var cancellables: Set<AnyCancellable> = []\n\n    private var nextButton: UIBarButtonItem?\n    private var previousButton: UIBarButtonItem?\n\n    private let moreMenuBuilder: MoreMenuBuilder\n    private let translationsSelectionBuilder: TranslationsListBuilder\n\n    private let selectedTranslationsPreferences = SelectedTranslationsPreferences.shared\n\n    private var firstTime = true\n\n    private func configureNavigationBar() {\n        navigationItem.rightBarButtonItems?.append(\n            UIBarButtonItem(\n                image: UIImage(systemName: \"ellipsis.circle\"),\n                style: .plain,\n                target: self,\n                action: #selector(settingsTapped)\n            )\n        )\n\n        let next = UIBarButtonItem(\n            image: UIImage(systemName: \"chevron.left\"),\n            style: .plain,\n            target: self,\n            action: #selector(nextTapped)\n        )\n        let previous = UIBarButtonItem(\n            image: UIImage(systemName: \"chevron.right\"),\n            style: .plain,\n            target: self,\n            action: #selector(previousTapped)\n        )\n\n        switch view.effectiveUserInterfaceLayoutDirection {\n        case .leftToRight:\n            navigationItem.leftBarButtonItems = [next, previous]\n        case .rightToLeft:\n            navigationItem.leftBarButtonItems = [previous, next]\n        @unknown default:\n            fatalError(\"Unhandled case\")\n        }\n\n        nextButton = next\n        previousButton = previous\n    }\n\n    @objc\n    private func settingsTapped(_ item: UIBarButtonItem) {\n        logger.info(\"Verse Translation: Settings button tapped\")\n        var state = MoreMenuControlsState()\n        state.mode = .alwaysOff\n        state.translationsSelection = .alwaysOn\n        state.wordPointer = .alwaysOff\n        state.orientation = .alwaysOff\n        state.fontSize = .alwaysOn\n        state.twoPages = .alwaysOff\n        state.verticalScrolling = .alwaysOff\n        let viewController = moreMenuBuilder.build(withListener: self, model: MoreMenuModel(isWordPointerActive: false, state: state))\n        presentPopover(viewController, pointingTo: item, permittedArrowDirections: [.up, .down])\n    }\n\n    @objc\n    private func nextTapped() {\n        viewModel.next()\n    }\n\n    @objc\n    private func previousTapped() {\n        viewModel.previous()\n    }\n\n    private func updateTitle() {\n        updateTitle(\n            firstLine: viewModel.currentVerse.sura.localizedName(withNumber: true),\n            secondLine: viewModel.currentVerse.localizedAyahNumber\n        )\n    }\n\n    private func updateTitle(firstLine: String, secondLine: String) {\n        let titleView = navigationItem.titleView as? TwoLineNavigationTitleView ?? TwoLineNavigationTitleView(\n            firstLineFont: .systemFont(ofSize: 15, weight: .light),\n            secondLineFont: .boldSystemFont(ofSize: 15)\n        )\n        titleView.firstLine = firstLine\n        titleView.secondLine = secondLine\n        if navigationItem.titleView == nil {\n            navigationItem.titleView = titleView\n        }\n    }\n}\n\nextension TranslationVerseViewController: MoreMenuListener {\n    private class TranslationsSelectionNavigationController: BaseNavigationController {}\n\n    func onTranslationsSelectionsTapped() {\n        dismiss(animated: true) {\n            self.presentTranslationsSelection()\n        }\n    }\n\n    private func presentTranslationsSelection() {\n        let controller = translationsSelectionBuilder.build()\n        let navigationController = TranslationsSelectionNavigationController(rootViewController: controller)\n        controller.navigationItem.leftBarButtonItem = UIBarButtonItem(\n            image: UIImage(systemName: \"x.circle\"),\n            style: .done,\n            target: self,\n            action: #selector(onTranslationsSelectionDoneTapped)\n        )\n        present(navigationController, animated: true, completion: nil)\n    }\n\n    @objc\n    private func onTranslationsSelectionDoneTapped() {\n        logger.info(\"Quran: translations selection dismissed\")\n        dismiss(animated: true)\n    }\n\n    func onIsWordPointerActiveUpdated(to isWordPointerActive: Bool) {\n        fatalError(\"Not supported in the translation verse screen.\")\n    }\n}\n"
  },
  {
    "path": "Features/TranslationVerseFeature/TranslationVerseViewModel.swift",
    "content": "//\n//  TranslationVerseViewModel.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2022-10-09.\n//  Copyright © 2022 Quran.com. All rights reserved.\n//\n\nimport AnnotationsService\nimport Combine\nimport QuranKit\nimport QuranTextKit\nimport QuranTranslationFeature\nimport TranslationService\nimport VLogging\n\npublic struct TranslationVerseActions {\n    // MARK: Lifecycle\n\n    public init(updateCurrentVerseTo: @escaping (AyahNumber) -> Void) {\n        self.updateCurrentVerseTo = updateCurrentVerseTo\n    }\n\n    // MARK: Internal\n\n    let updateCurrentVerseTo: (AyahNumber) -> Void\n}\n\n@MainActor\nclass TranslationVerseViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    init(startingVerse: AyahNumber, localTranslationsRetriever: LocalTranslationsRetriever, dataService: QuranTextDataService, actions: TranslationVerseActions) {\n        currentVerse = startingVerse\n        self.dataService = dataService\n        self.actions = actions\n\n        let noOpHighlightingService = QuranHighlightsService()\n        translationViewModel = ContentTranslationViewModel(localTranslationsRetriever: localTranslationsRetriever, dataService: dataService, highlightsService: noOpHighlightingService)\n        translationViewModel.showHeaderAndFooter = false\n        translationViewModel.verses = [startingVerse]\n    }\n\n    // MARK: Internal\n\n    let translationViewModel: ContentTranslationViewModel\n\n    @Published var currentVerse: AyahNumber {\n        didSet {\n            translationViewModel.verses = [currentVerse]\n            actions.updateCurrentVerseTo(currentVerse)\n        }\n    }\n\n    func next() {\n        logger.info(\"Verse Translation: moving to next verse currentVerse:\\(currentVerse)\")\n        if let next = currentVerse.next {\n            currentVerse = next\n        }\n    }\n\n    func previous() {\n        logger.info(\"Verse Translation: moving to previous verse currentVerse:\\(currentVerse)\")\n        if let previous = currentVerse.previous {\n            currentVerse = previous\n        }\n    }\n\n    // MARK: Private\n\n    private let dataService: QuranTextDataService\n    private let actions: TranslationVerseActions\n}\n"
  },
  {
    "path": "Features/TranslationsFeature/TranslationItem.swift",
    "content": "import Foundation\nimport QuranText\n\n@dynamicMemberLookup\nstruct TranslationItem: Equatable, Sendable, Identifiable {\n    enum DownloadingProgress: Hashable {\n        case notDownloading\n        case downloading(Double)\n        case needsUpgrade\n    }\n\n    // MARK: Internal\n\n    let info: Translation\n    let progress: DownloadingProgress\n\n    var id: Translation.ID { info.id }\n\n    subscript<T>(dynamicMember keyPath: KeyPath<Translation, T>) -> T {\n        info[keyPath: keyPath]\n    }\n}\n\nextension Translation {\n    var localizedLanguage: String? {\n        Locale.localizedLanguage(forCode: languageCode)\n    }\n}\n\nextension Locale {\n    static func localizedLanguage(forCode code: String) -> String? {\n        Locale(identifier: code).localizedString(forLanguageCode: code)\n    }\n}\n"
  },
  {
    "path": "Features/TranslationsFeature/TranslationsListBuilder.swift",
    "content": "//\n//  TranslationsListBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/7/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AppDependencies\nimport TranslationService\nimport UIKit\n\n@MainActor\npublic struct TranslationsListBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func build() -> UIViewController {\n        let repository = TranslationsRepository(databasesURL: container.databasesURL, baseURL: container.appHost)\n        let downloader = container.downloadManager\n        let viewModel = TranslationsListViewModel(\n            analytics: container.analytics,\n            translationsRepository: repository,\n            localTranslationsRetriever: LocalTranslationsRetriever(databasesURL: container.databasesURL),\n            deleter: TranslationDeleter(databasesURL: container.databasesURL),\n            downloader: TranslationsDownloader(downloader: downloader)\n        )\n\n        let viewController = TranslationsViewController(viewModel: viewModel)\n        return viewController\n    }\n\n    // MARK: Internal\n\n    let container: AppDependencies\n}\n"
  },
  {
    "path": "Features/TranslationsFeature/TranslationsListView.swift",
    "content": "//\n//  TranslationsListView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-02.\n//\n\nimport Localization\nimport NoorUI\nimport QuranText\nimport SwiftUI\nimport UIx\nimport Utilities\n\nstruct TranslationsListView: View {\n    @StateObject var viewModel: TranslationsListViewModel\n\n    var body: some View {\n        TranslationsListViewUI(\n            editMode: $viewModel.editMode,\n            error: $viewModel.error,\n            loading: viewModel.loading,\n            selectedTranslations: viewModel.selectedTranslations,\n            downloadedTranslations: viewModel.downloadedTranslations,\n            availableTranslations: viewModel.availableTranslations,\n            selectAction: { await viewModel.selectTranslation($0) },\n            deselectAction: { await viewModel.deselectTranslation($0) },\n            downloadAction: { await viewModel.startDownloading($0) },\n            cancelAction: { await viewModel.cancelDownloading($0) },\n            deleteAction: { await viewModel.deleteTranslation($0) },\n            moveSelectedItemsAction: viewModel.moveSelectedTranslations,\n            start: { await viewModel.start() },\n            refresh: { await viewModel.refresh() }\n        )\n    }\n}\n\nprivate struct TranslationsListViewUI: View {\n    @Binding var editMode: EditMode\n    @Binding var error: Error?\n    let loading: Bool\n\n    let selectedTranslations: [TranslationItem]\n    let downloadedTranslations: [TranslationItem]\n    let availableTranslations: [TranslationItem]\n\n    let selectAction: AsyncItemAction<TranslationItem>\n    let deselectAction: AsyncItemAction<TranslationItem>\n\n    let downloadAction: AsyncItemAction<TranslationItem>\n    let cancelAction: AsyncItemAction<TranslationItem>\n\n    let deleteAction: AsyncItemAction<TranslationItem>\n    let moveSelectedItemsAction: (IndexSet, Int) -> Void\n\n    let start: @Sendable () async -> Void\n    let refresh: @Sendable () async -> Void\n\n    var body: some View {\n        NoorList {\n            if loading {\n                LoadingView()\n            }\n\n            TranslationsListSection(\n                title: l(\"translation.selectedTranslations\"),\n                items: selectedTranslations,\n                listItem: { item in\n                    listItem(item, downloaded: true, image: NoorSystemImage.checkmark_checked) {\n                        await deselectAction(item)\n                    }\n                },\n                onDelete: { await deleteAction($0) },\n                onMove: moveSelectedItemsAction\n            )\n\n            TranslationsListSection(\n                title: lAndroid(\"downloaded_translations\"),\n                items: downloadedTranslations,\n                listItem: { item in\n                    listItem(item, downloaded: true, image: NoorSystemImage.checkmark_unchecked) {\n                        await selectAction(item)\n                    }\n                },\n                onDelete: { await deleteAction($0) },\n                onMove: nil\n            )\n\n            ForEach(availableTranslationsByLanguage, id: \\.languageCode) { languageCode, translations in\n                TranslationsListSection(\n                    title: Locale.localizedLanguage(forCode: languageCode),\n                    items: translations,\n                    listItem: { item in\n                        listItem(item, downloaded: false)\n                    },\n                    onDelete: nil,\n                    onMove: nil\n                )\n            }\n        }\n        .refreshable { await refresh() }\n        .task { await start() }\n        .errorAlert(error: $error)\n        .environment(\\.editMode, $editMode)\n    }\n\n    var availableTranslationsByLanguage: [(languageCode: String, translations: [TranslationItem])] {\n        let currentLanguageCode = Locale.current.languageCode\n        let englishCode = \"en\"\n        let arabicCode = \"ar\"\n\n        let comparer = MultiPredicateComparer<String>(increasingOrderPredicates: [\n            { lhs, _ in lhs == currentLanguageCode },\n            { lhs, _ in lhs == arabicCode },\n            { lhs, _ in lhs == englishCode },\n            { lhs, rhs in lhs < rhs },\n        ])\n\n        let languageCodes = Set(availableTranslations.map(\\.languageCode))\n            .sorted { comparer.areInIncreasingOrder(lhs: $0, rhs: $1) }\n\n        return languageCodes.map { languageCode in\n            let translations = availableTranslations\n                .filter { $0.info.languageCode == languageCode }\n                .sorted { $0.info < $1.info }\n            return (languageCode, translations)\n        }\n    }\n\n    func accessory(_ item: TranslationItem, downloaded: Bool) -> NoorListItem.Accessory? {\n        if editMode == .active {\n            return nil\n        }\n\n        switch item.progress {\n        case .notDownloading:\n            if downloaded {\n                return nil\n            } else {\n                return .download(.download) { await downloadAction(item) }\n            }\n        case .downloading(let progress):\n            let type = progress < 0.001 ? DownloadType.pending : .downloading(progress: progress)\n            return .download(type) { await cancelAction(item) }\n        case .needsUpgrade:\n            return .download(.download) { await downloadAction(item) }\n        }\n    }\n\n    func listItem(\n        _ item: TranslationItem,\n        downloaded: Bool,\n        image: NoorSystemImage? = nil,\n        action: AsyncAction? = nil\n    ) -> NoorListItem {\n        let image = editMode == .active ? nil : image\n        let action = editMode == .active ? nil : action\n        return NoorListItem(\n            image: image.map { .init($0) },\n            heading: downloaded ? item.localizedLanguage : nil,\n            title: .text(item.displayName),\n            subtitle: subtitle(of: item.info),\n            accessory: accessory(item, downloaded: downloaded),\n            action: action\n        )\n    }\n\n    func subtitle(of translation: Translation) -> NoorListItem.Subtitle? {\n        if let translatorDisplayName = translation.translatorDisplayName, !translatorDisplayName.isEmpty {\n            return .init(\n                label: l(\"translation.translator\"),\n                text: translatorDisplayName,\n                location: .bottom\n            )\n        } else {\n            return nil\n        }\n    }\n}\n\nprivate struct TranslationsListSection<ListItem: View>: View {\n    let title: String?\n    let items: [TranslationItem]\n    let listItem: (TranslationItem) -> ListItem\n    let onDelete: AsyncItemAction<TranslationItem>?\n    let onMove: ((IndexSet, Int) -> Void)?\n\n    var body: some View {\n        NoorSection(title: title, items) { item in\n            listItem(item)\n        }\n        .onDelete(action: onDelete)\n        .onMove(action: onMove)\n    }\n}\n\nstruct TranslationsListView_Previews: PreviewProvider {\n    struct Container: View {\n        @State var editMode: EditMode = .inactive\n        @State var error: Error? = nil\n        @State var loading = true\n\n        @State var selected = [\n            item(1, language: \"ar\", progress: .needsUpgrade),\n            item(2, language: \"en\", progress: .notDownloading),\n        ]\n\n        @State var downloaded = [\n            item(3, language: \"am\", progress: .notDownloading),\n            item(4, language: \"fr\", progress: .notDownloading),\n        ]\n\n        @State var available = [\n            item(5, language: \"tr\", progress: .notDownloading),\n            item(6, language: \"ur\", progress: .downloading(0.1)),\n            item(7, language: \"vi\", progress: .downloading(0)),\n        ]\n\n        var body: some View {\n            VStack {\n                Button {\n                    withAnimation {\n                        if editMode == .inactive {\n                            editMode = .active\n                        } else {\n                            editMode = .inactive\n                        }\n                    }\n                } label: {\n                    Text(editMode == .inactive ? \"Edit\" : \"Done\")\n                }\n\n                TranslationsListViewUI(\n                    editMode: $editMode,\n                    error: $error,\n                    loading: loading,\n                    selectedTranslations: selected,\n                    downloadedTranslations: downloaded,\n                    availableTranslations: available,\n                    selectAction: { item in\n                        withAnimation {\n                            downloaded.remove(at: downloaded.firstIndex(of: item)!)\n                            selected.append(item)\n                        }\n                    },\n                    deselectAction: { item in\n                        withAnimation {\n                            selected.remove(at: selected.firstIndex(of: item)!)\n                            downloaded.append(item)\n                        }\n                    },\n                    downloadAction: { _ in },\n                    cancelAction: { _ in },\n                    deleteAction: { item in\n                        selected = selected.filter { item != $0 }\n                        downloaded = downloaded.filter { item != $0 }\n                    },\n                    moveSelectedItemsAction: { source, destination in\n                        selected.move(fromOffsets: source, toOffset: destination)\n                    },\n                    start: { @MainActor in\n                        try! await Task.sleep(nanoseconds: 3_000_000_000)\n                        loading = false\n                    },\n                    refresh: { try! await Task.sleep(nanoseconds: 3_000_000_000) }\n                )\n            }\n        }\n\n        static func item(\n            _ id: Int,\n            language: String,\n            progress: TranslationItem.DownloadingProgress\n        ) -> TranslationItem {\n            TranslationItem(\n                info: Translation(\n                    id: id,\n                    displayName: \"Name \\(id)\",\n                    translator: \"Translator \\(id)\",\n                    translatorForeign: nil,\n                    fileURL: URL(validURL: \"quran.com\"),\n                    fileName: \"\\(id).db\",\n                    languageCode: language,\n                    version: 1\n                ),\n                progress: progress\n            )\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        VStack {\n            Container()\n                .accentColor(Color.red)\n        }\n    }\n}\n"
  },
  {
    "path": "Features/TranslationsFeature/TranslationsListViewModel.swift",
    "content": "//\n//  TranslationsListViewModel.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-04.\n//\n\nimport Analytics\nimport BatchDownloader\nimport Combine\nimport Crashing\nimport Foundation\nimport QuranText\nimport SwiftUI\nimport TranslationService\nimport Utilities\nimport VLogging\n\n@MainActor\nfinal class TranslationsListViewModel: ObservableObject {\n    // MARK: Lifecycle\n\n    init(\n        analytics: AnalyticsLibrary,\n        translationsRepository: TranslationsRepository,\n        localTranslationsRetriever: LocalTranslationsRetriever,\n        deleter: TranslationDeleter,\n        downloader: TranslationsDownloader\n    ) {\n        self.analytics = analytics\n        self.translationsRepository = translationsRepository\n        self.localTranslationsRetriever = localTranslationsRetriever\n        self.deleter = deleter\n        self.downloader = downloader\n\n        let downloadsObserver = DownloadsObserver(\n            extractKey: { [weak self] in self?.translations.firstMatches($0) },\n            showError: { [weak self] error in self?.error = error }\n        )\n        self.downloadsObserver = downloadsObserver\n\n        selectedTranslationsPreferences.$selectedTranslationIds\n            .prepend(selectedTranslationsPreferences.selectedTranslationIds)\n            .receive(on: DispatchQueue.main)\n            .sink { [weak self] in self?.selectedTranslationIds = $0 }\n            .store(in: &cancellables)\n    }\n\n    // MARK: Internal\n\n    @Published var editMode: EditMode = .inactive\n    @Published var error: Error? = nil\n    @Published var loading = true\n\n    var selectedTranslations: [TranslationItem] {\n        selectedTranslationIds\n            .map { id in translations.first { $0.id == id } }\n            .compactMap { $0.map(translationItem) }\n    }\n\n    var downloadedTranslations: [TranslationItem] {\n        translations\n            .filter { $0.isDownloaded && !selectedTranslationIds.contains($0.id) }\n            .sorted()\n            .map(translationItem)\n    }\n\n    var availableTranslations: [TranslationItem] {\n        translations\n            .filter { !$0.isDownloaded }\n            .map(translationItem)\n    }\n\n    func start() async {\n        async let downloads: () = observeRunningDownloads()\n        async let progress: () = observeProgressChanges()\n        async let translations: () = loadTranslations()\n        _ = await [downloads, progress, translations]\n    }\n\n    func refresh() async {\n        logger.info(\"Translations: userRequestedRefresh\")\n        do {\n            try await loadFromServer()\n        } catch {\n            self.error = error\n        }\n    }\n\n    func moveSelectedTranslations(at indexSet: IndexSet, to destination: Int) {\n        selectedTranslationsPreferences.selectedTranslationIds.move(fromOffsets: indexSet, toOffset: destination)\n    }\n\n    func selectTranslation(_ translation: TranslationItem) async {\n        selectedTranslationsPreferences.select(translation.id)\n        logger.info(\"Translations: translation \\(translation.id) selected\")\n    }\n\n    func deselectTranslation(_ translation: TranslationItem) async {\n        selectedTranslationsPreferences.deselect(translation.id)\n        logger.info(\"Translations: translation \\(translation.id) deselected\")\n    }\n\n    func startDownloading(_ item: TranslationItem) async {\n        let translation = item.info\n        logger.info(\"Translations: start downloading translation \\(translation.id)\")\n        analytics.downloading(translation: translation)\n        progress[translation] = 0\n\n        do {\n            let response = try await downloader.download(translation)\n            await downloadsObserver?.observe([response])\n        } catch {\n            progress.removeValue(forKey: translation)\n            crasher.recordError(error, reason: \"Failed to start the translation download\")\n            self.error = error\n        }\n    }\n\n    func cancelDownloading(_ item: TranslationItem) async {\n        let translation = item.info\n        logger.info(\"Translations: cancel downloading \\(translation.id)\")\n        let download = downloadsObserver?.runningDownloads.firstMatches(translation)\n        await download?.cancel()\n    }\n\n    func deleteTranslation(_ item: TranslationItem) async {\n        logger.info(\"Translations: deleting translation \\(item.id)\")\n        analytics.deleting(translation: item.info)\n        await cancelDownloading(item)\n\n        do {\n            let updatedTranslation = try await deleter.deleteTranslation(item.info)\n            // replace existing translation\n            if let index = translations.firstIndex(of: item.info) {\n                translations[index] = updatedTranslation\n            }\n        } catch {\n            crasher.recordError(error, reason: \"Failed to delete translation \\(item.id)\")\n            self.error = error\n        }\n    }\n\n    // MARK: Private\n\n    private let analytics: AnalyticsLibrary\n    private let translationsRepository: TranslationsRepository\n    private let localTranslationsRetriever: LocalTranslationsRetriever\n    private let deleter: TranslationDeleter\n    private let downloader: TranslationsDownloader\n    private let selectedTranslationsPreferences = SelectedTranslationsPreferences.shared\n    private var downloadsObserver: DownloadsObserver<Translation>?\n    private var cancellables = Set<AnyCancellable>()\n\n    @Published private var translations: [Translation] = []\n    @Published private var selectedTranslationIds: [Translation.ID] = []\n    @Published private var progress: [Translation: Double] = [:]\n\n    private func translationItem(_ translation: Translation) -> TranslationItem {\n        TranslationItem(\n            info: translation,\n            progress: progress[translation].map { .downloading($0) } ?? .notDownloading\n        )\n    }\n\n    private func loadTranslations() async {\n        do {\n            try await loadLocalTranslations()\n            try await loadFromServer()\n        } catch {\n            self.error = error\n        }\n        withAnimation {\n            loading = false\n        }\n    }\n\n    private func loadLocalTranslations() async throws {\n        let translations = try await localTranslationsRetriever.getLocalTranslations()\n        self.translations = translations\n    }\n\n    private func loadFromServer() async throws {\n        try await translationsRepository.downloadAndSyncTranslations()\n        try await loadLocalTranslations()\n    }\n\n    private func observeRunningDownloads() async {\n        let responses = await downloader.runningTranslationDownloads()\n        await downloadsObserver?.observe(Set(responses))\n    }\n\n    private func observeProgressChanges() async {\n        guard let downloadsObserver else {\n            return\n        }\n        for await newValue in downloadsObserver.progressPublisher.values() {\n            let oldValue = progress\n\n            let newKeys = Set(newValue.keys)\n            let oldKeys = Set(oldValue.keys)\n            // if a download completed\n            let addedKeys = oldKeys.subtracting(newKeys)\n            if !addedKeys.isEmpty {\n                do {\n                    try await loadLocalTranslations()\n\n                    // select newly downloaded translation\n                    if let addedTranslation = addedKeys.first {\n                        selectedTranslationsPreferences.select(addedTranslation.id)\n                    }\n                } catch {\n                    crasher.recordError(error, reason: \"Failed to reload local translations\")\n                    self.error = error\n                }\n            }\n\n            progress = newValue\n        }\n    }\n}\n\nprivate extension AnalyticsLibrary {\n    func downloading(translation: Translation) {\n        logEvent(\"TranslationsDownloadingId\", value: translation.id.description)\n        logEvent(\"TranslationsDownloadingName\", value: translation.displayName)\n        logEvent(\"TranslationsDownloadingLanguage\", value: translation.languageCode)\n    }\n\n    func deleting(translation: Translation) {\n        logEvent(\"TranslationsDeletionId\", value: translation.id.description)\n        logEvent(\"TranslationsDeletionName\", value: translation.displayName)\n        logEvent(\"TranslationsDeletionLanguage\", value: translation.languageCode)\n    }\n}\n"
  },
  {
    "path": "Features/TranslationsFeature/TranslationsViewController.swift",
    "content": "//\n//  TranslationsViewController.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-07.\n//\n\nimport Localization\nimport SwiftUI\nimport UIKit\nimport UIx\n\nfinal class TranslationsViewController: UIHostingController<TranslationsListView> {\n    // MARK: Lifecycle\n\n    init(viewModel: TranslationsListViewModel) {\n        self.viewModel = viewModel\n        super.init(rootView: TranslationsListView(viewModel: viewModel))\n\n        initialize()\n    }\n\n    @available(*, unavailable)\n    @MainActor\n    dynamic required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Private\n\n    private var editController: EditController?\n    private let viewModel: TranslationsListViewModel\n\n    private var currentEditMode: EditMode? {\n        if viewModel.downloadedTranslations.isEmpty && viewModel.selectedTranslations.isEmpty {\n            return nil\n        }\n        return viewModel.editMode\n    }\n\n    private func initialize() {\n        title = lAndroid(\"prefs_translations\")\n\n        editController = EditController(\n            navigationItem: navigationItem,\n            reload: viewModel.objectWillChange.eraseToAnyPublisher(),\n            editMode: Binding(\n                get: { [weak self] in self?.currentEditMode },\n                set: { [weak self] value in self?.viewModel.editMode = value ?? .inactive }\n            )\n        )\n    }\n}\n"
  },
  {
    "path": "Features/WhatsNewFeature/AppWhatsNew.swift",
    "content": "//\n//  AppWhatsNew.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 10/25/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport Localization\nimport UIKit\nimport WhatsNewKit\n\nstruct AppWhatsNew: Decodable {\n    let versions: [WhatsNewVersion]\n}\n\nstruct WhatsNewVersion: Decodable {\n    let version: String\n    let items: [WhatsNewItem]\n}\n\nstruct WhatsNewItem: Decodable {\n    // MARK: Internal\n\n    let title: String\n    let subtitle: String\n    let image: String\n\n    var whatsNewItem: WhatsNew.Item {\n        let image: UIImage?\n        image = UIImage.symbol(self.image, withConfiguration: UIImage.SymbolConfiguration(weight: .light))\n        return .init(\n            title: l(title),\n            subtitle: subtitleText,\n            image: image ?? UIColor.clear.image()\n        )\n    }\n\n    // MARK: Private\n\n    // Use %%{table}:{key}%% to use a different localization within (e.g. %%Readers:qari_muaiqly_haramain_gapless%%)\n    private var subtitleText: String {\n        let text = l(subtitle)\n        return text.replacingOccurrences(matchingPattern: \"\\\\%\\\\%(.+?)\\\\%\\\\%\") { substring in\n            localizeText(substring)\n        }\n    }\n\n    private func localizeText(_ text: String) -> String {\n        let components = text.replacingOccurrences(of: \"%%\", with: \"\")\n            .components(separatedBy: \":\")\n        return l(components[1], table: Table(rawValue: components[0])!)\n    }\n}\n"
  },
  {
    "path": "Features/WhatsNewFeature/AppWhatsNewController.swift",
    "content": "//\n//  AppWhatsNewController.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 10/25/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport Analytics\nimport Localization\nimport NoorUI\nimport UIKit\nimport VLogging\nimport WhatsNewKit\n\n@MainActor\npublic class AppWhatsNewController {\n    // MARK: Lifecycle\n\n    public init(analytics: AnalyticsLibrary) {\n        self.analytics = analytics\n    }\n\n    // MARK: Public\n\n    public func presentWhatsNewIfNeeded(from parent: UIViewController) {\n        let lastSeenVersion = store.lastSeenVersion\n\n        // TODO: Use async/await\n        DispatchQueue.global().async {\n            let whatsNew = self.whatsNew()\n            let versions = self.whatsNewItems(after: lastSeenVersion, whatsNew: whatsNew)\n            if !versions.isEmpty {\n                DispatchQueue.main.async {\n                    self.present(versions, in: parent)\n                }\n            } else {\n                logger.info(\"Ignoring whats new\")\n            }\n        }\n    }\n\n    // MARK: Private\n\n    private let analytics: AnalyticsLibrary\n    private let store = AppWhatsNewVersionStore()\n\n    private func present(_ versions: [WhatsNewVersion], in parent: UIViewController) {\n        let whatsNewItems = versions.flatMap(\\.items).map(\\.whatsNewItem)\n\n        let whatsNew = WhatsNew(\n            title: l(\"new.title\"),\n            items: whatsNewItems\n        )\n\n        // custom whats new configuration\n        var configuration = WhatsNewViewController.Configuration()\n\n        configuration.completionButton.title = l(\"new.action\")\n        configuration.completionButton.action = .custom { vc in\n            vc.dismiss(animated: true)\n            logger.info(\"WhatsNew continue button tapped\")\n        }\n        configuration.titleView.titleMode = .scrolls\n\n        configuration.tintColor = .appIdentity\n        configuration.backgroundColor = .systemBackground\n        configuration.titleView.titleColor = .label\n        configuration.itemsView.titleColor = .label\n        configuration.itemsView.subtitleColor = .secondaryLabel\n        configuration.itemsView.titleFont = .preferredFont(forTextStyle: .headline)\n        configuration.itemsView.subtitleFont = .preferredFont(forTextStyle: .callout)\n        configuration.itemsView.imageSize = .fixed(height: 30)\n\n        // Initialize WhatsNewViewController with WhatsNew\n        if let whatsNewViewController = WhatsNewViewController(\n            whatsNew: whatsNew,\n            configuration: configuration,\n            versionStore: store\n        ) {\n            analytics.presentWhatsNew(versions: versions.map(\\.version))\n            parent.present(whatsNewViewController, animated: true)\n        }\n    }\n\n    private nonisolated func whatsNewItems(after lastSeen: String?, whatsNew: AppWhatsNew) -> [WhatsNewVersion] {\n        guard let lastSeen else {\n            return whatsNew.versions\n        }\n        return whatsNew.versions.filter { $0.version.compare(lastSeen, options: .numeric) == .orderedDescending }\n    }\n\n    private nonisolated func whatsNew() -> AppWhatsNew {\n        let url = Bundle.module.url(forResource: \"whats-new.plist\", withExtension: \"\")!\n\n        let data = try! Data(contentsOf: url) // swiftlint:disable:this force_try\n        let decoder = PropertyListDecoder()\n        let appWhatsNew = try! decoder.decode(AppWhatsNew.self, from: data) // swiftlint:disable:this force_try\n\n        return appWhatsNew\n    }\n}\n\nprivate extension AnalyticsLibrary {\n    func presentWhatsNew(versions: [String]) {\n        logEvent(\"PresentingWhatsNew\", value: versions.joined(separator: \",\"))\n    }\n}\n"
  },
  {
    "path": "Features/WhatsNewFeature/AppWhatsNewVersionStore.swift",
    "content": "//\n//  AppWhatsNewVersionStore.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 10/25/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport Preferences\nimport WhatsNewKit\n\n/// The InMemoryWhatsNewVersionStore\nfinal class AppWhatsNewVersionStore: WhatsNewVersionStore {\n    // MARK: Public\n\n    public func has(version: WhatsNew.Version) -> Bool {\n        false\n    }\n\n    // MARK: Internal\n\n    @Preference(whatsNewVersion)\n    var lastSeenVersion: String?\n\n    func set(version: WhatsNew.Version) {\n        lastSeenVersion = version.description\n    }\n\n    // MARK: Private\n\n    private static let whatsNewVersion = PreferenceKey<String?>(key: \"whats-new.seen-version\", defaultValue: nil)\n}\n"
  },
  {
    "path": "Features/WhatsNewFeature/whats-new.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>versions</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>version</key>\n\t\t\t<string>2.4.5</string>\n\t\t\t<key>items</key>\n\t\t\t<array>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>title</key>\n\t\t\t\t\t<string>new.audio_upgrades</string>\n\t\t\t\t\t<key>subtitle</key>\n\t\t\t\t\t<string>new.audio_upgrades.details</string>\n\t\t\t\t\t<key>image</key>\n\t\t\t\t\t<string>speedometer</string>\n\t\t\t\t</dict>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>title</key>\n\t\t\t\t\t<string>new.personalization</string>\n\t\t\t\t\t<key>subtitle</key>\n\t\t\t\t\t<string>new.personalization.details</string>\n\t\t\t\t\t<key>image</key>\n\t\t\t\t\t<string>paintpalette.fill</string>\n\t\t\t\t</dict>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>title</key>\n\t\t\t\t\t<string>new.library_navigation</string>\n\t\t\t\t\t<key>subtitle</key>\n\t\t\t\t\t<string>new.library_navigation.details</string>\n\t\t\t\t\t<key>image</key>\n\t\t\t\t\t<string>book.fill</string>\n\t\t\t\t</dict>\n\t\t\t\t<dict>\n\t\t\t\t\t<key>title</key>\n\t\t\t\t\t<string>new.reciters</string>\n\t\t\t\t\t<key>subtitle</key>\n\t\t\t\t\t<string>new.reciters.details</string>\n\t\t\t\t\t<key>image</key>\n\t\t\t\t\t<string>mic.fill</string>\n\t\t\t\t</dict>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Features/WordPointerFeature/WordPointerBuilder.swift",
    "content": "//\n//  WordPointerBuilder.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/13/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport AppDependencies\nimport WordTextService\n\n@MainActor\npublic struct WordPointerBuilder {\n    // MARK: Lifecycle\n\n    public init(container: AppDependencies) {\n        self.container = container\n    }\n\n    // MARK: Public\n\n    public func build(withListener listener: WordPointerListener) -> WordPointerViewController {\n        let viewModel = WordPointerViewModel(service: WordTextService(fileURL: container.wordsDatabase))\n        let viewController = WordPointerViewController(viewModel: viewModel)\n        viewModel.listener = listener\n        return viewController\n    }\n\n    // MARK: Private\n\n    private let container: AppDependencies\n}\n"
  },
  {
    "path": "Features/WordPointerFeature/WordPointerViewController.swift",
    "content": "//\n//  WordPointerViewController.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/13/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport NoorUI\nimport Popover_OC\nimport UIKit\nimport UIx\nimport VLogging\n\npublic final class WordPointerViewController: UIViewController {\n    // MARK: Lifecycle\n\n    init(viewModel: WordPointerViewModel) {\n        self.viewModel = viewModel\n        super.init(nibName: nil, bundle: nil)\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Public\n\n    override public func loadView() {\n        let imageView = UIImageView()\n        imageView.image = NoorImage.pointer.uiImage.withRenderingMode(.alwaysTemplate)\n\n        imageView.layer.shadowColor = UIColor.systemGray.cgColor\n        imageView.layer.shadowOpacity = 0.6\n        imageView.layer.shadowRadius = 3\n        imageView.layer.shadowOffset = CGSize(width: 1, height: 1)\n\n        pointer = UIView()\n\n        pointer.addAutoLayoutSubview(imageView)\n        imageView.vc.center()\n\n        let view = ByPassTouchesView()\n        view.catchTouchesView = pointer\n        view.isHidden = true\n\n        view.addAutoLayoutSubview(pointer)\n        pointer.vc.size(by: 44)\n        pointerTop = pointer.vc.top().constraint\n        pointerLeft = pointer.vc.left().constraint\n\n        // magnifying glass\n        magnifyingGlass = MagnifyingGlass()\n        magnifyingGlass.frame = CGRect(x: 0, y: 0, width: 100, height: 100)\n        magnifyingGlass.isHidden = true\n        view.addSubview(magnifyingGlass)\n\n        self.view = view\n    }\n\n    override public func viewDidLoad() {\n        super.viewDidLoad()\n\n        let panGesture = UIPanGestureRecognizer(target: self, action: #selector(onPanned(_:)))\n        view.addGestureRecognizer(panGesture)\n    }\n\n    // MARK: - Actions\n\n    public func hideWordPointer(completion: @escaping () -> Void) {\n        animateOut(completion: completion)\n    }\n\n    public func showWordPointer(referenceView: UIView) {\n        animateIn(referenceView: referenceView)\n    }\n\n    // MARK: - Layout\n\n    override public func viewDidLayoutSubviews() {\n        super.viewDidLayoutSubviews()\n\n        guard pointerParentSize != .zero else {\n            return\n        }\n\n        if pointerParentSize != container.bounds.size {\n            setPointerTop(pointer.frame.minY * container.bounds.height / pointerParentSize.height)\n            // using container.bounds.height because it has been rotated but pointer.frame.minX has not\n            if pointer.frame.minX > container.bounds.height / 2 {\n                setPointerLeft(maxX - pointer.bounds.width)\n            } else {\n                setPointerLeft(minX)\n            }\n        }\n    }\n\n    // MARK: Internal\n\n    var panningTask: Task<Void, Never>?\n\n    func moveMagnifyingGlass(to point: CGPoint) {\n        magnifyingGlass?.touchPoint = point\n        magnifyingGlass?.center = CGPoint(x: point.x, y: point.y + (lookingUpward(point) ? 40 : -40))\n    }\n\n    // MARK: - Word Popover\n\n    func showWordPopover(text: String, at point: CGPoint) {\n        let isUpward = lookingUpward(point)\n        let newPoint = CGPoint(x: point.x, y: point.y + (isUpward ? 70 : -70))\n        let action = PopoverAction(image: nil, title: text, handler: nil)\n        popover.show(to: newPoint, isUpward: isUpward, with: [action])\n    }\n\n    func hideWordPopover() {\n        popover.hideNoAnimation()\n    }\n\n    // MARK: Private\n\n    private enum GestureState {\n        case began\n        case changed(translation: CGPoint)\n        case ended(velocity: CGPoint)\n    }\n\n    private let viewModel: WordPointerViewModel\n\n    // For word translation\n    private lazy var popover: PopoverView = PopoverView(view: container)\n\n    private var pointerTop: NSLayoutConstraint!\n    private var pointerLeft: NSLayoutConstraint!\n    private var pointer: UIView!\n\n    private var pointerParentSize: CGSize = .zero\n\n    private var startPointerPosition: CGPoint = .zero\n\n    private var magnifyingGlass: MagnifyingGlass! {\n        didSet { oldValue?.removeFromSuperview() }\n    }\n\n    private var container: UIView { view }\n\n    private var borderInsets: NSDirectionalEdgeInsets {\n        // TODO: Use the containing window\n        view.window?.directionalSafeAreaInsets ?? .zero\n    }\n\n    private var minX: CGFloat {\n        borderInsets.leading\n    }\n\n    private var maxX: CGFloat {\n        container.bounds.width - borderInsets.trailing\n    }\n\n    private func setPointerTop(_ value: CGFloat) {\n        pointerTop.constant = value\n        pointerParentSize = container.bounds.size\n    }\n\n    private func setPointerLeft(_ value: CGFloat) {\n        pointerLeft.constant = value\n    }\n\n    @objc\n    private func onPanned(_ gesture: UIPanGestureRecognizer) {\n        guard let state = makeGestureState(gesture) else {\n            return\n        }\n        panningTask?.cancel()\n        panningTask = Task {\n            await asyncOnPanned(state: state)\n        }\n    }\n\n    private func makeGestureState(_ gesture: UIPanGestureRecognizer) -> GestureState? {\n        switch gesture.state {\n        case .began:\n            logger.debug(\"Started pointer dragging\")\n            return .began\n        case .changed:\n            let translation = gesture.translation(in: container)\n            logger.debug(\"Pointer dragged to new position \\(translation)\")\n            return .changed(translation: translation)\n        case .ended, .cancelled, .failed:\n            logger.debug(\"Ended pointer dragging \\(gesture.state.rawValue)\")\n            let velocity = gesture.velocity(in: container)\n            return .ended(velocity: velocity)\n        case .possible:\n            return nil\n        @unknown default:\n            fatalError(\"Unimplemented case\")\n        }\n    }\n\n    private func asyncOnPanned(state: GestureState) async {\n        switch state {\n        case .began:\n            viewModel.viewPanBegan()\n            startPointerPosition = CGPoint(x: pointer.frame.minX, y: pointer.frame.minY)\n\n        case .changed(let translation):\n            setPointerTop(startPointerPosition.y + translation.y)\n            setPointerLeft(startPointerPosition.x + translation.x)\n            container.layoutIfNeeded()\n\n            let arrowPoint = CGPoint(x: pointer.frame.maxX - 15, y: pointer.frame.minY + 15)\n\n            showMagnifyingGlassIfNeeded()\n            moveMagnifyingGlass(to: arrowPoint)\n            let globalPoint = view.convert(arrowPoint, to: nil)\n            let status = await viewModel.viewPanned(to: globalPoint)\n            switch status {\n            case .none:\n                break\n            case .hidePopover:\n                hideWordPopover()\n            case .showPopover(let text):\n                showWordPopover(text: text, at: arrowPoint)\n            }\n\n        case .ended(let velocity):\n            hideMangifyingGlass()\n            hideWordPopover()\n            viewModel.unhighlightWord()\n\n            let goLeft: Bool = if abs(velocity.x) > 100 {\n                velocity.x < 0\n            } else {\n                pointer.center.x < container.bounds.width / 2\n            }\n\n            let finalY = max(10, min(container.bounds.height - pointer.bounds.height, velocity.y * 0.3 + pointer.frame.minY))\n            let finalX = goLeft ? minX : maxX - pointer.bounds.width\n\n            let y = finalY - pointer.frame.minY\n            let x = finalX - pointer.frame.minX\n            let springVelocity = abs(velocity.x) / sqrt(x * x + y * y)\n\n            setPointerTop(finalY)\n            setPointerLeft(finalX)\n            UIView.animate(\n                withDuration: 0.5,\n                delay: 0,\n                usingSpringWithDamping: 0.7,\n                initialSpringVelocity: springVelocity,\n                options: [],\n                animations: {\n                    self.container.layoutIfNeeded()\n                },\n                completion: nil\n            )\n        }\n    }\n\n    // MARK: - Animation\n\n    private func animateIn(referenceView: UIView) {\n        magnifyingGlass.viewToMagnify = referenceView\n        view.isHidden = false\n\n        // initial position\n        container.layoutIfNeeded()\n        setPointerTop(container.bounds.height)\n        setPointerLeft(container.bounds.width / 2)\n        container.layoutIfNeeded()\n\n        // final position\n        setPointerTop(container.bounds.height / 4)\n        setPointerLeft(minX)\n        UIView.animate(\n            withDuration: 0.5,\n            delay: 0,\n            usingSpringWithDamping: 0.7,\n            initialSpringVelocity: 0,\n            animations: {\n                self.container.layoutIfNeeded()\n            },\n            completion: nil\n        )\n    }\n\n    private func animateOut(completion: @escaping () -> Void) {\n        let finalY = container.bounds.height + 200\n        setPointerTop(finalY)\n        setPointerLeft(container.bounds.width / 2)\n        UIView.animate(\n            withDuration: 0.5,\n            delay: 0,\n            usingSpringWithDamping: 0.7,\n            initialSpringVelocity: 0,\n            animations: {\n                self.container.layoutIfNeeded()\n            },\n            completion: { _ in\n                if self.pointerTop?.constant == finalY {\n                    completion()\n                }\n            }\n        )\n    }\n\n    // MARK: - Magnifying Glass\n\n    private func showMagnifyingGlassIfNeeded() {\n        if magnifyingGlass.isHidden {\n            magnifyingGlass.isHidden = false\n            pointer.isHidden = true\n        }\n    }\n\n    private func hideMangifyingGlass() {\n        magnifyingGlass.isHidden = true\n        pointer.isHidden = false\n    }\n\n    private func lookingUpward(_ point: CGPoint) -> Bool {\n        point.y < 130\n    }\n}\n"
  },
  {
    "path": "Features/WordPointerFeature/WordPointerViewModel.swift",
    "content": "//\n//  WordPointerViewModel.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/13/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport Crashing\nimport QuranKit\nimport UIKit\nimport VLogging\nimport WordTextService\n\n@MainActor\npublic protocol WordPointerListener: AnyObject {\n    func onWordPointerPanBegan()\n    func word(at point: CGPoint) -> Word?\n    func highlightWord(_ position: Word?)\n}\n\n@MainActor\nfinal class WordPointerViewModel {\n    enum PanResult {\n        case none\n        case hidePopover\n        case showPopover(text: String)\n    }\n\n    // MARK: Lifecycle\n\n    init(service: WordTextService) {\n        self.service = service\n    }\n\n    // MARK: Internal\n\n    weak var listener: WordPointerListener?\n\n    func viewPanBegan() {\n        listener?.onWordPointerPanBegan()\n    }\n\n    func viewPanned(to point: CGPoint) async -> PanResult {\n        guard let word = listener?.word(at: point) else {\n            logger.debug(\"No word found at position \\(point)\")\n            unhighlightWord()\n            return .hidePopover\n        }\n        logger.debug(\"Highlighting word \\(word) at position: \\(point)\")\n        listener?.highlightWord(word)\n\n        if selectedWord == word {\n            logger.debug(\"Same word selected before\")\n            return .none\n        }\n        do {\n            if let text = try await service.textForWord(word) {\n                logger.debug(\"Found text '\\(text)' for word \\(word)\")\n                selectedWord = word\n                return .showPopover(text: text)\n            } else {\n                logger.debug(\"No text found for word \\(word)\")\n                return .hidePopover\n            }\n        } catch {\n            crasher.recordError(error, reason: \"Error calling WordTextService\")\n            return .hidePopover\n        }\n    }\n\n    func unhighlightWord() {\n        listener?.highlightWord(nil)\n        selectedWord = nil\n    }\n\n    // MARK: Private\n\n    private let service: WordTextService\n\n    private var selectedWord: Word?\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License."
  },
  {
    "path": "Makefile",
    "content": "SHELL=/bin/bash\n\nBUILD_TOOLS_DIR=./BuildTools\n\nPACKAGE_SCHEME ?= QuranEngine-Package\nPACKAGE_SDK ?= iphonesimulator\nPACKAGE_DESTINATION ?= name=iPhone 17,OS=26.2\nEXAMPLE_PROJECT ?= Example/QuranEngineApp.xcodeproj\nEXAMPLE_SCHEME ?= QuranEngineApp\nEXAMPLE_SDK ?= iphonesimulator\nEXAMPLE_DESTINATION ?= generic/platform=iOS\n\nSWIFT_FORMAT_REPO=https://github.com/nicklockwood/SwiftFormat\nSWIFT_FORMAT_VERSION=0.54.3\nSWIFT_FORMAT_DIR=$(BUILD_TOOLS_DIR)/SwiftFormat\nSWIFT_FORMAT_BIN=$(SWIFT_FORMAT_DIR)/.build/release/swiftformat\n\nCURRENT_TARGET=$(if $(TARGET),$(TARGET),$(PACKAGE_SCHEME))\n\n.PHONY: test build build-example clone-swiftformat build-swiftformat force-build-swiftformat clean-swiftformat format-lint format-autocorrect install-swiftlint build-for-analyzer swiftlint-analyzer\n\ntest:\n\tset -o pipefail; xcrun xcodebuild build test -scheme $(CURRENT_TARGET) -sdk \"$(PACKAGE_SDK)\" -destination \"$(PACKAGE_DESTINATION)\" 2>&1 | xcbeautify --renderer github-actions\n\nbuild:\n\tset -o pipefail; xcrun xcodebuild build -scheme $(CURRENT_TARGET) -sdk \"$(PACKAGE_SDK)\" -destination \"$(PACKAGE_DESTINATION)\" | xcbeautify --renderer github-actions\n\nbuild-example:\n\tset -o pipefail; xcrun xcodebuild build -project $(EXAMPLE_PROJECT) -scheme $(EXAMPLE_SCHEME) -sdk \"$(EXAMPLE_SDK)\" -destination \"$(EXAMPLE_DESTINATION)\" CODE_SIGN_IDENTITY=\"\" CODE_SIGNING_REQUIRED=NO | xcbeautify --renderer github-actions\n\nclone-swiftformat:\n\t@mkdir -p $(BUILD_TOOLS_DIR)\n\t@if [ ! -d $(SWIFT_FORMAT_DIR) ]; then \\\n\t\techo \"Cloning SwiftFormat repository...\"; \\\n\t\tgit clone --branch $(SWIFT_FORMAT_VERSION) --depth 1 $(SWIFT_FORMAT_REPO) $(SWIFT_FORMAT_DIR); \\\n\telse \\\n\t\techo \"SwiftFormat repository already exists.\"; \\\n\tfi\n\nbuild-swiftformat: clone-swiftformat\n\t@if [ ! -f $(SWIFT_FORMAT_BIN) ]; then \\\n\t\techo \"Building swiftformat in $(SWIFT_FORMAT_DIR)\"; \\\n\t\tcd $(SWIFT_FORMAT_DIR) && swift build -c release; \\\n\telse \\\n\t\techo \"SwiftFormat binary already exists.\"; \\\n\tfi\n\nforce-build-swiftformat: clone-swiftformat\n\t@echo \"Force building swiftformat in $(SWIFT_FORMAT_DIR)\"\n\tcd $(SWIFT_FORMAT_DIR) && swift build -c release\n\nclean-swiftformat:\n\t@rm -rf $(SWIFT_FORMAT_DIR)/.build\n\nformat-lint: $(SWIFT_FORMAT_BIN)\n\t$(SWIFT_FORMAT_BIN) --lint .\n\nformat-autocorrect: $(SWIFT_FORMAT_BIN)\n\t$(SWIFT_FORMAT_BIN) .\n\n$(SWIFT_FORMAT_BIN): build-swiftformat\n\ninstall-swiftlint:\n\tbrew install swiftlint\n\nbuild-for-analyzer:\n\txcrun xcodebuild clean build -scheme QuranEngine-Package -sdk \"iphonesimulator\" -destination \"name=iPhone 14 Pro,OS=17.2\" > .build/xcodebuild.log\n\nswiftlint-analyzer:\n\tswiftlint analyze --strict  --quiet --compiler-log-path .build/xcodebuild.log\n"
  },
  {
    "path": "Model/QuranAnnotations/LastPage.swift",
    "content": "//\n//  LastPage.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 11/5/16.\n//\n\nimport Foundation\nimport QuranKit\n\npublic struct LastPage: Equatable, Identifiable {\n    // MARK: Lifecycle\n\n    public init(page: Page, createdOn: Date, modifiedOn: Date) {\n        self.page = page\n        self.createdOn = createdOn\n        self.modifiedOn = modifiedOn\n    }\n\n    // MARK: Public\n\n    public var page: Page\n    public var createdOn: Date\n    public var modifiedOn: Date\n\n    public var id: Page { page }\n}\n"
  },
  {
    "path": "Model/QuranAnnotations/Note.swift",
    "content": "//\n//  Note.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 10/29/16.\n//\n\nimport Foundation\nimport QuranKit\n\npublic struct Note: Equatable {\n    // MARK: Lifecycle\n\n    public init(verses: Set<AyahNumber>, modifiedDate: Date, note: String?, color: Color) {\n        self.verses = verses\n        self.modifiedDate = modifiedDate\n        self.color = color\n        self.note = note\n    }\n\n    // MARK: Public\n\n    public enum Color: Int {\n        case red\n        case green\n        case blue\n        case yellow\n        case purple\n    }\n\n    public let verses: Set<AyahNumber>\n    public let modifiedDate: Date\n    public let color: Color\n    public let note: String?\n\n    public var firstVerse: AyahNumber {\n        verses.sorted()[0]\n    }\n}\n"
  },
  {
    "path": "Model/QuranAnnotations/PageBookmark.swift",
    "content": "//\n//  PageBookmark.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 10/29/16.\n//\n\nimport Foundation\nimport QuranKit\n\npublic struct PageBookmark: Equatable, Identifiable {\n    // MARK: Lifecycle\n\n    public init(page: Page, creationDate: Date) {\n        self.page = page\n        self.creationDate = creationDate\n    }\n\n    // MARK: Public\n\n    public let page: Page\n    public let creationDate: Date\n\n    public var id: Page { page }\n}\n"
  },
  {
    "path": "Model/QuranAnnotations/QuranHighlights.swift",
    "content": "//\n//  QuranHighlights.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/2/17.\n//\n\nimport QuranKit\n\npublic struct QuranHighlights: Equatable {\n    // MARK: Lifecycle\n\n    public init() { }\n\n    // MARK: Public\n\n    public var readingVerses: [AyahNumber] = []\n    public var shareVerses: [AyahNumber] = []\n    public var searchVerses: [AyahNumber] = []\n    public var noteVerses: [AyahNumber: Note] = [:]\n\n    public var pointedWord: Word?\n}\n\nextension QuranHighlights {\n    public func needsScrolling(comparingTo oldValue: Self) -> Bool {\n        // Check readingHighlights & searchHighlights\n        if oldValue.readingVerses != readingVerses {\n            return true\n        }\n        if oldValue.searchVerses != searchVerses {\n            return true\n        }\n        return false\n    }\n\n    public func firstScrollingVerse() -> AyahNumber? {\n        if let firstReadingVerse = readingVerses.first {\n            return firstReadingVerse\n        }\n        return searchVerses.first\n    }\n\n    public func verseToScrollTo(comparingTo oldValue: Self) -> AyahNumber? {\n        func verseToScrollToIfChanged(_ keyPath: KeyPath<Self, [AyahNumber]>) -> AyahNumber? {\n            let ayahToScrollTo = self[keyPath: keyPath].last\n            if self[keyPath: keyPath] != oldValue[keyPath: keyPath] {\n                if let ayah = ayahToScrollTo {\n                    return ayah\n                }\n            }\n            return nil\n        }\n\n        return verseToScrollToIfChanged(\\.shareVerses) ?? verseToScrollToIfChanged(\\.readingVerses)\n    }\n}\n"
  },
  {
    "path": "Model/QuranAudio/AudioDownloadedSize.swift",
    "content": "//\n//  AudioDownloadedSize.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/17/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n\nimport QuranKit\n\npublic struct AudioDownloadedSize: Hashable, Sendable {\n    // MARK: Lifecycle\n\n    public init(downloadedSizeInBytes: UInt64, downloadedSuraCount: Int, surasCount: Int) {\n        self.downloadedSizeInBytes = downloadedSizeInBytes\n        self.downloadedSuraCount = downloadedSuraCount\n        self.surasCount = surasCount\n    }\n\n    // MARK: Public\n\n    public let downloadedSizeInBytes: UInt64\n    public let downloadedSuraCount: Int\n    public let surasCount: Int\n\n    public var isDownloaded: Bool {\n        downloadedSuraCount == surasCount\n    }\n\n    public static func zero(quran: Quran) -> AudioDownloadedSize {\n        AudioDownloadedSize(\n            downloadedSizeInBytes: 0,\n            downloadedSuraCount: 0,\n            surasCount: quran.suras.count\n        )\n    }\n}\n"
  },
  {
    "path": "Model/QuranAudio/AudioEnd.swift",
    "content": "//\n//  AudioEnd.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-04-16.\n//\n\npublic enum AudioEnd: Int {\n    case sura\n    case juz\n    case page\n    case quran\n}\n"
  },
  {
    "path": "Model/QuranAudio/AyahTiming.swift",
    "content": "//\n//  AyahTiming.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/27/16.\n//\n\nimport QuranKit\n\npublic struct AyahTiming {\n    // MARK: Lifecycle\n\n    public init(ayah: AyahNumber, time: Timing) {\n        self.ayah = ayah\n        self.time = time\n    }\n\n    // MARK: Public\n\n    public let ayah: AyahNumber\n    public let time: Timing\n}\n"
  },
  {
    "path": "Model/QuranAudio/RangeTiming.swift",
    "content": "//\n//  RangeTiming.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-10.\n//\n\nimport QuranKit\n\npublic struct RangeTiming {\n    // MARK: Lifecycle\n\n    public init(timings: [Sura: SuraTiming], endTime: Timing?) {\n        self.timings = timings\n        self.endTime = endTime\n    }\n\n    // MARK: Public\n\n    public let timings: [Sura: SuraTiming]\n    public let endTime: Timing?\n}\n"
  },
  {
    "path": "Model/QuranAudio/Reciter+URLs.swift",
    "content": "//\n//  Reciter+URLs.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-10.\n//\n\nimport Foundation\nimport QuranKit\nimport Utilities\n\nextension Reciter {\n    static let audioRemotePath = \"hafs/databases/audio/\"\n\n    public var localDatabasePath: RelativeFilePath? {\n        guard case .gapless(let databaseName) = audioType else {\n            return nil\n        }\n        let baseFileName = localFolder().appendingPathComponent(databaseName, isDirectory: true)\n        return baseFileName.appendingPathExtension(Files.databaseLocalFileExtension)\n    }\n\n    public var localZipPath: RelativeFilePath? {\n        localDatabasePath?.deletingPathExtension()\n            .appendingPathExtension(Files.databaseRemoteFileExtension)\n    }\n\n    public static var audioFiles: RelativeFilePath {\n        RelativeFilePath(Files.audioFilesPathComponent, isDirectory: true)\n    }\n\n    public func localFolder() -> RelativeFilePath {\n        Self.audioFiles.appendingPathComponent(directory, isDirectory: true)\n    }\n\n    // TODO: should be internal\n    public func oldLocalFolder() -> RelativeFilePath {\n        RelativeFilePath(directory, isDirectory: true)\n    }\n\n    public func databaseRemoteURL(baseURL: URL) -> URL? {\n        guard case AudioType.gapless(let databaseFileName) = audioType else {\n            return nil\n        }\n\n        let audioDatabaseURL = baseURL.appendingPathComponent(Self.audioRemotePath)\n        return audioDatabaseURL.appendingPathComponent(databaseFileName)\n            .appendingPathExtension(Files.databaseRemoteFileExtension)\n    }\n\n    public func remoteURL(sura: Sura) -> URL {\n        let fileName = sura.suraNumber.as3DigitString()\n        return audioURL.appendingPathComponent(fileName)\n            .appendingPathExtension(Files.audioExtension)\n    }\n\n    public func localURL(sura: Sura) -> RelativeFilePath {\n        let fileName = sura.suraNumber.as3DigitString()\n        return localFolder().appendingPathComponent(fileName, isDirectory: true)\n            .appendingPathExtension(Files.audioExtension)\n    }\n\n    public func remoteURL(ayah: AyahNumber) -> URL {\n        let fileName = ayah.sura.suraNumber.as3DigitString() + ayah.ayah.as3DigitString()\n        return audioURL.appendingPathComponent(fileName)\n            .appendingPathExtension(Files.audioExtension)\n    }\n\n    public func localURL(ayah: AyahNumber) -> RelativeFilePath {\n        let fileName = ayah.sura.suraNumber.as3DigitString() + ayah.ayah.as3DigitString()\n        return localFolder().appendingPathComponent(fileName, isDirectory: true)\n            .appendingPathExtension(Files.audioExtension)\n    }\n\n    public func isReciterDirectory(_ directoryURL: URL) -> Bool {\n        directory == directoryURL.lastPathComponent\n    }\n}\n\nprivate enum Files {\n    static let audioExtension = \"mp3\"\n    static let databaseRemoteFileExtension = \"zip\"\n    static let databaseLocalFileExtension = \"db\"\n    static let audioFilesPathComponent = \"audio_files\"\n}\n"
  },
  {
    "path": "Model/QuranAudio/Reciter.swift",
    "content": "//\n//  Reciter.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/27/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\n\npublic enum AudioType: Hashable, Sendable {\n    case gapless(databaseName: String)\n    case gapped\n}\n\npublic struct Reciter: Hashable, Identifiable, Sendable {\n    // TODO: Add arabicTafseer\n    public enum Category: String, Sendable {\n        case arabic\n        case english\n        case arabicEnglish\n    }\n\n    // MARK: Lifecycle\n\n    public init(id: Int, nameKey: String, directory: String, audioURL: URL, audioType: AudioType, hasGaplessAlternative: Bool, category: Category) {\n        self.id = id\n        self.nameKey = nameKey\n        self.directory = directory\n        self.audioURL = audioURL\n        self.audioType = audioType\n        self.hasGaplessAlternative = hasGaplessAlternative\n        self.category = category\n    }\n\n    // MARK: Public\n\n    public let id: Int\n    public let nameKey: String\n    public let audioURL: URL\n    public let audioType: AudioType\n    public let hasGaplessAlternative: Bool\n    public let category: Category\n\n    // MARK: Internal\n\n    let directory: String\n}\n"
  },
  {
    "path": "Model/QuranAudio/SuraTiming.swift",
    "content": "//\n//  SuraTiming.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-10.\n//\n\npublic struct SuraTiming {\n    // MARK: Lifecycle\n\n    public init(verses: [AyahTiming], endTime: Timing?) {\n        self.verses = verses\n        self.endTime = endTime\n    }\n\n    // MARK: Public\n\n    public let verses: [AyahTiming]\n    public let endTime: Timing?\n}\n"
  },
  {
    "path": "Model/QuranAudio/Timing.swift",
    "content": "//\n//  Timing.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-10.\n//\n\npublic struct Timing {\n    // MARK: Lifecycle\n\n    public init(time: Int) {\n        self.time = time\n    }\n\n    // MARK: Public\n\n    public var seconds: Double {\n        Double(time) / 1000\n    }\n\n    // MARK: Internal\n\n    let time: Int\n}\n"
  },
  {
    "path": "Model/QuranGeometry/AyahNumberLocation.swift",
    "content": "//\n//  AyahNumberLocation.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-10.\n//\n\nimport CoreFoundation\nimport QuranKit\n\npublic struct AyahNumberLocation: Hashable {\n    // MARK: Lifecycle\n\n    public init(ayah: AyahNumber, x: Int, y: Int) {\n        self.ayah = ayah\n        self.x = x\n        self.y = y\n    }\n\n    // MARK: Public\n\n    public let ayah: AyahNumber\n\n    public var center: CGPoint {\n        CGPoint(x: CGFloat(x), y: CGFloat(y))\n    }\n\n    // MARK: Internal\n\n    let x: Int\n    let y: Int\n}\n"
  },
  {
    "path": "Model/QuranGeometry/ImagePage.swift",
    "content": "//\n//  ImagePage.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 9/15/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport QuranKit\nimport UIKit\n\npublic struct ImagePage: Equatable {\n    public let image: UIImage\n    public let wordFrames: WordFrameCollection\n    public let startAyah: AyahNumber\n\n    public init(image: UIImage, wordFrames: WordFrameCollection, startAyah: AyahNumber) {\n        self.image = image\n        self.wordFrames = wordFrames\n        self.startAyah = startAyah\n    }\n}\n"
  },
  {
    "path": "Model/QuranGeometry/SuraHeaderLocation.swift",
    "content": "//\n//  SuraHeaderLocation.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-10.\n//\n\nimport CoreGraphics\nimport QuranKit\n\npublic struct SuraHeaderLocation: Hashable {\n    // MARK: Lifecycle\n\n    public init(sura: Sura, x: Int, y: Int, width: Int, height: Int) {\n        self.sura = sura\n        self.x = x\n        self.y = y\n        self.width = width\n        self.height = height\n    }\n\n    // MARK: Public\n\n    public var rect: CGRect {\n        CGRect(x: x, y: y - height / 2, width: width, height: height)\n    }\n\n    // MARK: Internal\n\n    let sura: Sura\n    let x: Int\n    let y: Int\n    let width: Int\n    let height: Int\n}\n"
  },
  {
    "path": "Model/QuranGeometry/WordFrame.swift",
    "content": "//\n//  WordFrame.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/22/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport CoreGraphics\nimport QuranKit\n\npublic struct WordFrame: Hashable {\n    // MARK: Lifecycle\n\n    public init(line: Int, word: Word, minX: Int, maxX: Int, minY: Int, maxY: Int) {\n        self.line = line\n        self.word = word\n        self.minX = minX\n        self.maxX = maxX\n        self.minY = minY\n        self.maxY = maxY\n    }\n\n    // MARK: Public\n\n    public let line: Int\n    public let word: Word\n\n    public var minX: Int\n    public var maxX: Int\n    public var minY: Int\n    public var maxY: Int\n\n    public var rect: CGRect {\n        CGRect(\n            x: minX,\n            y: minY,\n            width: maxX - minX,\n            height: maxY - minY\n        )\n    }\n}\n\nextension WordFrame: Encodable {\n    enum CodingKeys: String, CodingKey {\n        case word\n        case frame\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        try container.encode(word, forKey: .word)\n        try container.encode(rect, forKey: .frame)\n    }\n}\n"
  },
  {
    "path": "Model/QuranGeometry/WordFrameCollection.swift",
    "content": "//\n//  WordFrameCollection.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-26.\n//\n\nimport CoreGraphics\nimport QuranKit\n\npublic struct WordFrameCollection: Equatable {\n    public var lines: [WordFrameLine]\n\n    public init(lines: [WordFrameLine]) {\n        self.lines = lines\n    }\n\n    public func wordFramesForVerse(_ verse: AyahNumber) -> [WordFrame] {\n        lines\n            .flatMap(\\.frames)\n            .filter { $0.word.verse == verse }\n    }\n\n    public func lineFramesVerVerse(_ verse: AyahNumber) -> [WordFrameLine] {\n        lines.filter { line in\n            line.frames.contains { $0.word.verse == verse }\n        }\n    }\n\n    public func wordFrameForWord(_ word: Word) -> WordFrame? {\n        let frames = wordFramesForVerse(word.verse)\n        return frames.first(where: { $0.word == word })\n    }\n\n    public func wordAtLocation(_ location: CGPoint, imageScale: WordFrameScale) -> Word? {\n        let flattenFrames = lines.flatMap(\\.frames)\n        for frame in flattenFrames {\n            let rectangle = frame.rect.scaled(by: imageScale)\n            if rectangle.contains(location) {\n                return frame.word\n            }\n        }\n        return nil\n    }\n\n    public func topPadding(atLineIndex lineIndex: Int, scale: WordFrameScale) -> CGFloat {\n        let topLine = lineIndex == 0 ? 0 : lines[lineIndex - 1].frames[0].maxY\n        let padding = CGFloat(lines[lineIndex].frames[0].minY - topLine)\n        return padding * scale.scale\n    }\n}\n"
  },
  {
    "path": "Model/QuranGeometry/WordFrameLine.swift",
    "content": "//\n//  WordFrameLine.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-05-20.\n//\n\npublic struct WordFrameLine: Hashable {\n    public var frames: [WordFrame]\n\n    public init(frames: [WordFrame]) {\n        self.frames = frames\n    }\n}\n"
  },
  {
    "path": "Model/QuranGeometry/WordFrameScale.swift",
    "content": "//\n//  WordFrameScale.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-10.\n//\n\nimport CoreGraphics\n\npublic struct WordFrameScale {\n    // MARK: Lifecycle\n\n    public init(scale: CGFloat, xOffset: CGFloat, yOffset: CGFloat) {\n        self.scale = scale\n        self.xOffset = xOffset\n        self.yOffset = yOffset\n    }\n\n    // MARK: Public\n\n    public static let zero = WordFrameScale(scale: 0, xOffset: 0, yOffset: 0)\n\n    public let scale: CGFloat\n    public let xOffset: CGFloat\n    public let yOffset: CGFloat\n}\n\nextension WordFrameScale {\n    public static func scaling(imageSize: CGSize, into viewSize: CGSize) -> WordFrameScale {\n        // Return zero scaling if either size is zero\n        if imageSize == .zero || viewSize == .zero {\n            return .zero\n        }\n\n        // Calculate the scaling factor to fit the image within the view while maintaining aspect ratio\n        let scale: CGFloat\n        let imageAspectRatio = imageSize.width / imageSize.height\n        let viewAspectRatio = viewSize.width / viewSize.height\n        if imageAspectRatio < viewAspectRatio {\n            // Image is taller relative to the view, fit by height\n            scale = viewSize.height / imageSize.height\n        } else {\n            // Image is wider relative to the view, fit by width\n            scale = viewSize.width / imageSize.width\n        }\n\n        // Calculate offsets to center the image within the view\n        let xOffset = (viewSize.width - (scale * imageSize.width)) / 2\n        let yOffset = (viewSize.height - (scale * imageSize.height)) / 2\n        return WordFrameScale(scale: scale, xOffset: xOffset, yOffset: yOffset)\n    }\n}\n\nextension CGRect {\n    public func scaled(by scale: WordFrameScale) -> CGRect {\n        CGRect(\n            x: minX * scale.scale + scale.xOffset,\n            y: minY * scale.scale + scale.yOffset,\n            width: width * scale.scale,\n            height: height * scale.scale\n        )\n    }\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/AyahNumber.swift",
    "content": "//\n//  AyahNumber.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/24/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\npublic struct AyahNumber: Navigatable {\n    // MARK: Lifecycle\n\n    public init?(quran: Quran, sura: Int, ayah: Int) {\n        guard let sura = Sura(quran: quran, suraNumber: sura) else {\n            return nil\n        }\n        self.init(sura: sura, ayah: ayah)\n    }\n\n    public init?(sura: Sura, ayah: Int) {\n        if !(1 ... sura.numberOfVerses).contains(ayah) {\n            return nil\n        }\n        self.sura = sura\n        self.ayah = ayah\n    }\n\n    // MARK: Public\n\n    public let sura: Sura\n    public let ayah: Int\n\n    public var quran: Quran { sura.quran }\n    public var description: String {\n        \"<AyahNumber sura=\\(sura.suraNumber) ayah=\\(ayah)>\"\n    }\n\n    public var previous: AyahNumber? {\n        if self != sura.firstVerse {\n            // same sura\n            return AyahNumber(sura: sura, ayah: ayah - 1)\n        }\n        // previous sura, last verse\n        return sura.previous?.lastVerse\n    }\n\n    public var next: AyahNumber? {\n        if self != sura.lastVerse {\n            // same sura\n            return AyahNumber(sura: sura, ayah: ayah + 1)\n        }\n        // next sura, first verse\n        return sura.next?.firstVerse\n    }\n\n    public var page: Page {\n        quran.pages.binarySearchFirst { self >= $0.firstVerse }\n    }\n\n    public static func < (lhs: AyahNumber, rhs: AyahNumber) -> Bool {\n        if lhs.sura == rhs.sura {\n            return lhs.ayah < rhs.ayah\n        }\n        return lhs.sura < rhs.sura\n    }\n}\n\nextension AyahNumber: Encodable {\n    enum CodingKeys: String, CodingKey {\n        case sura\n        case ayah\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        try container.encode(sura.suraNumber, forKey: .sura)\n        try container.encode(ayah, forKey: .ayah)\n    }\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/Hizb.swift",
    "content": "//\n//  Hizb.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-11.\n//\n\npublic struct Hizb: QuranValueGroup {\n    // MARK: Lifecycle\n\n    init(quran: Quran, hizbNumber: Int) {\n        storage = QuranValueStorage(quran: quran, value: hizbNumber, keyPath: \\.hizbs)\n    }\n\n    init(_ storage: QuranValueStorage<Self>) {\n        self.storage = storage\n    }\n\n    // MARK: Public\n\n    public var hizbNumber: Int { storage.value }\n    public var quran: Quran {\n        storage.quran\n    }\n\n    public var firstVerse: AyahNumber {\n        quarter.firstVerse\n    }\n\n    public var quarter: Quarter {\n        let quarterNumber = (hizbNumber - 1) * (quran.quarters.count / quran.hizbs.count) + 1\n        return quran.quarters[quarterNumber - 1]\n    }\n\n    public var juz: Juz {\n        quarter.juz\n    }\n\n    // MARK: Internal\n\n    let storage: QuranValueStorage<Self>\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/Juz.swift",
    "content": "//\n//  Juz.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/22/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\npublic struct Juz: QuranValueGroup, Identifiable {\n    // MARK: Lifecycle\n\n    init(quran: Quran, juzNumber: Int) {\n        storage = QuranValueStorage(quran: quran, value: juzNumber, keyPath: \\.juzs)\n    }\n\n    init(_ storage: QuranValueStorage<Self>) {\n        self.storage = storage\n    }\n\n    // MARK: Public\n\n    public var id: Juz { self }\n\n    public var juzNumber: Int { storage.value }\n    public var quran: Quran {\n        storage.quran\n    }\n\n    public var firstVerse: AyahNumber {\n        quarter.firstVerse\n    }\n\n    public var page: Page {\n        firstVerse.page\n    }\n\n    public var hizb: Hizb {\n        let hizbNumber = (juzNumber - 1) * (quran.hizbs.count / quran.juzs.count) + 1\n        return quran.hizbs[hizbNumber - 1]\n    }\n\n    public var quarter: Quarter {\n        hizb.quarter\n    }\n\n    // MARK: Internal\n\n    let storage: QuranValueStorage<Self>\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/LastAyahFinder/JuzBasedLastAyahFinder.swift",
    "content": "//\n//  JuzBasedLastAyahFinder.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/13/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\npublic struct JuzBasedLastAyahFinder: LastAyahFinder {\n    // MARK: Lifecycle\n\n    public init() {\n    }\n\n    // MARK: Public\n\n    public func findLastAyah(startAyah: AyahNumber) -> AyahNumber {\n        startAyah.page.startJuz.lastVerse\n    }\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/LastAyahFinder/LastAyahFinder.swift",
    "content": "//\n//  LastAyahFinder.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/13/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\npublic protocol LastAyahFinder {\n    func findLastAyah(startAyah: AyahNumber) -> AyahNumber\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/LastAyahFinder/PageBasedLastAyahFinder.swift",
    "content": "//\n//  PageBasedLastAyahFinder.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/13/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\npublic struct PageBasedLastAyahFinder: LastAyahFinder {\n    // MARK: Lifecycle\n\n    public init() {\n    }\n\n    // MARK: Public\n\n    public func findLastAyah(startAyah: AyahNumber) -> AyahNumber {\n        startAyah.page.lastVerse\n    }\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/LastAyahFinder/QuranBasedLastAyahFinder.swift",
    "content": "public struct QuranBasedLastAyahFinder: LastAyahFinder {\n    // MARK: Lifecycle\n\n    public init() {\n    }\n\n    // MARK: Public\n\n    public func findLastAyah(startAyah: AyahNumber) -> AyahNumber {\n        startAyah.quran.suras.last!.lastVerse\n    }\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/LastAyahFinder/SuraBasedLastAyahFinder.swift",
    "content": "//\n//  SuraBasedLastAyahFinder.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/13/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\npublic struct SuraBasedLastAyahFinder: LastAyahFinder {\n    // MARK: Lifecycle\n\n    public init() {\n    }\n\n    // MARK: Public\n\n    public func findLastAyah(startAyah: AyahNumber) -> AyahNumber {\n        startAyah.sura.lastVerse\n    }\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/LazyAtomic.swift",
    "content": "//\n//  LazyAtomic.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-01-04.\n//\n\nimport Foundation\n\n@propertyWrapper\nfinal class LazyAtomic<Value>: @unchecked Sendable {\n    // MARK: Lifecycle\n\n    init() {\n    }\n\n    // MARK: Internal\n\n    var wrappedValue: () -> Value {\n        get {\n            {\n                self.lock.lock()\n                defer {\n                    self.lock.unlock()\n                }\n                if let value = self.value {\n                    return value\n                }\n                guard let initializer = self.initializer else {\n                    fatalError(\"initializer must be set\")\n                }\n                let initializedValue = initializer()\n                self.value = initializedValue\n                return initializedValue\n            }\n        }\n        set {\n            initializer = newValue\n        }\n    }\n\n    // MARK: Private\n\n    private var initializer: (() -> Value)?\n    private var value: Value?\n    private let lock = NSLock()\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/Navigatable.swift",
    "content": "//\n//  Navigatable.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-12.\n//\n\npublic protocol Navigatable: Comparable, Hashable, CustomStringConvertible, Sendable {\n    var next: Self? { get }\n    var previous: Self? { get }\n}\n\nextension Navigatable {\n    public func array(to end: Self) -> [Self] {\n        precondition(end >= self, \"End \\(type(of: self)) is less than first one.\")\n        var values = [self]\n        var pointer = self\n        while let next = pointer.next, next <= end {\n            pointer = next\n            values.append(next)\n        }\n        return values\n    }\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/Page.swift",
    "content": "//\n//  Page.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/22/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\npublic struct Page: QuranValueGroup {\n    // MARK: Lifecycle\n\n    public init?(quran: Quran, pageNumber: Int) {\n        if !quran.pagesRange.contains(pageNumber) {\n            return nil\n        }\n        storage = QuranValueStorage(quran: quran, value: pageNumber, keyPath: \\.pages)\n    }\n\n    init(_ storage: QuranValueStorage<Self>) {\n        self.storage = storage\n    }\n\n    // MARK: Public\n\n    public var pageNumber: Int { storage.value }\n    public var quran: Quran {\n        storage.quran\n    }\n\n    public var firstVerse: AyahNumber {\n        AyahNumber(sura: startSura, ayah: quran.raw.startAyahOfPage[pageNumber - 1])!\n    }\n\n    public var startSura: Sura {\n        Sura(quran: quran, suraNumber: quran.raw.startSuraOfPage[pageNumber - 1])!\n    }\n\n    public var startJuz: Juz {\n        quran.juzs.binarySearchFirst { self >= $0.page }\n    }\n\n    public var quarter: Quarter? {\n        quran.quarters.first { $0.page == self }\n    }\n\n    // MARK: Internal\n\n    let storage: QuranValueStorage<Self>\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/Quarter.swift",
    "content": "//\n//  Quarter.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/25/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\npublic struct Quarter: QuranValueGroup {\n    // MARK: Lifecycle\n\n    init(quran: Quran, quarterNumber: Int) {\n        storage = QuranValueStorage(quran: quran, value: quarterNumber, keyPath: \\.quarters)\n    }\n\n    init(_ storage: QuranValueStorage<Self>) {\n        self.storage = storage\n    }\n\n    // MARK: Public\n\n    public var quarterNumber: Int { storage.value }\n    public var quran: Quran {\n        storage.quran\n    }\n\n    public var firstVerse: AyahNumber {\n        let verse = quran.raw.quarters[quarterNumber - 1]\n        return AyahNumber(quran: quran, sura: verse.sura, ayah: verse.ayah)!\n    }\n\n    public var page: Page {\n        firstVerse.page\n    }\n\n    public var hizb: Hizb {\n        let hizbNumber = (quarterNumber - 1) / (quran.quarters.count / quran.hizbs.count) + 1\n        return quran.hizbs[hizbNumber - 1]\n    }\n\n    public var juz: Juz {\n        let juzNumber = (quarterNumber - 1) / (quran.quarters.count / quran.juzs.count) + 1\n        return quran.juzs[juzNumber - 1]\n    }\n\n    // MARK: Internal\n\n    let storage: QuranValueStorage<Self>\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/Quran.swift",
    "content": "//\n//  Quran.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-10.\n//\n\nimport Foundation\n\npublic final class Quran: Hashable, @unchecked Sendable {\n    // MARK: Lifecycle\n\n    init(raw: QuranReadingInfoRawData) {\n        self.raw = raw\n        lazySuras = { self.surasRange.map { Sura(quran: self, suraNumber: $0)! } }\n        lazyPages = { self.pagesRange.map { Page(quran: self, pageNumber: $0)! } }\n        lazyJuzs = { (1 ... self.numberOfJuzs).map { Juz(quran: self, juzNumber: $0) } }\n        lazyQuarters = { (1 ... self.raw.quarters.count).map { Quarter(quran: self, quarterNumber: $0) } }\n        lazyHizbs = { (1 ... self.numberOfHizbs).map { Hizb(quran: self, hizbNumber: $0) } }\n        lazyVerses = { self.suras.flatMap(\\.verses) }\n    }\n\n    // MARK: Public\n\n    public static let hafsMadani1405 = Quran(raw: Madani1405QuranReadingInfoRawData())\n    public static let hafsMadani1440 = Quran(raw: Madani1440QuranReadingInfoRawData())\n\n    public var arabicBesmAllah: String {\n        raw.arabicBesmAllah\n    }\n\n    public var suras: [Sura] {\n        lazySuras()\n    }\n\n    public var pages: [Page] {\n        lazyPages()\n    }\n\n    public var juzs: [Juz] {\n        lazyJuzs()\n    }\n\n    public var quarters: [Quarter] {\n        lazyQuarters()\n    }\n\n    public var hizbs: [Hizb] {\n        lazyHizbs()\n    }\n\n    public var verses: [AyahNumber] {\n        lazyVerses()\n    }\n\n    public static func == (lhs: Quran, rhs: Quran) -> Bool {\n        lhs.id == rhs.id\n    }\n\n    public func hash(into hasher: inout Hasher) {\n        hasher.combine(id)\n    }\n\n    // MARK: Internal\n\n    let raw: QuranReadingInfoRawData\n\n    // MARK: Private\n\n    private let id = UUID()\n    @LazyAtomic private var lazySuras: () -> [Sura]\n    @LazyAtomic private var lazyPages: () -> [Page]\n    @LazyAtomic private var lazyJuzs: () -> [Juz]\n    @LazyAtomic private var lazyQuarters: () -> [Quarter]\n    @LazyAtomic private var lazyHizbs: () -> [Hizb]\n    @LazyAtomic private var lazyVerses: () -> [AyahNumber]\n}\n\nextension Quran {\n    var pagesRange: ClosedRange<Int> {\n        1 ... raw.startSuraOfPage.count\n    }\n}\n\nextension Quran {\n    var surasRange: ClosedRange<Int> {\n        1 ... raw.startPageOfSura.count\n    }\n\n    public var firstSura: Sura {\n        suras.first!\n    }\n}\n\nextension Quran {\n    private static let numberOfHizbsInJuz = 2\n    private var numberOfJuzs: Int { numberOfHizbs / Self.numberOfHizbsInJuz }\n}\n\nextension Quran {\n    private static let numberOfQuartersInHizb = 4\n    private var numberOfHizbs: Int { raw.quarters.count / Self.numberOfQuartersInHizb }\n}\n\nextension Quran {\n    public var firstVerse: AyahNumber {\n        verses.first!\n    }\n\n    public var lastVerse: AyahNumber {\n        verses.last!\n    }\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/QuranGroup.swift",
    "content": "//\n//  QuranGroup.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-11.\n//\n\npublic protocol QuranGroup {\n    var firstVerse: AyahNumber { get }\n    var lastVerse: AyahNumber { get }\n}\n\nextension QuranGroup {\n    public var verses: [AyahNumber] {\n        firstVerse.array(to: lastVerse)\n    }\n}\n\nprotocol QuranValueGroup: QuranGroup, Navigatable, Sendable {\n    var storage: QuranValueStorage<Self> { get }\n    init(_ storage: QuranValueStorage<Self>)\n}\n\nextension QuranValueGroup {\n    public var description: String {\n        storage.description\n    }\n\n    public static func < (lhs: Self, rhs: Self) -> Bool {\n        lhs.storage < rhs.storage\n    }\n\n    public var next: Self? {\n        storage.next\n    }\n\n    public var previous: Self? {\n        storage.previous\n    }\n\n    public var lastVerse: AyahNumber {\n        if let next {\n            return next.firstVerse.previous!\n        }\n        return storage.quran.lastVerse\n    }\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/QuranValueStorage.swift",
    "content": "//\n//  QuranValueStorage.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-12.\n//\n\nstruct QuranValueStorage<T: QuranValueGroup>: Hashable, Comparable, @unchecked Sendable {\n    // MARK: Public\n\n    public var next: T? {\n        let values = quran[keyPath: keyPath]\n        if self == values.last?.storage {\n            return nil\n        }\n        return T(QuranValueStorage(quran: quran, value: value + 1, keyPath: keyPath))\n    }\n\n    public var previous: T? {\n        let values = quran[keyPath: keyPath]\n        if self == values.first?.storage {\n            return nil\n        }\n        return T(QuranValueStorage(quran: quran, value: value - 1, keyPath: keyPath))\n    }\n\n    public static func < (lhs: Self, rhs: Self) -> Bool {\n        lhs.value < rhs.value\n    }\n\n    // MARK: Internal\n\n    let quran: Quran\n    let value: Int\n    let keyPath: KeyPath<Quran, [T]>\n\n    var description: String {\n        \"<\\(T.self) value=\\(value)>\"\n    }\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/Reading.swift",
    "content": "//\n//  Reading.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-02-14.\n//\n\nimport Foundation\n\npublic enum Reading: Int {\n    case hafs_1405 = 0\n    case hafs_1440 = 1\n    case tajweed = 2\n    case hafs_1421 = 3\n    case hafs_1441 = 4\n    case hafs_1439 = 5\n\n    // MARK: Public\n\n    public static let allReadings: [Reading] = [\n        .hafs_1405, .tajweed, .hafs_1421, .hafs_1440, .hafs_1439, .hafs_1441,\n    ]\n\n    public var quran: Quran {\n        switch self {\n        case .hafs_1405:\n            return .hafsMadani1405\n        case .hafs_1440:\n            return .hafsMadani1440\n        case .hafs_1421:\n            return .hafsMadani1440\n        case .hafs_1439:\n            return .hafsMadani1440\n        case .hafs_1441:\n            return .hafsMadani1440\n        case .tajweed:\n            return .hafsMadani1405\n        }\n    }\n\n    public var usesLinePages: Bool {\n        linePageAssetWidth != nil\n    }\n\n    public var linePageAssetWidth: Int? {\n        switch self {\n        case .hafs_1439:\n            return 1080\n        case .hafs_1441:\n            return 1440\n        default:\n            return nil\n        }\n    }\n\n    public var imageAssetWidth: Int {\n        switch self {\n        case .hafs_1405:\n            return 1920\n        case .hafs_1421:\n            return 1120\n        case .hafs_1440:\n            return 1352\n        case .hafs_1439:\n            return 1080\n        case .hafs_1441:\n            return 1440\n        case .tajweed:\n            return 1280\n        }\n    }\n\n    public var usesBlueLinePageChrome: Bool {\n        self == .hafs_1439\n    }\n\n    public var usesInvertedQuranImageRenderingInDarkMode: Bool {\n        switch self {\n        case .hafs_1440, .hafs_1439, .hafs_1441, .tajweed:\n            return true\n        case .hafs_1405, .hafs_1421:\n            return false\n        }\n    }\n\n    public func ayahInfoDatabase(in directory: URL) -> URL {\n        let width = imageAssetWidth\n        return directory\n            .appendingPathComponent(\"images_\\(width)\")\n            .appendingPathComponent(\"databases\")\n            .appendingPathComponent(\"ayahinfo_\\(width).db\")\n    }\n\n    public func imagesDirectory(in directory: URL) -> URL {\n        let width = imageAssetWidth\n        return directory\n            .appendingPathComponent(\"images_\\(width)\")\n            .appendingPathComponent(\"width_\\(width)\")\n    }\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/ReadingInfo/Madani1405QuranReadingInfoRawData.swift",
    "content": "//\n//  Madani1405QuranReadingInfoRawData.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 3/22/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nstruct Madani1405QuranReadingInfoRawData: QuranReadingInfoRawData {\n    var arabicBesmAllah: String { \"بِسۡمِ ٱللَّهِ ٱلرَّحۡمَٰنِ ٱلرَّحِيمِ\" }\n\n    var startPageOfSura: [Int] {\n        [\n            1, 2, 50, 77, 106, 128, 151, 177, 187, 208, 221, 235, 249, 255, 262,\n            267, 282, 293, 305, 312, 322, 332, 342, 350, 359, 367, 377, 385, 396,\n            404, 411, 415, 418, 428, 434, 440, 446, 453, 458, 467, 477, 483, 489,\n            496, 499, 502, 507, 511, 515, 518, 520, 523, 526, 528, 531, 534, 537,\n            542, 545, 549, 551, 553, 554, 556, 558, 560, 562, 564, 566, 568, 570,\n            572, 574, 575, 577, 578, 580, 582, 583, 585, 586, 587, 587, 589, 590,\n            591, 591, 592, 593, 594, 595, 595, 596, 596, 597, 597, 598, 598, 599,\n            599, 600, 600, 601, 601, 601, 602, 602, 602, 603, 603, 603, 604, 604,\n            604,\n        ]\n    }\n\n    var startSuraOfPage: [Int] {\n        [\n            1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n            2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n            2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n            3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n            4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n            5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n            6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n            7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,\n            9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10,\n            10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n            11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13,\n            13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 16,\n            16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17,\n            17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,\n            19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,\n            21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22,\n            22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n            24, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,\n            27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n            28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 31, 31,\n            31, 31, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34,\n            34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 37, 37, 37,\n            37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39,\n            39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 42, 42,\n            42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 44, 44, 44, 45, 45, 45, 45,\n            46, 46, 46, 46, 47, 47, 47, 47, 48, 48, 48, 48, 48, 49, 49, 50, 50, 50,\n            51, 51, 51, 52, 52, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57,\n            57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 60, 60, 60, 61, 62, 62, 63, 64,\n            64, 65, 65, 66, 66, 67, 67, 67, 68, 68, 69, 69, 70, 70, 71, 72, 72, 73,\n            73, 74, 74, 75, 76, 76, 77, 78, 78, 79, 80, 81, 82, 83, 83, 85, 86, 87,\n            89, 89, 91, 92, 95, 97, 98, 100, 103, 106, 109, 112,\n        ]\n    }\n\n    var startAyahOfPage: [Int] {\n        [\n            1, 1, 6, 17, 25, 30, 38, 49, 58, 62, 70, 77, 84, 89, 94, 102, 106, 113,\n            120, 127, 135, 142, 146, 154, 164, 170, 177, 182, 187, 191, 197, 203,\n            211, 216, 220, 225, 231, 234, 238, 246, 249, 253, 257, 260, 265, 270,\n            275, 282, 283, 1, 10, 16, 23, 30, 38, 46, 53, 62, 71, 78, 84, 92, 101,\n            109, 116, 122, 133, 141, 149, 154, 158, 166, 174, 181, 187, 195, 1, 7,\n            12, 15, 20, 24, 27, 34, 38, 45, 52, 60, 66, 75, 80, 87, 92, 95, 102,\n            106, 114, 122, 128, 135, 141, 148, 155, 163, 171, 176, 3, 6, 10, 14,\n            18, 24, 32, 37, 42, 46, 51, 58, 65, 71, 77, 83, 90, 96, 104, 109, 114,\n            1, 9, 19, 28, 36, 45, 53, 60, 69, 74, 82, 91, 95, 102, 111, 119, 125,\n            132, 138, 143, 147, 152, 158, 1, 12, 23, 31, 38, 44, 52, 58, 68, 74,\n            82, 88, 96, 105, 121, 131, 138, 144, 150, 156, 160, 164, 171, 179, 188,\n            196, 1, 9, 17, 26, 34, 41, 46, 53, 62, 70, 1, 7, 14, 21, 27, 32, 37,\n            41, 48, 55, 62, 69, 73, 80, 87, 94, 100, 107, 112, 118, 123, 1, 7, 15,\n            21, 26, 34, 43, 54, 62, 71, 79, 89, 98, 107, 6, 13, 20, 29, 38, 46, 54,\n            63, 72, 82, 89, 98, 109, 118, 5, 15, 23, 31, 38, 44, 53, 64, 70, 79,\n            87, 96, 104, 1, 6, 14, 19, 29, 35, 43, 6, 11, 19, 25, 34, 43, 1, 16,\n            32, 52, 71, 91, 7, 15, 27, 35, 43, 55, 65, 73, 80, 88, 94, 103, 111,\n            119, 1, 8, 18, 28, 39, 50, 59, 67, 76, 87, 97, 105, 5, 16, 21, 28, 35,\n            46, 54, 62, 75, 84, 98, 1, 12, 26, 39, 52, 65, 77, 96, 13, 38, 52, 65,\n            77, 88, 99, 114, 126, 1, 11, 25, 36, 45, 58, 73, 82, 91, 102, 1, 6,\n            16, 24, 31, 39, 47, 56, 65, 73, 1, 18, 28, 43, 60, 75, 90, 105, 1,\n            11, 21, 28, 32, 37, 44, 54, 59, 62, 3, 12, 21, 33, 44, 56, 68, 1, 20,\n            40, 61, 84, 112, 137, 160, 184, 207, 1, 14, 23, 36, 45, 56, 64, 77,\n            89, 6, 14, 22, 29, 36, 44, 51, 60, 71, 78, 85, 7, 15, 24, 31, 39, 46,\n            53, 64, 6, 16, 25, 33, 42, 51, 1, 12, 20, 29, 1, 12, 21, 1, 7, 16, 23,\n            31, 36, 44, 51, 55, 63, 1, 8, 15, 23, 32, 40, 49, 4, 12, 19, 31, 39,\n            45, 13, 28, 41, 55, 71, 1, 25, 52, 77, 103, 127, 154, 1, 17, 27, 43,\n            62, 84, 6, 11, 22, 32, 41, 48, 57, 68, 75, 8, 17, 26, 34, 41, 50, 59,\n            67, 78, 1, 12, 21, 30, 39, 47, 1, 11, 16, 23, 32, 45, 52, 11, 23, 34,\n            48, 61, 74, 1, 19, 40, 1, 14, 23, 33, 6, 15, 21, 29, 1, 12, 20, 30, 1,\n            10, 16, 24, 29, 5, 12, 1, 16, 36, 7, 31, 52, 15, 32, 1, 27, 45, 7, 28,\n            50, 17, 41, 68, 17, 51, 77, 4, 12, 19, 25, 1, 7, 12, 22, 4, 10, 17, 1,\n            6, 12, 6, 1, 9, 5, 1, 10, 1, 6, 1, 8, 1, 13, 27, 16, 43, 9, 35, 11, 40,\n            11, 1, 14, 1, 20, 18, 48, 20, 6, 26, 20, 1, 31, 16, 1, 1, 1, 7, 35, 1,\n            1, 16, 1, 24, 1, 15, 1, 1, 8, 10, 1, 1, 1, 1,\n        ]\n    }\n\n    var numberOfAyahsInSura: [Int] {\n        [\n            7, 286, 200, 176, 120, 165, 206, 75, 129, 109, 123, 111,\n            43, 52, 99, 128, 111, 110, 98, 135, 112, 78, 118, 64, 77,\n            227, 93, 88, 69, 60, 34, 30, 73, 54, 45, 83, 182, 88, 75,\n            85, 54, 53, 89, 59, 37, 35, 38, 29, 18, 45, 60, 49, 62, 55,\n            78, 96, 29, 22, 24, 13, 14, 11, 11, 18, 12, 12, 30, 52, 52,\n            44, 28, 28, 20, 56, 40, 31, 50, 40, 46, 42, 29, 19, 36, 25,\n            22, 17, 19, 26, 30, 20, 15, 21, 11, 8, 8, 19, 5, 8, 8, 11,\n            11, 8, 3, 9, 5, 4, 7, 3, 6, 3, 5, 4, 5, 6,\n        ]\n    }\n\n    var isMakkiSura: [Bool] {\n        [\n            // 1 - 10\n            true, false, false, false, false, true, true, false, false, true,\n            // 11 - 20\n            true, true, false, true, true, true, true, true, true, true,\n            // 21 - 30\n            true, false, true, false, true, true, true, true, true, true,\n            // 31 - 40\n            true, true, false, true, true, true, true, true, true, true,\n            // 41 - 50\n            true, true, true, true, true, true, false, false, false, true,\n            // 51 - 60\n            true, true, true, true, false, true, false, false, false, false,\n            // 61 - 70\n            false, false, false, false, false, false, true, true, true, true,\n            // 71 - 80\n            true, true, true, true, true, false, true, true, true, true,\n            // 81 - 90\n            true, true, true, true, true, true, true, true, true, true,\n            // 91 - 100\n            true, true, true, true, true, true, true, false, false, true,\n            // 101 - 110\n            true, true, true, true, true, true, true, true, true, false,\n            // 111 - 114\n            true, true, true, true,\n        ]\n    }\n\n    var quarters: [(sura: Int, ayah: Int)] {\n        [\n            // hizb 1\n            (1, 1), (2, 26), (2, 44), (2, 60),\n\n            // hizb 2\n            (2, 75), (2, 92), (2, 106), (2, 124),\n\n            // hizb 3\n            (2, 142), (2, 158), (2, 177), (2, 189),\n\n            // hizb 4\n            (2, 203), (2, 219), (2, 233), (2, 243),\n\n            // hizb 5\n            (2, 253), (2, 263), (2, 272), (2, 283),\n\n            // hizb 6\n            (3, 15), (3, 33), (3, 52), (3, 75),\n\n            // hizb 7\n            (3, 93), (3, 113), (3, 133), (3, 153),\n\n            // hizb 8\n            (3, 171), (3, 186), (4, 1), (4, 12),\n\n            // hizb 9\n            (4, 24), (4, 36), (4, 58), (4, 74),\n\n            // hizb 10\n            (4, 88), (4, 100), (4, 114), (4, 135),\n\n            // hizb 11\n            (4, 148), (4, 163), (5, 1), (5, 12),\n\n            // hizb 12\n            (5, 27), (5, 41), (5, 51), (5, 67),\n\n            // hizb 13\n            (5, 82), (5, 97), (5, 109), (6, 13),\n\n            // hizb 14\n            (6, 36), (6, 59), (6, 74), (6, 95),\n\n            // hizb 15\n            (6, 111), (6, 127), (6, 141), (6, 151),\n\n            // hizb 16\n            (7, 1), (7, 31), (7, 47), (7, 65),\n\n            // hizb 17\n            (7, 88), (7, 117), (7, 142), (7, 156),\n\n            // hizb 18\n            (7, 171), (7, 189), (8, 1), (8, 22),\n\n            // hizb 19\n            (8, 41), (8, 61), (9, 1), (9, 19),\n\n            // hizb 20\n            (9, 34), (9, 46), (9, 60), (9, 75),\n\n            // hizb 21\n            (9, 93), (9, 111), (9, 122), (10, 11),\n\n            // hizb 22\n            (10, 26), (10, 53), (10, 71), (10, 90),\n\n            // hizb 23\n            (11, 6), (11, 24), (11, 41), (11, 61),\n\n            // hizb 24\n            (11, 84), (11, 108), (12, 7), (12, 30),\n\n            // hizb 25\n            (12, 53), (12, 77), (12, 101), (13, 5),\n\n            // hizb 26\n            (13, 19), (13, 35), (14, 10), (14, 28),\n\n            // hizb 27\n            (15, 1), (15, 49), (16, 1), (16, 30),\n\n            // hizb 28\n            (16, 51), (16, 75), (16, 90), (16, 111),\n\n            // hizb 29\n            (17, 1), (17, 23), (17, 50), (17, 70),\n\n            // hizb 30\n            (17, 99), (18, 17), (18, 32), (18, 51),\n\n            // hizb 31\n            (18, 75), (18, 99), (19, 22), (19, 59),\n\n            // hizb 32\n            (20, 1), (20, 55), (20, 83), (20, 111),\n\n            // hizb 33\n            (21, 1), (21, 29), (21, 51), (21, 83),\n\n            // hizb 34\n            (22, 1), (22, 19), (22, 38), (22, 60),\n\n            // hizb 35\n            (23, 1), (23, 36), (23, 75), (24, 1),\n\n            // hizb 36\n            (24, 21), (24, 35), (24, 53), (25, 1),\n\n            // hizb 37\n            (25, 21), (25, 53), (26, 1), (26, 52),\n\n            // hizb 38\n            (26, 111), (26, 181), (27, 1), (27, 27),\n\n            // hizb 39\n            (27, 56), (27, 82), (28, 12), (28, 29),\n\n            // hizb 40\n            (28, 51), (28, 76), (29, 1), (29, 26),\n\n            // hizb 41\n            (29, 46), (30, 1), (30, 31), (30, 54),\n\n            // hizb 42\n            (31, 22), (32, 11), (33, 1), (33, 18),\n\n            // hizb 43\n            (33, 31), (33, 51), (33, 60), (34, 10),\n\n            // hizb 44\n            (34, 24), (34, 46), (35, 15), (35, 41),\n\n            // hizb 45\n            (36, 28), (36, 60), (37, 22), (37, 83),\n\n            // hizb 46\n            (37, 145), (38, 21), (38, 52), (39, 8),\n\n            // hizb 47\n            (39, 32), (39, 53), (40, 1), (40, 21),\n\n            // hizb 48\n            (40, 41), (40, 66), (41, 9), (41, 25),\n\n            // hizb 49\n            (41, 47), (42, 13), (42, 27), (42, 51),\n\n            // hizb 50\n            (43, 24), (43, 57), (44, 17), (45, 12),\n\n            // hizb 51\n            (46, 1), (46, 21), (47, 10), (47, 33),\n\n            // hizb 52\n            (48, 18), (49, 1), (49, 14), (50, 27),\n\n            // hizb 53\n            (51, 31), (52, 24), (53, 26), (54, 9),\n\n            // hizb 54\n            (55, 1), (56, 1), (56, 75), (57, 16),\n\n            // hizb 55\n            (58, 1), (58, 14), (59, 11), (60, 7),\n\n            // hizb 56\n            (62, 1), (63, 4), (65, 1), (66, 1),\n\n            // hizb 57\n            (67, 1), (68, 1), (69, 1), (70, 19),\n\n            // hizb 58\n            (72, 1), (73, 20), (75, 1), (76, 19),\n\n            // hizb 59\n            (78, 1), (80, 1), (82, 1), (84, 1),\n\n            // hizb 60\n            (87, 1), (90, 1), (94, 1), (100, 9),\n        ]\n    }\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/ReadingInfo/Madani1440QuranReadingInfoRawData.swift",
    "content": "//\n//  Madani1440QuranReadingInfoRawData.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-04-08.\n//\n\nstruct Madani1440QuranReadingInfoRawData: QuranReadingInfoRawData {\n    // MARK: Internal\n\n    var arabicBesmAllah: String { classic.arabicBesmAllah }\n\n    var startPageOfSura: [Int] {\n        classic.startPageOfSura\n    }\n\n    var startSuraOfPage: [Int] {\n        [\n            1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n            2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n            2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n            3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n            4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n            5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,\n            6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n            7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,\n            9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10,\n            10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,\n            11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13,\n            13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 16,\n            16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17,\n            17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,\n            19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,\n            21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22,\n            22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n            24, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,\n            27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n            28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 31, 31,\n            31, 31, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34,\n            34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 37, 37, 37,\n            37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39,\n            39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 42, 42,\n            42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 44, 44, 44, 45, 45, 45, 45,\n            46, 46, 46, 46, 47, 47, 47, 47, 48, 48, 48, 48, 48, 49, 49, 50, 50, 50,\n            51, 51, 51, 52, 52, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57,\n            57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 60, 60, 60, 61, 62, 62, 63, 64,\n            64, 65, 65, 66, 66, 67, 67, 67, 68, 68, 69, 69, 70, 70, 71, 72, 72, 73,\n            73, 74, 74, 75, 76, 76, 77, 78, 78, 79, 80, 80, 82, 83, 83, 84, 86, 87,\n            88, 89, 90, 92, 94, 96, 98, 100, 103, 106, 109, 112,\n        ]\n    }\n\n    var startAyahOfPage: [Int] {\n        [\n            1, 1, 6, 17, 25, 30, 38, 49, 58, 62, 70, 77, 84, 89, 94, 102, 106, 113,\n            120, 127, 135, 142, 146, 154, 164, 170, 177, 182, 187, 191, 197, 203, 211,\n            216, 220, 225, 231, 234, 238, 246, 249, 253, 257, 260, 265, 270, 275, 282,\n            283, 1, 10, 16, 23, 30, 38, 46, 53, 62, 71, 78, 84, 92, 101, 109, 116, 122,\n            133, 141, 149, 154, 158, 166, 174, 181, 187, 195, 1, 7, 12, 15, 20, 24, 27,\n            34, 38, 45, 52, 60, 66, 75, 80, 87, 92, 95, 102, 106, 114, 122, 128, 135,\n            141, 148, 155, 163, 171, 176, 3, 6, 10, 14, 18, 24, 32, 37, 42, 46, 51, 58,\n            65, 71, 78, 84, 91, 96, 104, 109, 114, 1, 9, 19, 28, 36, 45, 53, 60, 69, 74,\n            82, 91, 95, 102, 111, 119, 125, 131, 138, 143, 147, 152, 158, 1, 12, 23, 31,\n            38, 44, 52, 58, 68, 74, 82, 88, 96, 105, 121, 131, 138, 144, 150, 156, 160,\n            164, 171, 179, 188, 196, 1, 9, 17, 26, 34, 41, 46, 53, 62, 70, 1, 7, 14, 21,\n            27, 32, 37, 41, 48, 55, 62, 69, 73, 80, 87, 94, 100, 107, 112, 118, 123, 1,\n            7, 15, 21, 26, 34, 43, 54, 62, 71, 79, 89, 98, 107, 6, 13, 20, 29, 38, 46,\n            54, 63, 72, 82, 89, 98, 109, 118, 5, 15, 23, 31, 38, 44, 53, 64, 70, 79, 87,\n            96, 104, 1, 6, 14, 19, 29, 35, 43, 6, 11, 19, 25, 34, 43, 1, 16, 32, 52, 71,\n            91, 7, 15, 27, 35, 43, 55, 65, 73, 80, 88, 94, 103, 111, 119, 1, 8, 18, 28,\n            39, 50, 59, 67, 76, 87, 97, 105, 5, 16, 21, 28, 35, 46, 54, 62, 75, 84, 98,\n            1, 12, 26, 39, 52, 65, 77, 96, 13, 38, 52, 65, 77, 88, 99, 114, 126, 1, 11,\n            25, 36, 45, 58, 73, 82, 91, 102, 1, 6, 16, 24, 31, 39, 47, 56, 65, 73, 1, 18,\n            28, 43, 60, 75, 90, 105, 1, 11, 21, 28, 32, 37, 44, 54, 59, 62, 3, 12, 21, 33,\n            44, 56, 68, 1, 20, 40, 61, 84, 112, 137, 160, 184, 207, 1, 14, 23, 36, 45, 56,\n            64, 77, 89, 6, 14, 22, 29, 36, 44, 51, 60, 71, 78, 85, 7, 15, 24, 31, 39, 46,\n            53, 64, 6, 16, 25, 33, 42, 51, 1, 12, 20, 29, 1, 12, 21, 1, 7, 16, 23, 31, 36,\n            44, 51, 55, 63, 1, 8, 15, 23, 32, 40, 49, 4, 12, 19, 31, 39, 45, 13, 28, 41,\n            55, 71, 1, 25, 52, 77, 103, 127, 154, 1, 17, 27, 43, 62, 84, 6, 11, 22, 32, 41,\n            48, 57, 68, 75, 8, 17, 26, 34, 41, 50, 59, 67, 78, 1, 12, 21, 30, 39, 47, 1, 11,\n            16, 23, 32, 45, 52, 11, 23, 34, 48, 61, 74, 1, 19, 40, 1, 14, 23, 33, 6, 15, 21,\n            29, 1, 12, 20, 30, 1, 10, 16, 24, 29, 5, 12, 1, 16, 36, 7, 31, 52, 15, 32, 1, 27,\n            45, 7, 28, 50, 19, 42, 70, 17, 51, 77, 4, 12, 19, 25, 1, 7, 12, 22, 4, 10, 17, 1,\n            6, 12, 6, 1, 9, 5, 1, 10, 1, 6, 1, 8, 1, 13, 27, 17, 43, 9, 36, 11, 41, 11, 1, 14,\n            1, 20, 19, 48, 20, 6, 26, 20, 1, 31, 17, 1, 41, 1, 5, 34, 25, 1, 11, 23, 23, 19,\n            10, 3, 13, 6, 6, 1, 1, 1, 1,\n        ]\n    }\n\n    var numberOfAyahsInSura: [Int] {\n        classic.numberOfAyahsInSura\n    }\n\n    var isMakkiSura: [Bool] {\n        classic.isMakkiSura\n    }\n\n    var quarters: [(sura: Int, ayah: Int)] {\n        classic.quarters\n    }\n\n    // MARK: Private\n\n    private let classic = Madani1405QuranReadingInfoRawData()\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/ReadingInfo/QuranReadingInfoRawData.swift",
    "content": "//\n//  QuranReadingInfoRawData.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 3/22/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nprotocol QuranReadingInfoRawData: Sendable {\n    var arabicBesmAllah: String { get }\n\n    var startPageOfSura: [Int] { get }\n    var startSuraOfPage: [Int] { get }\n    var startAyahOfPage: [Int] { get }\n    var numberOfAyahsInSura: [Int] { get }\n    var isMakkiSura: [Bool] { get }\n    var quarters: [(sura: Int, ayah: Int)] { get }\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/Sura.swift",
    "content": "//\n//  Sura.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/22/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\npublic struct Sura: QuranValueGroup, Sendable, Identifiable {\n    // MARK: Lifecycle\n\n    public init?(quran: Quran, suraNumber: Int) {\n        if !quran.surasRange.contains(suraNumber) {\n            return nil\n        }\n        storage = QuranValueStorage(quran: quran, value: suraNumber, keyPath: \\.suras)\n    }\n\n    init(_ storage: QuranValueStorage<Self>) {\n        self.storage = storage\n    }\n\n    // MARK: Public\n\n    public var id: Sura { self }\n\n    public var suraNumber: Int { storage.value }\n    public var quran: Quran {\n        storage.quran\n    }\n\n    public var startsWithBesmAllah: Bool {\n        // Al-fatiha & At-tawba\n        self != quran.suras.first && suraNumber != 9\n    }\n\n    public var isMakki: Bool {\n        quran.raw.isMakkiSura[suraNumber - 1]\n    }\n\n    public var page: Page {\n        Page(quran: quran, pageNumber: quran.raw.startPageOfSura[suraNumber - 1])!\n    }\n\n    public var firstVerse: AyahNumber {\n        AyahNumber(sura: self, ayah: 1)!\n    }\n\n    public var lastVerse: AyahNumber {\n        AyahNumber(sura: self, ayah: numberOfVerses)!\n    }\n\n    // MARK: Internal\n\n    let storage: QuranValueStorage<Self>\n\n    var numberOfVerses: Int {\n        quran.raw.numberOfAyahsInSura[suraNumber - 1]\n    }\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/Util.swift",
    "content": "//\n//  Util.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-01-08.\n//\n\nextension RandomAccessCollection {\n    func binarySearchFirst(predicate: (Element) -> Bool) -> Element {\n        let index = binarySearchIndex(predicate: predicate)\n        let previousIndex = self.index(index, offsetBy: -1)\n        return self[previousIndex]\n    }\n\n    /// Finds such index N that predicate is true for all elements up to\n    /// but not including the index N, and is false for all elements\n    /// starting with index N.\n    /// Behavior is undefined if there is no such N.\n    func binarySearchIndex(predicate: (Element) -> Bool) -> Index {\n        var low = startIndex\n        var high = endIndex\n        while low != high {\n            let mid = index(low, offsetBy: distance(from: low, to: high) / 2)\n            if predicate(self[mid]) {\n                low = index(after: mid)\n            } else {\n                high = mid\n            }\n        }\n        return low\n    }\n}\n"
  },
  {
    "path": "Model/QuranKit/Sources/Word.swift",
    "content": "//\n//  Word.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-17.\n//\n\npublic struct Word: Hashable, Comparable {\n    // MARK: Lifecycle\n\n    public init(verse: AyahNumber, wordNumber: Int) {\n        self.verse = verse\n        self.wordNumber = wordNumber\n    }\n\n    // MARK: Public\n\n    public let verse: AyahNumber\n    public let wordNumber: Int\n\n    public static func < (lhs: Word, rhs: Word) -> Bool {\n        if lhs.verse == rhs.verse {\n            return lhs.wordNumber < rhs.wordNumber\n        }\n        return lhs.verse < rhs.verse\n    }\n}\n\nextension Word: Encodable {\n    enum CodingKeys: String, CodingKey {\n        case verse\n        case word\n    }\n\n    public func encode(to encoder: Encoder) throws {\n        var container = encoder.container(keyedBy: CodingKeys.self)\n        try container.encode(verse, forKey: .verse)\n        try container.encode(wordNumber, forKey: .word)\n    }\n}\n"
  },
  {
    "path": "Model/QuranKit/Tests/AyahNumberTests.swift",
    "content": "//\n//  AyahNumberTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-11.\n//\n\nimport XCTest\n@testable import QuranKit\n\nfinal class AyahNumberTests: XCTestCase {\n    // MARK: Internal\n\n    func testVerses() throws {\n        let verses = quran.verses\n        XCTAssertEqual(verses.count, 6236)\n        XCTAssertEqual(verses.first!.sura.suraNumber, 1)\n        XCTAssertEqual(verses.first!.ayah, 1)\n        XCTAssertEqual(verses.last!.sura.suraNumber, 114)\n        XCTAssertEqual(verses.last!.ayah, 6)\n        XCTAssertEqual(verses[21].sura.suraNumber, 2)\n        XCTAssertEqual(verses[21].ayah, 15)\n\n        XCTAssertEqual(verses[0].description, \"<AyahNumber sura=1 ayah=1>\")\n        XCTAssertEqual(verses[29].description, \"<AyahNumber sura=2 ayah=23>\")\n\n        XCTAssertEqual(verses[1], verses[0].next)\n        XCTAssertEqual(verses[29], verses[28].next)\n        XCTAssertEqual(verses[29], verses[27].next?.next)\n        XCTAssertNil(verses.last!.next)\n\n        XCTAssertEqual(verses[6].sura.suraNumber, 1)\n        XCTAssertEqual(verses[6].next?.sura.suraNumber, 2)\n        XCTAssertEqual(verses[6].next, verses[7])\n\n        XCTAssertEqual(verses[7].sura.suraNumber, 2)\n        XCTAssertEqual(verses[7].previous?.sura.suraNumber, 1)\n        XCTAssertEqual(verses[7].previous, verses[6])\n\n        XCTAssertEqual(verses[0], verses[1].previous)\n        XCTAssertEqual(verses[28], verses[29].previous)\n        XCTAssertEqual(verses[27], verses[29].previous?.previous)\n        XCTAssertNil(verses[0].previous)\n\n        XCTAssertEqual(verses[0].page.pageNumber, 1)\n        XCTAssertEqual(verses.last!.page.pageNumber, 604)\n        XCTAssertEqual(quran.suras[111].firstVerse.page.pageNumber, 604)\n        XCTAssertEqual(quran.suras[111].firstVerse.previous!.page.pageNumber, 603)\n        XCTAssertEqual(verses[29].page.pageNumber, 4)\n        XCTAssertEqual(verses[3].page.pageNumber, 1)\n        XCTAssertEqual(verses[6235].page.pageNumber, 604)\n\n        XCTAssertEqual(verses[4].array(to: verses[4]), [verses[4]])\n        XCTAssertEqual(verses[4].array(to: verses[10]), Array(verses[4 ... 10]))\n        XCTAssertEqual(verses[0].array(to: verses[6235]), verses)\n    }\n\n    // MARK: Private\n\n    private let quran = Quran.hafsMadani1405\n}\n"
  },
  {
    "path": "Model/QuranKit/Tests/HizbTests.swift",
    "content": "//\n//  HizbTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-11.\n//\n\nimport XCTest\n@testable import QuranKit\n\nfinal class HizbTests: XCTestCase {\n    // MARK: Internal\n\n    func testHizbs() throws {\n        let hizbs = quran.hizbs\n        XCTAssertEqual(hizbs.count, 60)\n        XCTAssertEqual(hizbs.first!.hizbNumber, 1)\n        XCTAssertEqual(hizbs.last!.hizbNumber, 60)\n        XCTAssertEqual(hizbs[21].hizbNumber, 22)\n\n        XCTAssertEqual(hizbs[0].description, \"<Hizb value=1>\")\n        XCTAssertEqual(hizbs[29].description, \"<Hizb value=30>\")\n\n        XCTAssertEqual(hizbs[1], hizbs[0].next)\n        XCTAssertEqual(hizbs[29], hizbs[28].next)\n        XCTAssertEqual(hizbs[29], hizbs[27].next?.next)\n        XCTAssertNil(hizbs.last!.next)\n\n        XCTAssertEqual(hizbs[0], hizbs[1].previous)\n        XCTAssertEqual(hizbs[28], hizbs[29].previous)\n        XCTAssertEqual(hizbs[27], hizbs[29].previous?.previous)\n        XCTAssertNil(hizbs[0].previous)\n\n        XCTAssertTrue(hizbs[3] == hizbs[3])\n        XCTAssertTrue(hizbs[3] < hizbs[4])\n        XCTAssertTrue(hizbs[3] > hizbs[2])\n\n        XCTAssertEqual(hizbs[0].quarter.quarterNumber, 1)\n        XCTAssertEqual(hizbs[1].quarter.quarterNumber, 5)\n        XCTAssertEqual(hizbs[29].quarter.quarterNumber, 117)\n        XCTAssertEqual(hizbs[3].quarter.quarterNumber, 13)\n        XCTAssertEqual(hizbs[17].quarter.quarterNumber, 69)\n\n        XCTAssertEqual(hizbs[0].juz.juzNumber, 1)\n        XCTAssertEqual(hizbs[1].juz.juzNumber, 1)\n        XCTAssertEqual(hizbs[3].juz.juzNumber, 2)\n        XCTAssertEqual(hizbs[59].juz.juzNumber, 30)\n\n        XCTAssertEqual(hizbs[4].firstVerse.sura.suraNumber, 2)\n        XCTAssertEqual(hizbs[4].firstVerse.ayah, 253)\n        XCTAssertEqual(hizbs[5].firstVerse.sura.suraNumber, 3)\n        XCTAssertEqual(hizbs[5].firstVerse.ayah, 15)\n    }\n\n    // MARK: Private\n\n    private let quran = Quran.hafsMadani1405\n}\n"
  },
  {
    "path": "Model/QuranKit/Tests/JuzTests.swift",
    "content": "//\n//  JuzTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-11.\n//\n\nimport XCTest\n@testable import QuranKit\n\nfinal class JuzTests: XCTestCase {\n    // MARK: Internal\n\n    func testJuzs() throws {\n        let juzs = quran.juzs\n        XCTAssertEqual(juzs.count, 30)\n        XCTAssertEqual(juzs.first!.juzNumber, 1)\n        XCTAssertEqual(juzs.last!.juzNumber, 30)\n        XCTAssertEqual(juzs[21].juzNumber, 22)\n\n        XCTAssertEqual(juzs[0].description, \"<Juz value=1>\")\n        XCTAssertEqual(juzs[29].description, \"<Juz value=30>\")\n\n        XCTAssertEqual(juzs[1], juzs[0].next)\n        XCTAssertEqual(juzs[29], juzs[28].next)\n        XCTAssertEqual(juzs[29], juzs[27].next?.next)\n        XCTAssertNil(juzs.last!.next)\n\n        XCTAssertEqual(juzs[0], juzs[1].previous)\n        XCTAssertEqual(juzs[28], juzs[29].previous)\n        XCTAssertEqual(juzs[27], juzs[29].previous?.previous)\n        XCTAssertNil(juzs[0].previous)\n\n        XCTAssertTrue(juzs[3] == juzs[3])\n        XCTAssertTrue(juzs[3] < juzs[4])\n        XCTAssertTrue(juzs[3] > juzs[2])\n\n        XCTAssertEqual(juzs[29].page.pageNumber, 582)\n        XCTAssertEqual(juzs[25].page.pageNumber, 502)\n        XCTAssertEqual(juzs[3].page.pageNumber, 62)\n        XCTAssertEqual(juzs[0].page.pageNumber, 1)\n\n        XCTAssertEqual(juzs[29].hizb.hizbNumber, 59)\n        XCTAssertEqual(juzs[3].hizb.hizbNumber, 7)\n        XCTAssertEqual(juzs[15].hizb.hizbNumber, 31)\n\n        XCTAssertEqual(juzs[0].quarter.quarterNumber, 1)\n        XCTAssertEqual(juzs[1].quarter.quarterNumber, 9)\n        XCTAssertEqual(juzs[29].quarter.quarterNumber, 233)\n        XCTAssertEqual(juzs[3].quarter.quarterNumber, 25)\n        XCTAssertEqual(juzs[17].quarter.quarterNumber, 137)\n\n        XCTAssertEqual(juzs.first!.firstVerse.sura.suraNumber, 1)\n        XCTAssertEqual(juzs.first!.firstVerse.ayah, 1)\n        XCTAssertEqual(juzs.first!.lastVerse.sura.suraNumber, 2)\n        XCTAssertEqual(juzs.first!.lastVerse.ayah, 141)\n\n        XCTAssertEqual(juzs.last!.firstVerse.sura.suraNumber, 78)\n        XCTAssertEqual(juzs.last!.firstVerse.ayah, 1)\n        XCTAssertEqual(juzs.last!.lastVerse.sura.suraNumber, 114)\n        XCTAssertEqual(juzs.last!.lastVerse.ayah, 6)\n\n        XCTAssertEqual(juzs[10].firstVerse.sura.suraNumber, 9)\n        XCTAssertEqual(juzs[10].firstVerse.ayah, 93)\n        XCTAssertEqual(juzs[10].lastVerse.sura.suraNumber, 11)\n        XCTAssertEqual(juzs[10].lastVerse.ayah, 5)\n\n        XCTAssertEqual(juzs[24].firstVerse.sura.suraNumber, 41)\n        XCTAssertEqual(juzs[24].firstVerse.ayah, 47)\n        XCTAssertEqual(juzs[24].lastVerse.sura.suraNumber, 45)\n        XCTAssertEqual(juzs[24].lastVerse.ayah, 37)\n    }\n\n    // MARK: Private\n\n    private let quran = Quran.hafsMadani1405\n}\n"
  },
  {
    "path": "Model/QuranKit/Tests/PageTests.swift",
    "content": "//\n//  PageTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-11.\n//\n\nimport XCTest\n@testable import QuranKit\n\nfinal class PageTests: XCTestCase {\n    // MARK: Internal\n\n    func testPages() throws {\n        let pages = quran.pages\n        XCTAssertEqual(pages.count, 604)\n        XCTAssertEqual(pages.first!.pageNumber, 1)\n        XCTAssertEqual(pages.last!.pageNumber, 604)\n        XCTAssertEqual(pages[200].pageNumber, 201)\n\n        XCTAssertEqual(pages[0].description, \"<Page value=1>\")\n        XCTAssertEqual(pages[29].description, \"<Page value=30>\")\n\n        XCTAssertTrue(pages[3] == pages[3])\n        XCTAssertTrue(pages[3] < pages[4])\n        XCTAssertTrue(pages[3] > pages[2])\n\n        XCTAssertEqual(pages[1], pages[0].next)\n        XCTAssertEqual(pages[603], pages[602].next)\n        XCTAssertEqual(pages[603], pages[601].next?.next)\n        XCTAssertNil(pages.last!.next)\n\n        XCTAssertEqual(pages[0], pages[1].previous)\n        XCTAssertEqual(pages[602], pages[603].previous)\n        XCTAssertEqual(pages[601], pages[603].previous?.previous)\n        XCTAssertNil(pages[0].previous)\n\n        XCTAssertEqual(pages[602].startSura.suraNumber, 109)\n        XCTAssertEqual(pages[206].startSura.suraNumber, 9)\n        XCTAssertEqual(pages[207].startSura.suraNumber, 10)\n\n        XCTAssertEqual(pages[0].startJuz.juzNumber, 1)\n        XCTAssertEqual(pages.last!.startJuz.juzNumber, 30)\n        XCTAssertEqual(pages[540].startJuz.juzNumber, 27)\n        XCTAssertEqual(pages[541].startJuz.juzNumber, 28)\n        XCTAssertEqual(pages[542].startJuz.juzNumber, 28)\n        XCTAssertEqual(pages[599].startJuz.juzNumber, 30)\n        XCTAssertEqual(pages[1].startJuz.juzNumber, 1)\n        XCTAssertEqual(pages[207].startJuz.juzNumber, 11)\n\n        XCTAssertEqual(pages[0].quarter?.quarterNumber, 1)\n        XCTAssertNil(pages[1].quarter)\n        XCTAssertNil(pages[603].quarter)\n        XCTAssertEqual(pages[598].quarter?.quarterNumber, 240)\n\n        XCTAssertEqual(pages.first!.firstVerse.sura.suraNumber, 1)\n        XCTAssertEqual(pages.first!.firstVerse.ayah, 1)\n        XCTAssertEqual(pages.first!.lastVerse.sura.suraNumber, 1)\n        XCTAssertEqual(pages.first!.lastVerse.ayah, 7)\n\n        XCTAssertEqual(pages.last!.firstVerse.sura.suraNumber, 112)\n        XCTAssertEqual(pages.last!.firstVerse.ayah, 1)\n        XCTAssertEqual(pages.last!.lastVerse.sura.suraNumber, 114)\n        XCTAssertEqual(pages.last!.lastVerse.ayah, 6)\n\n        XCTAssertEqual(pages[395].firstVerse.sura.suraNumber, 28)\n        XCTAssertEqual(pages[395].firstVerse.ayah, 85)\n        XCTAssertEqual(pages[395].lastVerse.sura.suraNumber, 29)\n        XCTAssertEqual(pages[395].lastVerse.ayah, 6)\n    }\n\n    // MARK: Private\n\n    private let quran = Quran.hafsMadani1405\n}\n"
  },
  {
    "path": "Model/QuranKit/Tests/QuarterTests.swift",
    "content": "//\n//  QuarterTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-11.\n//\n\nimport XCTest\n@testable import QuranKit\n\nfinal class QuarterTests: XCTestCase {\n    // MARK: Internal\n\n    func testQuarters() throws {\n        let quarters = quran.quarters\n        XCTAssertEqual(quarters.count, 240)\n        XCTAssertEqual(quarters.first!.quarterNumber, 1)\n        XCTAssertEqual(quarters.last!.quarterNumber, 240)\n        XCTAssertEqual(quarters[21].quarterNumber, 22)\n\n        XCTAssertEqual(quarters[0].description, \"<Quarter value=1>\")\n        XCTAssertEqual(quarters[29].description, \"<Quarter value=30>\")\n\n        XCTAssertEqual(quarters[1], quarters[0].next)\n        XCTAssertEqual(quarters[29], quarters[28].next)\n        XCTAssertEqual(quarters[29], quarters[27].next?.next)\n        XCTAssertNil(quarters.last!.next)\n\n        XCTAssertEqual(quarters[0], quarters[1].previous)\n        XCTAssertEqual(quarters[28], quarters[29].previous)\n        XCTAssertEqual(quarters[27], quarters[29].previous?.previous)\n        XCTAssertNil(quarters[0].previous)\n\n        XCTAssertTrue(quarters[3] == quarters[3])\n        XCTAssertTrue(quarters[3] < quarters[4])\n        XCTAssertTrue(quarters[3] > quarters[2])\n\n        XCTAssertEqual(quarters[0].firstVerse.sura.suraNumber, 1)\n        XCTAssertEqual(quarters[0].firstVerse.ayah, 1)\n        XCTAssertEqual(quarters[239].firstVerse.sura.suraNumber, 100)\n        XCTAssertEqual(quarters[239].firstVerse.ayah, 9)\n        XCTAssertEqual(quarters[8].firstVerse.sura.suraNumber, 2)\n        XCTAssertEqual(quarters[8].firstVerse.ayah, 142)\n\n        XCTAssertEqual(quarters[0].page.pageNumber, 1)\n        XCTAssertEqual(quarters[7].page.pageNumber, 19)\n        XCTAssertEqual(quarters[8].page.pageNumber, 22)\n        XCTAssertEqual(quarters[239].page.pageNumber, 599)\n\n        XCTAssertEqual(quarters[0].juz.juzNumber, 1)\n        XCTAssertEqual(quarters[7].juz.juzNumber, 1)\n        XCTAssertEqual(quarters[8].juz.juzNumber, 2)\n        XCTAssertEqual(quarters[239].juz.juzNumber, 30)\n\n        XCTAssertEqual(quarters[0].hizb.hizbNumber, 1)\n        XCTAssertEqual(quarters[7].hizb.hizbNumber, 2)\n        XCTAssertEqual(quarters[8].hizb.hizbNumber, 3)\n        XCTAssertEqual(quarters[239].hizb.hizbNumber, 60)\n    }\n\n    func testQuartersJuzTime() {\n        measure {\n            let quarters = quran.quarters\n            _ = Dictionary(grouping: quarters, by: \\.juz)\n        }\n    }\n\n    // MARK: Private\n\n    private let quran = Quran.hafsMadani1405\n}\n"
  },
  {
    "path": "Model/QuranKit/Tests/SuraTests.swift",
    "content": "//\n//  SuraTests.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-11.\n//\n\nimport XCTest\n@testable import QuranKit\n\nfinal class SuraTests: XCTestCase {\n    // MARK: Internal\n\n    func testSuras() throws {\n        let suras = quran.suras\n        XCTAssertEqual(suras.count, 114)\n        XCTAssertEqual(suras.first!.suraNumber, 1)\n        XCTAssertEqual(suras.last!.suraNumber, 114)\n        XCTAssertEqual(suras[21].suraNumber, 22)\n\n        XCTAssertEqual(suras[0].description, \"<Sura value=1>\")\n        XCTAssertEqual(suras[29].description, \"<Sura value=30>\")\n\n        XCTAssertEqual(suras[1], suras[0].next)\n        XCTAssertEqual(suras[29], suras[28].next)\n        XCTAssertEqual(suras[29], suras[27].next?.next)\n        XCTAssertNil(suras.last!.next)\n\n        XCTAssertEqual(suras[0], suras[1].previous)\n        XCTAssertEqual(suras[28], suras[29].previous)\n        XCTAssertEqual(suras[27], suras[29].previous?.previous)\n        XCTAssertNil(suras[0].previous)\n\n        XCTAssertTrue(suras[3] == suras[3])\n        XCTAssertTrue(suras[3] < suras[4])\n        XCTAssertTrue(suras[3] > suras[2])\n\n        XCTAssertEqual(suras[0].startsWithBesmAllah, false)\n        XCTAssertEqual(suras[8].startsWithBesmAllah, false)\n        XCTAssertEqual(suras[17].startsWithBesmAllah, true)\n\n        XCTAssertEqual(suras[29].isMakki, true)\n        XCTAssertEqual(suras[3].isMakki, false)\n        XCTAssertEqual(suras[17].isMakki, true)\n\n        XCTAssertEqual(suras[112].page.pageNumber, 604)\n        XCTAssertEqual(suras[113].page.pageNumber, 604)\n        XCTAssertEqual(suras[17].page.pageNumber, 293)\n\n        XCTAssertEqual(suras[29].numberOfVerses, 60)\n        XCTAssertEqual(suras[3].numberOfVerses, 176)\n        XCTAssertEqual(suras[17].numberOfVerses, 110)\n\n        XCTAssertEqual(Set(suras[29].verses.map(\\.sura)), [suras[29]])\n        XCTAssertEqual(suras[29].verses.map(\\.ayah), Array(1 ... 60))\n\n        XCTAssertEqual(Set(suras[3].verses.map(\\.sura)), [suras[3]])\n        XCTAssertEqual(suras[3].verses.map(\\.ayah), Array(1 ... 176))\n\n        XCTAssertEqual(Set(suras[17].verses.map(\\.sura)), [suras[17]])\n        XCTAssertEqual(suras[17].verses.map(\\.ayah), Array(1 ... 110))\n\n        XCTAssertEqual(suras[4].array(to: suras[4]), [suras[4]])\n        XCTAssertEqual(suras[4].array(to: suras[10]), Array(suras[4 ... 10]))\n        XCTAssertEqual(suras[0].array(to: suras[113]), suras)\n\n        XCTAssertEqual(suras.first!.firstVerse.sura.suraNumber, 1)\n        XCTAssertEqual(suras.first!.firstVerse.ayah, 1)\n        XCTAssertEqual(suras.first!.lastVerse.sura.suraNumber, 1)\n        XCTAssertEqual(suras.first!.lastVerse.ayah, 7)\n\n        XCTAssertEqual(suras.last!.firstVerse.sura.suraNumber, 114)\n        XCTAssertEqual(suras.last!.firstVerse.ayah, 1)\n        XCTAssertEqual(suras.last!.lastVerse.sura.suraNumber, 114)\n        XCTAssertEqual(suras.last!.lastVerse.ayah, 6)\n\n        XCTAssertEqual(suras[24].firstVerse.sura.suraNumber, 25)\n        XCTAssertEqual(suras[24].firstVerse.ayah, 1)\n        XCTAssertEqual(suras[24].lastVerse.sura.suraNumber, 25)\n        XCTAssertEqual(suras[24].lastVerse.ayah, 77)\n    }\n\n    func testSurasPagesTime() {\n        measure {\n            let quran = Quran(raw: Madani1405QuranReadingInfoRawData())\n            let suras = quran.suras\n            _ = Dictionary(grouping: suras, by: { $0.page.startJuz })\n        }\n    }\n\n    func testSurasPagesCachedTime() {\n        let quran = Quran(raw: Madani1405QuranReadingInfoRawData())\n        let suras = quran.suras\n        _ = Dictionary(grouping: suras, by: { $0.page.startJuz })\n\n        measure {\n            let suras = quran.suras\n            _ = Dictionary(grouping: suras, by: { $0.page.startJuz })\n        }\n    }\n\n    // MARK: Private\n\n    private let quran = Quran.hafsMadani1405\n}\n"
  },
  {
    "path": "Model/QuranText/FontSize.swift",
    "content": "//\n//  FontSize.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/2/18.\n//\n\nimport SwiftUI\n\npublic enum FontSize: Int, CaseIterable, CustomStringConvertible {\n    case accessibility5 = -6\n    case accessibility4 = -5\n    case accessibility3 = -4\n    case accessibility2 = -3\n    case accessibility1 = -2\n    case xxxLarge = -1\n    case xxLarge = 0\n    case xLarge = 1\n    case large = 2\n    case medium = 3\n    case small = 4\n    case xSmall = 5\n\n    // MARK: Public\n\n    public var description: String {\n        switch self {\n        case .accessibility5: \"accessibility5\"\n        case .accessibility4: \"accessibility4\"\n        case .accessibility3: \"accessibility3\"\n        case .accessibility2: \"accessibility2\"\n        case .accessibility1: \"accessibility1\"\n        case .xxxLarge: \"xxxLarge\"\n        case .xxLarge: \"xxLarge\"\n        case .xLarge: \"xLarge\"\n        case .large: \"large\"\n        case .medium: \"medium\"\n        case .small: \"small\"\n        case .xSmall: \"xSmall\"\n        }\n    }\n}\n\nextension FontSize {\n    public var dynamicTypeSize: DynamicTypeSize {\n        switch self {\n        case .accessibility5: .accessibility5\n        case .accessibility4: .accessibility4\n        case .accessibility3: .accessibility3\n        case .accessibility2: .accessibility2\n        case .accessibility1: .accessibility1\n        case .xxxLarge: .xxxLarge\n        case .xxLarge: .xxLarge\n        case .xLarge: .xLarge\n        case .large: .large\n        case .medium: .medium\n        case .small: .small\n        case .xSmall: .xSmall\n        }\n    }\n}\n\nextension FontSize: Strideable {\n    public func distance(to other: FontSize) -> Int {\n        Stride(other.rawValue) - Stride(rawValue)\n    }\n\n    public func advanced(by n: Int) -> FontSize {\n        FontSize(rawValue: Stride(rawValue) + n)!\n    }\n}\n"
  },
  {
    "path": "Model/QuranText/QuranMode.swift",
    "content": "//\n//  QuranMode.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/25/18.\n//\n\npublic enum QuranMode {\n    case arabic\n    case translation\n}\n"
  },
  {
    "path": "Model/QuranText/SearchResults.swift",
    "content": "//\n//  SearchResults.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/15/17.\n//\n\nimport QuranKit\n\npublic struct SearchResult: Hashable, Identifiable {\n    // MARK: Lifecycle\n\n    public init(text: String, ranges: [Range<String.Index>], ayah: AyahNumber) {\n        self.text = text\n        self.ranges = ranges\n        self.ayah = ayah\n    }\n\n    // MARK: Public\n\n    public let text: String\n    public let ranges: [Range<String.Index>]\n    public let ayah: AyahNumber\n\n    public var id: Self { self }\n}\n\npublic struct SearchResults: Equatable, Identifiable {\n    public enum Source: Hashable, Comparable {\n        case quran\n        case translation(Translation)\n\n        // MARK: Public\n\n        public var name: String {\n            switch self {\n            case .quran: return \"Quran\"\n            case .translation: return \"Translation\"\n            }\n        }\n    }\n\n    // MARK: Lifecycle\n\n    public init(source: Source, items: [SearchResult]) {\n        self.source = source\n        self.items = items\n    }\n\n    // MARK: Public\n\n    public let source: Source\n    public let items: [SearchResult]\n\n    public var id: Source { source }\n}\n"
  },
  {
    "path": "Model/QuranText/TranslatedVerses.swift",
    "content": "//\n//  TranslatedVerses.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 3/23/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport QuranKit\n\npublic struct TranslationString: Hashable {\n    // MARK: Lifecycle\n\n    public init(text: String, quranRanges: [Range<String.Index>], footnoteRanges: [Range<String.Index>], footnotes: [Substring]) {\n        self.text = text\n        self.quranRanges = quranRanges\n        self.footnoteRanges = footnoteRanges\n        self.footnotes = footnotes\n    }\n\n    // MARK: Public\n\n    public let text: String\n    public let quranRanges: [Range<String.Index>]\n    public let footnoteRanges: [Range<String.Index>]\n    public let footnotes: [Substring]\n}\n\npublic enum TranslationText: Hashable {\n    case string(TranslationString)\n    case reference(AyahNumber)\n}\n\npublic struct VerseText: Equatable {\n    // MARK: Lifecycle\n\n    public init(arabicText: String, translations: [TranslationText], arabicPrefix: [String], arabicSuffix: [String]) {\n        self.arabicText = arabicText\n        self.translations = translations\n        self.arabicPrefix = arabicPrefix\n        self.arabicSuffix = arabicSuffix\n    }\n\n    // MARK: Public\n\n    public let arabicText: String\n    public let translations: [TranslationText] // count equals to TranslatedVerses.translations.count\n    public let arabicPrefix: [String]\n    public let arabicSuffix: [String]\n}\n\n// TODO: Remove\npublic struct TranslatedVerses: Equatable {\n    // MARK: Lifecycle\n\n    public init(translations: [Translation], verses: [VerseText]) {\n        self.translations = translations\n        self.verses = verses\n    }\n\n    // MARK: Public\n\n    public let translations: [Translation]\n    public let verses: [VerseText]\n}\n"
  },
  {
    "path": "Model/QuranText/Translation+URLs.swift",
    "content": "//\n//  Translation+URLs.swift\n//\n//\n//  Created by Afifi, Mohamed on 10/30/21.\n//\n\nimport Foundation\nimport Utilities\n\nprivate extension Translation {\n    static let compressedFileExtension = \"zip\"\n    static let translationsPathComponent = \"translations\"\n    static let localTranslationsPath = RelativeFilePath(translationsPathComponent, isDirectory: true)\n}\n\nextension Translation {\n    public static func isLocalTranslationPath(_ path: RelativeFilePath) -> Bool {\n        localTranslationsPath.isParent(of: path)\n    }\n\n    public var localPath: RelativeFilePath {\n        Self.localTranslationsPath.appendingPathComponent(fileName, isDirectory: false)\n    }\n\n    public var localFiles: [RelativeFilePath] {\n        possibleFileNames.map {\n            Translation.localTranslationsPath.appendingPathComponent($0, isDirectory: false)\n        }\n    }\n\n    public var unprocessedLocalPath: RelativeFilePath {\n        Translation.localTranslationsPath.appendingPathComponent(unprocessedFileName, isDirectory: false)\n    }\n\n    public var isUnprocessedFileZip: Bool {\n        unprocessedFileName.hasSuffix(Translation.compressedFileExtension)\n    }\n\n    private var possibleFileNames: [String] {\n        let unprocessedFileName = unprocessedFileName\n        if unprocessedFileName != fileName {\n            return [fileName, unprocessedFileName]\n        }\n        return [fileName]\n    }\n\n    var unprocessedFileName: String {\n        if fileURL.absoluteString.hasSuffix(Self.compressedFileExtension) {\n            return fileName.stringByDeletingPathExtension.stringByAppendingExtension(Self.compressedFileExtension)\n        }\n        return fileName\n    }\n}\n"
  },
  {
    "path": "Model/QuranText/Translation.swift",
    "content": "//\n//  Translation.swift\n//  Quran\n//\n//  Created by Ahmed El-Helw on 2/13/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Foundation\nimport Utilities\n\npublic struct Translation: Hashable, Sendable {\n    public typealias ID = Int\n\n    // MARK: Lifecycle\n\n    public init(id: ID, displayName: String, translator: String?, translatorForeign: String?, fileURL: URL, fileName: String, languageCode: String, version: Int, installedVersion: Int? = nil) {\n        self.id = id\n        self.displayName = displayName\n        self.translator = translator\n        self.translatorForeign = translatorForeign\n        self.fileURL = fileURL\n        self.fileName = fileName\n        self.languageCode = languageCode\n        self.version = version\n        self.installedVersion = installedVersion\n    }\n\n    // MARK: Public\n\n    public let id: ID\n    public let displayName: String\n    public let translator: String?\n    public let translatorForeign: String?\n    public let fileURL: URL\n    public let fileName: String\n    public let languageCode: String\n    public let version: Int\n    public var installedVersion: Int?\n\n    public var isDownloaded: Bool { installedVersion != nil }\n    public var needsUpgrade: Bool { installedVersion != version }\n\n    public var translationName: String {\n        translatorDisplayName ?? displayName\n    }\n\n    public var translatorDisplayName: String? {\n        translatorForeign ?? translator\n    }\n}\n\nextension Translation: Comparable {\n    public static func < (lhs: Translation, rhs: Translation) -> Bool {\n        let comparer = MultiPredicateComparer<Translation>(increasingOrderPredicates: [\n            { $0.displayName.localizedStandardCompare($1.displayName) == .orderedAscending },\n            { $0.translationName.localizedStandardCompare($1.translationName) == .orderedAscending },\n        ])\n        return comparer.areInIncreasingOrder(lhs: lhs, rhs: rhs)\n    }\n}\n"
  },
  {
    "path": "Model/QuranText/WordTextType.swift",
    "content": "//\n//  WordTextType.swift\n//\n//\n//  Created by Mohamed Afifi on 2021-12-17.\n//\n\npublic enum WordTextType: Int {\n    case translation\n    case transliteration\n}\n"
  },
  {
    "path": "Package.resolved",
    "content": "{\n  \"pins\" : [\n    {\n      \"identity\" : \"appauth-ios\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/openid/AppAuth-iOS\",\n      \"state\" : {\n        \"revision\" : \"2781038865a80e2c425a1da12cc1327bcd56501f\",\n        \"version\" : \"1.7.6\"\n      }\n    },\n    {\n      \"identity\" : \"combine-schedulers\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/combine-schedulers\",\n      \"state\" : {\n        \"revision\" : \"9dc9cbe4bc45c65164fa653a563d8d8db61b09bb\",\n        \"version\" : \"1.0.0\"\n      }\n    },\n    {\n      \"identity\" : \"genericdatasource\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/GenericDataSource/GenericDataSource\",\n      \"state\" : {\n        \"revision\" : \"8b06dfd564afc80155ab0a30a2613dc8e04be1e9\",\n        \"version\" : \"3.1.3\"\n      }\n    },\n    {\n      \"identity\" : \"grdb.swift\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/groue/GRDB.swift\",\n      \"state\" : {\n        \"revision\" : \"57a4587b5b09ac706bc985288a62432ddbf20b09\",\n        \"version\" : \"6.29.2\"\n      }\n    },\n    {\n      \"identity\" : \"kmp-nativecoroutines\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/rickclephas/KMP-NativeCoroutines.git\",\n      \"state\" : {\n        \"revision\" : \"d6db2878cc0c6c06a0ccddb89f44b8f6f6d0b78f\",\n        \"version\" : \"1.0.0-ALPHA-48\"\n      }\n    },\n    {\n      \"identity\" : \"mobile-sync-spm\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/quran/mobile-sync-spm.git\",\n      \"state\" : {\n        \"revision\" : \"ab9d351a8372502f93fffc440798621c4d6dfcca\",\n        \"version\" : \"0.0.6\"\n      }\n    },\n    {\n      \"identity\" : \"popover\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/mohamede1945/Popover\",\n      \"state\" : {\n        \"branch\" : \"master\",\n        \"revision\" : \"9641cb324d61554f7e542acb58df2eba55b3a537\"\n      }\n    },\n    {\n      \"identity\" : \"rxswift\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/ReactiveX/RxSwift.git\",\n      \"state\" : {\n        \"revision\" : \"132aea4f236ccadc51590b38af0357a331d51fa2\",\n        \"version\" : \"6.10.2\"\n      }\n    },\n    {\n      \"identity\" : \"swift-async-algorithms\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-async-algorithms\",\n      \"state\" : {\n        \"revision\" : \"9cfed92b026c524674ed869a4ff2dcfdeedf8a2a\",\n        \"version\" : \"0.1.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-collections\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-collections\",\n      \"state\" : {\n        \"revision\" : \"937e904258d22af6e447a0b72c0bc67583ef64a2\",\n        \"version\" : \"1.0.4\"\n      }\n    },\n    {\n      \"identity\" : \"swift-concurrency-extras\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-concurrency-extras\",\n      \"state\" : {\n        \"revision\" : \"bb5059bde9022d69ac516803f4f227d8ac967f71\",\n        \"version\" : \"1.1.0\"\n      }\n    },\n    {\n      \"identity\" : \"swift-log\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/apple/swift-log\",\n      \"state\" : {\n        \"revision\" : \"5d66f7ba25daf4f94100e7022febf3c75e37a6c7\",\n        \"version\" : \"1.4.2\"\n      }\n    },\n    {\n      \"identity\" : \"swift-snapshot-testing\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/swift-snapshot-testing.git\",\n      \"state\" : {\n        \"revision\" : \"f29e2014f6230cf7d5138fc899da51c7f513d467\",\n        \"version\" : \"1.10.0\"\n      }\n    },\n    {\n      \"identity\" : \"whatsnewkit\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/SvenTiigi/WhatsNewKit.git\",\n      \"state\" : {\n        \"revision\" : \"92a9d6f5f6754aba0df972514fd7686f1de03bcc\",\n        \"version\" : \"1.3.7\"\n      }\n    },\n    {\n      \"identity\" : \"xctest-dynamic-overlay\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/pointfreeco/xctest-dynamic-overlay\",\n      \"state\" : {\n        \"revision\" : \"23cbf2294e350076ea4dbd7d5d047c1e76b03631\",\n        \"version\" : \"1.0.2\"\n      }\n    },\n    {\n      \"identity\" : \"zip\",\n      \"kind\" : \"remoteSourceControl\",\n      \"location\" : \"https://github.com/marmelroy/Zip\",\n      \"state\" : {\n        \"revision\" : \"bd19d974e8a38cc8d3a88c90c8a107386c3b8ccf\",\n        \"version\" : \"2.1.1\"\n      }\n    }\n  ],\n  \"version\" : 2\n}\n"
  },
  {
    "path": "Package.swift",
    "content": "// swift-tools-version:5.8\n\nimport Foundation\nimport PackageDescription\n\n// Disable before commit, see https://forums.swift.org/t/concurrency-checking-in-swift-packages-unsafeflags/61135\nlet enforceSwiftConcurrencyChecks = false\n\nlet swiftConcurrencySettings: [SwiftSetting] = [\n    .unsafeFlags([\n        \"-Xfrontend\", \"-strict-concurrency=complete\",\n    ]),\n]\n\nlet quranSyncValue = ProcessInfo.processInfo.environment[\"QURAN_SYNC\"]?\n    .trimmingCharacters(in: .whitespacesAndNewlines)\nlet quranSyncEnabled = quranSyncValue != nil && quranSyncValue != \"0\" && quranSyncValue != \"\"\nlet quranSyncSettings: [SwiftSetting] = quranSyncEnabled ? [\n    .define(\"QURAN_SYNC\"),\n] : []\n\nlet settings = (enforceSwiftConcurrencyChecks ? swiftConcurrencySettings : []) + quranSyncSettings\n\nlet targets = [\n    coreTargets(),\n    modelTargets(),\n    uiTargets(),\n    dataTargets(),\n    domainTargets(),\n    featuresTargets(),\n]\n.flatMap { $0 }\n.flatMap { $0 }\n\nlet package = Package(\n    name: \"QuranEngine\",\n    defaultLocalization: \"en\",\n    platforms: [\n        .iOS(.v15),\n    ],\n    products: libraries(from: targets),\n    dependencies: [\n        // Logging\n        .package(url: \"https://github.com/apple/swift-log\", from: \"1.4.2\"),\n\n        // Helpers\n        .package(url: \"https://github.com/apple/swift-collections\", from: \"1.0.3\"),\n\n        // Zip\n        .package(url: \"https://github.com/marmelroy/Zip\", from: \"2.1.1\"),\n\n        // Database\n        .package(url: \"https://github.com/groue/GRDB.swift\", from: \"6.29.1\"),\n\n        // Async\n        .package(url: \"https://github.com/apple/swift-async-algorithms\", from: \"0.1.0\"),\n\n        // OAuth\n        .package(url: \"https://github.com/openid/AppAuth-iOS\", .upToNextMajor(from: \"1.3.0\")),\n\n        // UI\n        .package(url: \"https://github.com/GenericDataSource/GenericDataSource\", from: \"3.1.3\"),\n        .package(url: \"https://github.com/SvenTiigi/WhatsNewKit\", from: \"1.3.7\"),\n        .package(url: \"https://github.com/mohamede1945/Popover\", branch: \"master\"),\n\n        // Testing\n        .package(url: \"https://github.com/pointfreeco/swift-snapshot-testing\", from: \"1.9.0\"),\n        .package(url: \"https://github.com/pointfreeco/combine-schedulers\", from: \"1.0.0\"),\n\n        // Sync\n        .package(url: \"https://github.com/quran/mobile-sync-spm.git\", from: \"0.0.6\"),\n\n    ], targets: validated(targets) + [testTargetLinkingAllPackageTargets(targets)]\n)\n\nprivate func coreTargets() -> [[Target]] {\n    let type = TargetType.core\n    return [\n        target(type, name: \"SystemDependencies\", hasTests: false, dependencies: [\n            \"Utilities\",\n            \"Zip\",\n            .product(name: \"AsyncAlgorithms\", package: \"swift-async-algorithms\"),\n        ]),\n        target(type, name: \"SystemDependenciesFake\", hasTests: false, dependencies: [\n            \"SystemDependencies\",\n            \"Utilities\",\n        ]),\n\n        target(type, name: \"Locking\", hasTests: false, dependencies: []),\n        target(type, name: \"Preferences\", hasTests: false, dependencies: []),\n\n        target(type, name: \"VLogging\", hasTests: false, dependencies: [\n            .product(name: \"Logging\", package: \"swift-log\"),\n        ]),\n\n        target(type, name: \"Analytics\", hasTests: false, dependencies: [\n            \"VLogging\",\n        ]),\n\n        target(type, name: \"Caching\", dependencies: [\n            \"Locking\",\n            \"Utilities\",\n        ], testDependencies: [\n            \"AsyncUtilitiesForTesting\",\n        ]),\n\n        target(type, name: \"Timing\", hasTests: false, dependencies: [\n            \"Locking\",\n        ]),\n\n        target(type, name: \"WeakSet\", hasTests: false, dependencies: [\n            \"Locking\",\n        ]),\n\n        target(type, name: \"Crashing\", hasTests: false, dependencies: [\n            \"Locking\",\n        ]),\n\n        target(type, name: \"Utilities\", dependencies: [\n        ], testDependencies: [\n            \"AsyncUtilitiesForTesting\",\n        ]),\n\n        target(type, name: \"AppMigrator\", dependencies: [\n            \"Preferences\",\n            \"VLogging\",\n            \"SystemDependencies\",\n        ], testDependencies: [\n            \"SystemDependenciesFake\",\n        ]),\n\n        target(type, name: \"Localization\", hasTests: false, dependencies: []),\n\n        target(type, name: \"QueuePlayer\", hasTests: false, dependencies: [\n            \"Timing\",\n        ]),\n\n        target(type, name: \"AsyncUtilitiesForTesting\", hasTests: false, dependencies: [\n            .product(name: \"AsyncAlgorithms\", package: \"swift-async-algorithms\"),\n        ]),\n\n        target(type, name: \"OAuthService\", hasTests: false, dependencies: []),\n\n        target(type, name: \"SecurePersistence\", hasTests: false, dependencies: [\n            \"SystemDependencies\",\n            \"VLogging\",\n        ]),\n\n        target(type, name: \"OAuthServiceAppAuthImpl\", hasTests: false, dependencies: [\n            \"OAuthService\", \"VLogging\",\n            .product(name: \"AppAuth\", package: \"AppAuth-iOS\"),\n        ]),\n\n        target(type, name: \"OAuthServiceFake\", hasTests: false, dependencies: [\"OAuthService\"]),\n    ]\n}\n\nprivate func modelTargets() -> [[Target]] {\n    let type = TargetType.model\n    return [\n        target(type, name: \"QuranKit\"),\n        target(type, name: \"QuranGeometry\", hasTests: false, dependencies: [\n            \"QuranKit\",\n        ]),\n        target(type, name: \"QuranAudio\", hasTests: false, dependencies: [\n            \"Utilities\",\n            \"QuranKit\",\n        ]),\n        target(type, name: \"QuranText\", hasTests: false, dependencies: [\n            \"Utilities\",\n            \"QuranKit\",\n        ]),\n        target(type, name: \"QuranAnnotations\", hasTests: false, dependencies: [\n            \"QuranKit\",\n            \"QuranText\",\n        ]),\n    ]\n}\n\nprivate func uiTargets() -> [[Target]] {\n    let type = TargetType.ui\n    return [\n        target(type, name: \"ViewConstrainer\", hasTests: false),\n        target(type, name: \"UIx\", hasTests: false, dependencies: [\n            \"ViewConstrainer\",\n            \"VLogging\",\n        ]),\n        target(type, name: \"NoorFont\", hasTests: false, resources: [\n            .process(\"Resources\"),\n        ]),\n        target(type, name: \"NoorUI\", hasTests: false, dependencies: [\n            \"UIx\",\n            \"Crashing\",\n            \"Localization\",\n            \"Preferences\",\n            \"QuranText\",\n            \"QuranAnnotations\",\n            \"QuranGeometry\",\n            \"NoorFont\",\n            \"VLogging\",\n            .product(name: \"GenericDataSources\", package: \"GenericDataSource\"),\n        ], resources: [\n            .process(\"Colors/Colors.xcassets\"),\n            .process(\"Images/Images.xcassets\"),\n        ]),\n    ]\n}\n\nprivate func dataTargets() -> [[Target]] {\n    let type = TargetType.data\n    return [\n        // MARK: - Page Bookmarks\n\n        target(type, name: \"PageBookmarkPersistence\", dependencies: [\n            \"CoreDataModel\",\n            \"CoreDataPersistence\",\n            \"QuranKit\",\n            \"AuthenticationClient\",\n            .product(name: \"MobileSync\", package: \"mobile-sync-spm\"),\n        ], testDependencies: [\n            \"AsyncUtilitiesForTesting\",\n            \"CoreDataPersistenceTestSupport\",\n        ]),\n\n        target(type, name: \"SyncedPageBookmarkPersistence\", dependencies: [\n            \"SQLitePersistence\",\n            .product(name: \"GRDB\", package: \"GRDB.swift\"),\n        ], testDependencies: [\n            \"AsyncUtilitiesForTesting\",\n        ]),\n\n        // MARK: - Core Data\n\n        target(type, name: \"LastPagePersistence\", dependencies: [\n            \"CoreDataModel\",\n            \"CoreDataPersistence\",\n        ], testDependencies: [\n            \"AsyncUtilitiesForTesting\",\n            \"CoreDataPersistenceTestSupport\",\n        ]),\n\n        target(type, name: \"NotePersistence\", dependencies: [\n            \"CoreDataModel\",\n            \"CoreDataPersistence\",\n            \"SystemDependencies\",\n        ], testDependencies: [\n            \"AsyncUtilitiesForTesting\",\n            \"CoreDataPersistenceTestSupport\",\n        ]),\n\n        target(type, name: \"CoreDataPersistence\", dependencies: [\n            \"Utilities\",\n            \"VLogging\",\n            \"Crashing\",\n            \"SystemDependencies\",\n        ], testDependencies: [\n            \"AsyncUtilitiesForTesting\",\n            \"CoreDataModel\",\n            \"CoreDataPersistenceTestSupport\",\n        ]),\n\n        target(type, name: \"CoreDataPersistenceTestSupport\", hasTests: false, dependencies: [\n            \"CoreDataPersistence\",\n            \"CoreDataModel\",\n            \"SystemDependenciesFake\",\n        ]),\n\n        target(type, name: \"CoreDataModel\", hasTests: false, dependencies: [\n            \"CoreDataPersistence\",\n        ]),\n\n        // MARK: - SQLite\n\n        target(type, name: \"SQLitePersistence\", dependencies: [\n            \"Utilities\",\n            \"VLogging\",\n            \"Localization\",\n            .product(name: \"GRDB\", package: \"GRDB.swift\"),\n        ], testDependencies: [\n            \"AsyncUtilitiesForTesting\",\n        ]),\n\n        target(type, name: \"AudioTimingPersistence\", hasTests: false, dependencies: [\n            \"SQLitePersistence\",\n            \"QuranAudio\",\n        ]),\n\n        target(type, name: \"WordFramePersistence\", hasTests: false, dependencies: [\n            \"SQLitePersistence\",\n            \"QuranGeometry\",\n        ]),\n\n        target(type, name: \"LinePagePersistence\", dependencies: [\n            \"SQLitePersistence\",\n            \"QuranKit\",\n        ], testResources: [\n            .process(\"Resources\"),\n        ]),\n\n        target(type, name: \"WordTextPersistence\", hasTests: false, dependencies: [\n            \"SQLitePersistence\",\n            \"QuranKit\",\n        ]),\n\n        target(type, name: \"VerseTextPersistence\", hasTests: false, dependencies: [\n            \"SQLitePersistence\",\n            \"QuranKit\",\n        ]),\n\n        target(type, name: \"TranslationPersistence\", hasTests: false, dependencies: [\n            \"SQLitePersistence\",\n            \"QuranText\",\n        ]),\n\n        // MARK: - Networking\n\n        target(type, name: \"NetworkSupport\", dependencies: [\n            \"Crashing\",\n            \"Localization\",\n        ], testDependencies: [\n            \"Utilities\",\n            \"AsyncUtilitiesForTesting\",\n            \"NetworkSupportFake\",\n        ]),\n\n        target(type, name: \"NetworkSupportFake\", hasTests: false, dependencies: [\n            \"NetworkSupport\",\n            \"AsyncUtilitiesForTesting\",\n            .product(name: \"AsyncAlgorithms\", package: \"swift-async-algorithms\"),\n        ]),\n\n        target(type, name: \"BatchDownloader\", dependencies: [\n            \"SQLitePersistence\",\n            \"Crashing\",\n            \"WeakSet\",\n            \"NetworkSupport\",\n            \"SystemDependencies\",\n        ], testDependencies: [\n            \"BatchDownloaderFake\",\n            .product(name: \"AsyncAlgorithms\", package: \"swift-async-algorithms\"),\n        ]),\n\n        target(type, name: \"BatchDownloaderFake\", hasTests: false, dependencies: [\n            \"BatchDownloader\",\n            \"NetworkSupportFake\",\n        ]),\n\n        // MARK: - Quran.com OAuth\n\n        target(type, name: \"AuthenticationClient\", hasTests: true, dependencies: [\n            \"OAuthService\",\n            \"VLogging\",\n            \"SystemDependencies\",\n            \"SecurePersistence\",\n            \"OAuthServiceAppAuthImpl\",\n            .product(name: \"AppAuth\", package: \"AppAuth-iOS\"),\n            .product(name: \"MobileSync\", package: \"mobile-sync-spm\"),\n        ], testDependencies: [\"AsyncUtilitiesForTesting\", \"SystemDependenciesFake\", \"OAuthServiceFake\"]),\n    ]\n}\n\nprivate func domainTargets() -> [[Target]] {\n    let type = TargetType.domain\n    return [\n        target(type, name: \"QuranResources\", hasTests: false, resources: [\n            .copy(\"Databases\"),\n        ]),\n\n        target(type, name: \"TestResources\", hasTests: false, resources: [\n            .copy(\"test_data\"),\n        ]),\n\n        target(type, name: \"ReciterService\", dependencies: [\n            \"Localization\",\n            \"SystemDependencies\",\n            \"Utilities\",\n            \"QuranKit\",\n            \"Preferences\",\n            \"QuranAudio\",\n            \"VLogging\",\n            \"Crashing\",\n            \"Zip\",\n            .product(name: \"OrderedCollections\", package: \"swift-collections\"),\n        ], testDependencies: [\n            \"ReciterServiceFake\",\n            \"SystemDependenciesFake\",\n        ]),\n\n        target(type, name: \"ReciterServiceFake\", hasTests: false, dependencies: [\n            \"ReciterService\",\n            \"SystemDependenciesFake\",\n            \"TestResources\",\n        ]),\n\n        target(type, name: \"AudioUpdater\", dependencies: [\n            \"NetworkSupport\",\n            \"Preferences\",\n            \"AudioTimingPersistence\",\n            \"SystemDependencies\",\n            \"VLogging\",\n            \"Crashing\",\n            \"ReciterService\",\n        ], testDependencies: [\n            \"NetworkSupportFake\",\n            \"ReciterServiceFake\",\n            \"SystemDependenciesFake\",\n        ]),\n\n        target(type, name: \"AudioTimingService\", hasTests: false, dependencies: [\n            \"AudioTimingPersistence\",\n        ]),\n\n        target(type, name: \"QuranAudioKit\", dependencies: [\n            \"BatchDownloader\",\n            \"AudioTimingService\",\n            \"ReciterService\",\n            \"QuranTextKit\",\n            \"QueuePlayer\",\n            \"SystemDependencies\",\n            \"Zip\",\n        ], testDependencies: [\n            \"SystemDependenciesFake\",\n            \"TranslationServiceFake\",\n            \"BatchDownloaderFake\",\n            \"ReciterServiceFake\",\n            .product(name: \"SnapshotTesting\", package: \"swift-snapshot-testing\"),\n        ], testExclude: [\n            \"__Snapshots__\",\n        ]),\n\n        target(type, name: \"QuranTextKit\", dependencies: [\n            \"TranslationService\",\n            \"WordFrameService\",\n            \"QuranKit\",\n            \"VerseTextPersistence\",\n        ], testDependencies: [\n            .product(name: \"SnapshotTesting\", package: \"swift-snapshot-testing\"),\n            \"ReadingService\",\n            \"TranslationServiceFake\",\n            \"SystemDependenciesFake\",\n            \"TestResources\",\n            \"QuranResources\",\n        ], testExclude: [\n            \"__Snapshots__\",\n        ]),\n\n        target(type, name: \"TranslationService\", dependencies: [\n            \"QuranText\",\n            \"TranslationPersistence\",\n            \"VerseTextPersistence\",\n            \"BatchDownloader\",\n            \"Localization\",\n            \"Preferences\",\n            \"SystemDependencies\",\n            \"Zip\",\n        ], testDependencies: [\n            \"TranslationServiceFake\",\n            \"BatchDownloaderFake\",\n        ]),\n\n        target(type, name: \"TranslationServiceFake\", hasTests: false, dependencies: [\n            \"TranslationService\",\n            \"SystemDependenciesFake\",\n            \"Utilities\",\n            \"TestResources\",\n            \"AsyncUtilitiesForTesting\",\n        ]),\n\n        target(type, name: \"WordFrameService\", hasTests: false, dependencies: [\n            \"WordFramePersistence\",\n        ]),\n\n        target(type, name: \"WordTextService\", dependencies: [\n            \"QuranText\",\n            \"WordTextPersistence\",\n            \"Preferences\",\n            \"Crashing\",\n        ], testDependencies: [\n            \"TestResources\",\n        ]),\n\n        target(type, name: \"ImageService\", dependencies: [\n            \"WordFrameService\",\n            \"LinePagePersistence\",\n            \"SystemDependencies\",\n        ], testDependencies: [\n            \"ReadingService\",\n            .product(name: \"SnapshotTesting\", package: \"swift-snapshot-testing\"),\n            \"TestResources\",\n        ], testExclude: [\n            \"__Snapshots__\",\n        ]),\n\n        target(type, name: \"ReadingService\", dependencies: [\n            \"QuranKit\",\n            \"VLogging\",\n            \"Preferences\",\n            \"BatchDownloader\",\n            \"SystemDependencies\",\n            .product(name: \"CombineSchedulers\", package: \"combine-schedulers\"),\n        ], testDependencies: [\n            \"AsyncUtilitiesForTesting\",\n            \"SystemDependenciesFake\",\n            \"BatchDownloaderFake\",\n        ]),\n\n        target(type, name: \"AnnotationsService\", dependencies: [\n            \"QuranAnnotations\",\n            \"LastPagePersistence\",\n            \"NotePersistence\",\n            \"PageBookmarkPersistence\",\n            \"Preferences\",\n            \"QuranTextKit\",\n            \"Localization\",\n            \"Analytics\",\n        ], testDependencies: [\n        ]),\n\n        target(type, name: \"SettingsService\", hasTests: false, dependencies: [\n            \"Analytics\",\n            \"Preferences\",\n            \"Utilities\",\n\n        ]),\n    ]\n}\n\nprivate func featuresTargets() -> [[Target]] {\n    let type = TargetType.features\n    return [\n        target(type, name: \"AppDependencies\", hasTests: false, dependencies: [\n            \"NotePersistence\",\n            \"QuranTextKit\",\n            \"Analytics\",\n            \"AnnotationsService\",\n            \"BatchDownloader\",\n            \"LastPagePersistence\",\n            \"ReadingService\",\n            \"QuranResources\",\n            \"AuthenticationClient\",\n        ]),\n\n        target(type, name: \"FeaturesSupport\", hasTests: false, dependencies: [\n            \"BatchDownloader\",\n            \"Localization\",\n            \"Analytics\",\n            \"QuranAnnotations\",\n            \"NoorUI\",\n        ]),\n\n        target(type, name: \"ReciterListFeature\", hasTests: false, dependencies: [\n            \"QuranAudio\",\n            \"NoorUI\",\n            \"ReciterService\",\n        ]),\n\n        target(type, name: \"AyahMenuFeature\", hasTests: false, dependencies: [\n            \"AppDependencies\",\n            \"QuranAudioKit\",\n            \"AnnotationsService\",\n            \"NoorUI\",\n        ]),\n\n        target(type, name: \"WhatsNewFeature\", hasTests: false, dependencies: [\n            \"WhatsNewKit\",\n            \"NoorUI\",\n            \"Analytics\",\n        ], resources: [\n            .copy(\"whats-new.plist\"),\n        ]),\n\n        target(type, name: \"WordPointerFeature\", hasTests: false, dependencies: [\n            \"AppDependencies\",\n            \"WordTextService\",\n            \"NoorUI\",\n            .product(name: \"Popover_OC\", package: \"Popover\"),\n        ]),\n\n        target(type, name: \"AppMigrationFeature\", hasTests: false, dependencies: [\n            \"AppMigrator\",\n            \"ReciterService\",\n            \"Utilities\",\n            \"NoorUI\",\n        ]),\n\n        target(type, name: \"AdvancedAudioOptionsFeature\", hasTests: false, dependencies: [\n            \"ReciterListFeature\",\n            \"QuranAudioKit\",\n        ]),\n\n        target(type, name: \"AudioBannerFeature\", hasTests: false, dependencies: [\n            \"Caching\",\n            \"AppDependencies\",\n            \"NoorUI\",\n            \"ReciterListFeature\",\n            \"AdvancedAudioOptionsFeature\",\n        ]),\n\n        target(type, name: \"AudioDownloadsFeature\", hasTests: false, dependencies: [\n            \"AppDependencies\",\n            \"QuranAudioKit\",\n            \"NoorUI\",\n            \"ReadingService\",\n        ]),\n\n        target(type, name: \"MoreMenuFeature\", hasTests: false, dependencies: [\n            \"NoorUI\",\n            \"QuranTextKit\",\n            \"WordTextService\",\n        ]),\n\n        target(type, name: \"NoteEditorFeature\", hasTests: false, dependencies: [\n            \"AppDependencies\",\n            \"AnnotationsService\",\n            \"NoorUI\",\n        ]),\n\n        target(type, name: \"BookmarksFeature\", dependencies: [\n            \"AppDependencies\",\n            \"AuthenticationClient\",\n            \"FeaturesSupport\",\n            \"AnnotationsService\",\n            \"NoorUI\",\n            \"Preferences\",\n            \"ReadingService\",\n        ], testDependencies: [\n            \"Analytics\",\n            \"AnnotationsService\",\n            \"AuthenticationClient\",\n            .product(name: \"MobileSync\", package: \"mobile-sync-spm\"),\n            \"PageBookmarkPersistence\",\n        ]),\n\n        target(type, name: \"QuranPagesFeature\", hasTests: false, dependencies: [\n            \"NoorUI\",\n            \"WeakSet\",\n            \"QuranTextKit\",\n            \"Caching\",\n        ]),\n\n        target(type, name: \"QuranImageFeature\", hasTests: false, dependencies: [\n            \"AppDependencies\",\n            \"NoorUI\",\n            \"ImageService\",\n            \"LinePagePersistence\",\n            \"ReadingService\",\n            \"QuranPagesFeature\",\n            \"QuranTextKit\",\n            \"Caching\",\n        ]),\n\n        target(type, name: \"ReadingSelectorFeature\", hasTests: false, dependencies: [\n            \"AppDependencies\",\n            \"ReadingService\",\n            \"ImageService\",\n            \"NoorUI\",\n        ]),\n\n        target(type, name: \"QuranTranslationFeature\", hasTests: false, dependencies: [\n            \"AppDependencies\",\n            \"NoorUI\",\n            \"ReadingService\",\n            \"QuranPagesFeature\",\n            \"QuranTextKit\",\n        ]),\n\n        target(type, name: \"QuranContentFeature\", hasTests: false, dependencies: [\n            \"QuranImageFeature\",\n            \"QuranTranslationFeature\",\n        ]),\n\n        target(type, name: \"TranslationsFeature\", hasTests: false, dependencies: [\n            \"AppDependencies\",\n            \"TranslationService\",\n            \"NoorUI\",\n        ]),\n\n        target(type, name: \"NotesFeature\", hasTests: false, dependencies: [\n            \"AnnotationsService\",\n            \"QuranTextKit\",\n            \"AppDependencies\",\n            \"FeaturesSupport\",\n            \"ReadingService\",\n            \"NoorUI\",\n        ]),\n\n        target(type, name: \"TranslationVerseFeature\", hasTests: false, dependencies: [\n            \"AppDependencies\",\n            \"MoreMenuFeature\",\n            \"TranslationsFeature\",\n            \"QuranTranslationFeature\",\n            \"QuranTextKit\",\n            \"Caching\",\n        ]),\n\n        target(type, name: \"SearchFeature\", hasTests: false, dependencies: [\n            \"AppDependencies\",\n            \"QuranTextKit\",\n            \"FeaturesSupport\",\n            \"ReadingService\",\n            \"NoorUI\",\n        ]),\n\n        target(type, name: \"HomeFeature\", hasTests: false, dependencies: [\n            \"AppDependencies\",\n            \"ReadingSelectorFeature\",\n            \"AnnotationsService\",\n            \"FeaturesSupport\",\n            \"Preferences\",\n        ]),\n\n        target(type, name: \"QuranViewFeature\", hasTests: false, dependencies: [\n            \"AudioBannerFeature\",\n            \"QuranContentFeature\",\n            \"AyahMenuFeature\",\n            \"MoreMenuFeature\",\n            \"NoteEditorFeature\",\n            \"WordPointerFeature\",\n            \"TranslationsFeature\",\n            \"TranslationVerseFeature\",\n            \"FeaturesSupport\",\n        ]),\n\n        target(type, name: \"SettingsFeature\", dependencies: [\n            \"AppDependencies\",\n            \"AuthenticationClient\",\n            .product(name: \"MobileSync\", package: \"mobile-sync-spm\"),\n            \"SettingsService\",\n            \"NoorUI\",\n            \"VLogging\",\n            \"AudioDownloadsFeature\",\n            \"TranslationsFeature\",\n            \"ReadingSelectorFeature\",\n            \"Preferences\",\n            \"Zip\",\n        ], testDependencies: [\n            \"Analytics\",\n            \"AppDependencies\",\n            \"AudioDownloadsFeature\",\n            \"AuthenticationClient\",\n            .product(name: \"MobileSync\", package: \"mobile-sync-spm\"),\n            \"BatchDownloader\",\n            \"LastPagePersistence\",\n            \"NotePersistence\",\n            \"PageBookmarkPersistence\",\n            \"ReadingSelectorFeature\",\n            \"ReadingService\",\n            \"SettingsService\",\n            \"TranslationsFeature\",\n        ]),\n\n        target(type, name: \"AppStructureFeature\", hasTests: false, dependencies: [\n            \"HomeFeature\",\n            \"BookmarksFeature\",\n            \"NotesFeature\",\n            \"SearchFeature\",\n            \"SettingsFeature\",\n            \"QuranViewFeature\",\n            \"WhatsNewFeature\",\n            \"AudioUpdater\",\n            \"AppMigrationFeature\",\n        ]),\n    ]\n}\n\n// MARK: - Builders\n\nenum TargetType: String {\n    case core = \"Core\"\n    case data = \"Data\"\n    case domain = \"Domain\"\n    case model = \"Model\"\n    case ui = \"UI\"\n    case features = \"Features\"\n\n    // MARK: Internal\n\n    // swiftformat:disable consecutiveSpaces\n    static let validDependencies: [TargetType: Set<TargetType>] = [\n        .core:     [.core],\n        .model:    [.core, .model],\n        .ui:       [.core, .model, .ui],\n        .data:     [.core, .model, .data],\n        .domain:   [.core, .model, .data, .domain],\n        .features: [.core, .model, .data, .domain, .ui, .features],\n    ]\n    // swiftformat:enable consecutiveSpaces\n}\n\nfunc target(\n    _ type: TargetType,\n    name: String,\n    hasTests: Bool = true,\n    otherSettings: [SwiftSetting] = [],\n    dependencies: [Target.Dependency] = [],\n    resources: [Resource]? = nil,\n    testDependencies: [Target.Dependency] = [],\n    testExclude: [String] = [],\n    testResources: [Resource]? = nil\n) -> [Target] {\n    var targets: [Target] = [\n        .target(\n            name: name,\n            dependencies: dependencies,\n            path: type.rawValue + \"/\" + name + (hasTests ? \"/Sources\" : \"\"),\n            resources: resources,\n            swiftSettings: settings + otherSettings\n        ),\n    ]\n    guard hasTests else {\n        return targets\n    }\n    targets.append(\n        .testTarget(\n            name: name + \"Tests\",\n            dependencies: [.init(stringLiteral: name)] + testDependencies,\n            path: type.rawValue + \"/\" + name + \"/Tests\",\n            exclude: testExclude,\n            resources: testResources,\n            swiftSettings: settings\n        )\n    )\n    return targets\n}\n\nfunc library(_ name: String) -> PackageDescription.Product {\n    .library(name: name, targets: [name])\n}\n\nfunc validated(_ targets: [Target]) -> [Target] {\n    validateDependenciesStructure(targets)\n    validateNoTestDependenciesInAppTargets(targets)\n    return targets\n}\n\nfunc validateNoTestDependenciesInAppTargets(_ targets: [Target]) {\n    func isTestRelatedTargetName(_ name: String) -> Bool {\n        [\"fake\", \"test\"].contains { testName in name.lowercased().contains(testName) }\n    }\n\n    let targets = targets.filter { target in !target.isTest && !isTestRelatedTargetName(target.name) }\n    for target in targets {\n        for dependency in target.dependencies {\n            let dependencyName = dependencyName(of: dependency)\n            if isTestRelatedTargetName(dependencyName) {\n                fatalError(\"\"\"\n\n                Incorrect dependency.\n                Target \\(target.name) shouldn't depend on \\(dependencyName) as it's a test dependency.\n\n                \"\"\")\n            }\n        }\n    }\n}\n\nfunc validateDependenciesStructure(_ targets: [Target]) {\n    var targetTypes: [String: TargetType] = [:]\n    for target in targets {\n        let parentDirectory = target.path!.components(separatedBy: \"/\")[0]\n        targetTypes[target.name] = TargetType(rawValue: parentDirectory)!\n    }\n\n    for target in targets {\n        let targetType = targetTypes[target.name]!\n        let validDependencyTypes = TargetType.validDependencies[targetType]!\n        for dependency in target.dependencies {\n            let dependencyName = dependencyName(of: dependency)\n            guard let dependencyType = targetTypes[dependencyName] else {\n                continue\n            }\n            if !validDependencyTypes.contains(dependencyType) {\n                fatalError(\"\"\"\n\n                Incorrect dependency.\n                Target \\(targetType.rawValue)\\\\\\(target.name) shouldn't depend on \\(dependencyType.rawValue)\\\\\\(dependencyName).\n\n                \"\"\")\n            }\n        }\n    }\n}\n\nfunc dependencyName(of dependency: Target.Dependency) -> String {\n    if case .byNameItem(name: let name, condition: _) = dependency {\n        return name\n    }\n    return \"\"\n}\n\n/// Creates an empty test target that links all targets to produce an accurate code coverage.\nfunc testTargetLinkingAllPackageTargets(_ targets: [Target]) -> Target {\n    let nonTestTargets = targets.filter { !$0.isTest }\n    return .testTarget(\n        name: \"AllTargetsTests\",\n        dependencies: nonTestTargets.map { .init(stringLiteral: $0.name) },\n        path: \"AllTargetsTests\",\n        swiftSettings: settings\n    )\n}\n\nfunc libraries(from targets: [Target]) -> [PackageDescription.Product] {\n    let nonTestTargets = targets.filter { !$0.isTest }\n    return nonTestTargets.map {\n        library($0.name)\n    }\n}\n"
  },
  {
    "path": "QuranEngine-Package.xctestplan",
    "content": "{\n  \"configurations\" : [\n    {\n      \"id\" : \"E7574424-1A22-490F-ABFD-1131F1BEF026\",\n      \"name\" : \"Test Scheme Action\",\n      \"options\" : {\n\n      }\n    }\n  ],\n  \"defaultOptions\" : {\n    \"environmentVariableEntries\" : [\n      {\n        \"enabled\" : false,\n        \"key\" : \"LocalSnapshots\",\n        \"value\" : \"TRUE\"\n      }\n    ]\n  },\n  \"testTargets\" : [\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"BatchDownloaderTests\",\n        \"name\" : \"BatchDownloaderTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"QuranAudioKitTests\",\n        \"name\" : \"QuranAudioKitTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"QuranKitTests\",\n        \"name\" : \"QuranKitTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"QuranTextKitTests\",\n        \"name\" : \"QuranTextKitTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"CachingTests\",\n        \"name\" : \"CachingTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"CoreDataPersistenceTests\",\n        \"name\" : \"CoreDataPersistenceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"LastPagePersistenceTests\",\n        \"name\" : \"LastPagePersistenceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"NetworkSupportTests\",\n        \"name\" : \"NetworkSupportTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"NotePersistenceTests\",\n        \"name\" : \"NotePersistenceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"PageBookmarkPersistenceTests\",\n        \"name\" : \"PageBookmarkPersistenceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"SQLitePersistenceTests\",\n        \"name\" : \"SQLitePersistenceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"TranslationServiceTests\",\n        \"name\" : \"TranslationServiceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"UtilitiesTests\",\n        \"name\" : \"UtilitiesTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"AudioUpdaterTests\",\n        \"name\" : \"AudioUpdaterTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"ReciterServiceTests\",\n        \"name\" : \"ReciterServiceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"ReadingServiceTests\",\n        \"name\" : \"ReadingServiceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"WordTextServiceTests\",\n        \"name\" : \"WordTextServiceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"ImageServiceTests\",\n        \"name\" : \"ImageServiceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"AnnotationsServiceTests\",\n        \"name\" : \"AnnotationsServiceTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"AllTargetsTests\",\n        \"name\" : \"AllTargetsTests\"\n      }\n    },\n    {\n      \"target\" : {\n        \"containerPath\" : \"container:\",\n        \"identifier\" : \"AppMigratorTests\",\n        \"name\" : \"AppMigratorTests\"\n      }\n    }\n  ],\n  \"version\" : 1\n}\n"
  },
  {
    "path": "README.md",
    "content": "\n<p align=\"center\">\n    <img src=\"https://github.com/quran/quran-ios/assets/5665498/636ff859-78e9-40aa-96ea-db013197b6fc\" width=\"350pt\">\n</p>\n\nQuranEngine\n===============\n[![CI](https://github.com/quran/quran-ios/actions/workflows/ci.yml/badge.svg)](https://github.com/quran/quran-ios/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/quran/quran-ios/branch/main/graph/badge.svg)](https://codecov.io/gh/quran/quran-ios)\n\nQuranEngine is the open-source iOS library that powers the [Quran.com iOS App](https://apps.apple.com/app/id1118663303). This repository contains approximately 99% of the Quran.com iOS App code, providing you with a robust foundation to build Quran-related applications.\n\nIn this repository, we also provide an example application called QuranEngineApp that mimics the Quran.com iOS App, available under the [Example](/Example) folder.\n\n## Installation\n\nThe repository can be installed via Swift Package Manager:\n\n```swift\n.package(url: \"https://github.com/quran/quran-ios\", branch: \"main\")\n```\nThen use one or more of the available targets as dependency. All targets are available for consumers, for example:\n```swift\n.product(name: \"AppStructureFeature\", package: \"quran-ios\"),\n```\n\n> :warning: Please note that we do not support CocoaPods or Carthage, and we do not plan to support these in the future.\n\n## Repository Structure and Architecture\n\nThe library consists of 6 top-level directories:\n\n* **Core**: General purpose libraries that work with any app. The only exception is the Localization library, which we aim to make more universal.\n\n* **Model**: Contains simple entities that facilitate building a Quran App. These entities mostly work together without including extensive logic.\n\n* **Data**: This directory includes SQLite, CoreData, and Networking libraries that abstract away the underlying technologies used.\n\n* **Domain**: This is where the business logic of the app resides. It depends on Model and Data to serve such business logic.\n\n* **UI**: Houses the design system used by the App (we call it NoorUI). We are gradually shifting towards using SwiftUI in all our components, except for the navigation aspect - we will continue using UIKit for that. UI does not depend on Domain nor Data, but can depend on Core and Model.\n\n* **Features**: Comprises the screens making up the app. They rely on all other components to create our Quran apps. Features can encompass other features to create higher-level features. For example, `AppStructureFeature` hosts all other features to create the app.\n\n> :warning: UI and Features do not yet contain tests, and makes up around 50% of the source code. We are keen on adding tests to them in the future inshaa'Allah.\n\nHere is a visual representation of the architecture:\n\n<img width=\"438\" alt=\"architecture\" src=\"https://github.com/quran/quran-ios/assets/5665498/1135c102-c20b-456f-9f96-3c5b4faee0dc\">\n\nThis dependency order is enforced in [Package.swift](https://github.com/quran/quran-ios/blob/c1598f6f582198035b0b3df6b09051cf2391e6c1/Package.swift#L751).\n\n\n# Contributions\n\nWe warmly welcome contributions to the QuranEngine project. We encourage potential contributors to tackle any of the open issues. Please start a conversation with us in the Discussions section of the repo and we will do our best to assist you inshaa'Allah.\n\nIf your contribution is small enough, feel free to create a Pull Request directly. For larger contributions, we ask that you first create a post in the discussions section. This allows us to ensure that nobody else is working on the same feature, and also allows us to plan for upcoming features in case your contribution is dependent on another feature.\n\n## Intended Use\n\nWe are re-open sourcing the app because we see a lot of benefits in allowing developers to build on top of what we have already built. This way, developers don't have to re-implement the foundation and can innovate more on the idea itself. The malicious behavior we've seen previously, including but not limited to selling this free code to people who are not aware of this repo's existence, is negligible compared to the overall benefit of giving what we have implemented to others. We look forward to seeing great Islamic innovation that helps Muslims everywhere inshaa'Allah.\n\nWe welcome all types of use. However, we kindly ask that you don't use the QuranEngineApp example and republish it without making any modifications. You may also need to bring your own data.\n\n## License\n\n* QuranEngine is available under Apache-2.0 license. See the LICENSE file for more info.\n* Madani images from [quran images project](https://github.com/quran/quran.com-images) on github.\n* Translation, tafsir and Arabic data come from [tanzil](http://tanzil.net) and [King Saud University](https://quran.ksu.edu.sa).\n"
  },
  {
    "path": "UI/NoorFont/FontName.swift",
    "content": "//\n//  FontName.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-23.\n//\n\nimport Foundation\nimport SwiftUI\n\npublic enum FontName: CaseIterable {\n    /// Used in Arabic tafseer\n    case arabic\n\n    /// Used in quran text in translation view\n    case quran\n\n    /// Used in arabic suras in Uthmanic font\n    case suraNames\n\n    struct FontDetails {\n        let name: String\n        let family: String\n        let fileName: String\n    }\n\n    // MARK: Internal\n\n    var details: FontDetails {\n        switch self {\n        case .arabic:\n            return FontDetails(\n                name: \"Kitab-Regular\",\n                family: \"Kitab\",\n                fileName: \"Kitab-Regular.ttf\"\n            )\n        case .quran:\n            return FontDetails(\n                name: \"KFGQPCHAFSUthmanicScript-Bold\",\n                family: \"KFGQPC HAFS Uthmanic Script\",\n                fileName: \"UthmanicHafs1B Ver13.ttf\"\n            )\n        case .suraNames:\n            return FontDetails(\n                name: \"icomoon\",\n                family: \"icomoon\",\n                fileName: \"surah_names.ttf\"\n            )\n        }\n    }\n}\n\npublic extension Font {\n    static func custom(_ name: FontName, size: CGFloat) -> Font {\n        custom(name.details.name, size: size)\n    }\n\n    static func custom(_ name: FontName, size: CGFloat, relativeTo textStyle: Font.TextStyle) -> Font {\n        custom(name.details.name, size: size, relativeTo: textStyle)\n    }\n}\n\npublic extension UIFont {\n    convenience init(_ font: FontName, size: CGFloat) {\n        self.init(name: font.details.name, size: size)!\n    }\n}\n\nextension FontName {\n    public static func registerFonts() {\n        for font in FontName.allCases {\n            registerFont(font.details.fileName, in: .module)\n        }\n    }\n\n    private static func registerFont(_ name: String, in bundle: Bundle) {\n        let fontURL = bundle.url(forResource: name, withExtension: nil)!\n        let fontDataProvider = CGDataProvider(url: fontURL as CFURL)!\n        let font = CGFont(fontDataProvider)!\n        var error: Unmanaged<CFError>?\n        if !CTFontManagerRegisterGraphicsFont(font, &error) {\n            var message = \"Couldn't register font \\(name).\"\n            if let error {\n                message += \" Error: \\(dump(error))\"\n            }\n            fatalError(message)\n        }\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/BaseControllers/BaseNavigationController.swift",
    "content": "//\n//  BaseNavigationController.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/20/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\n@MainActor\npublic protocol ForcedNavigationBarVisibilityController {\n    var navigationBarHidden: Bool { get }\n}\n\nopen class BaseNavigationController: UINavigationController {\n    // MARK: Open\n\n    override open var supportedInterfaceOrientations: UIInterfaceOrientationMask {\n        topViewController?.supportedInterfaceOrientations ?? super.supportedInterfaceOrientations\n    }\n\n    // MARK: Public\n\n    override public var shouldAutorotate: Bool {\n        topViewController?.shouldAutorotate ?? super.shouldAutorotate\n    }\n\n    override public var prefersStatusBarHidden: Bool {\n        topViewController?.prefersStatusBarHidden ?? super.prefersStatusBarHidden\n    }\n\n    override public func setNavigationBarHidden(_ hidden: Bool, animated: Bool) {\n        if let vc = topViewController as? ForcedNavigationBarVisibilityController {\n            super.setNavigationBarHidden(vc.navigationBarHidden, animated: animated)\n        } else {\n            super.setNavigationBarHidden(hidden, animated: animated)\n        }\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/BaseControllers/BaseViewController.swift",
    "content": "//\n//  BaseViewController.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/8/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\nopen class BaseViewController: UIViewController { }\n"
  },
  {
    "path": "UI/NoorUI/BaseControllers/UIViewController+Error.swift",
    "content": "//\n//  UIViewController+Error.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2/27/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport Crashing\nimport Localization\nimport UIKit\n\nextension UIViewController {\n    public func showErrorAlert(error: Error) {\n        if error.isCancelled {\n            return\n        }\n        if Thread.current.isMainThread {\n            _showErrorAlert(error: error)\n        } else {\n            DispatchQueue.main.async {\n                self._showErrorAlert(error: error)\n            }\n        }\n    }\n\n    private func _showErrorAlert(error: Error) {\n        crasher.recordError(error, reason: \"showErrorAlert\")\n        let message = error.getErrorDescription()\n        let controller = UIAlertController(title: l(\"error.dialog.title\"), message: message, preferredStyle: .alert)\n        controller.addAction(UIAlertAction(title: \"Ok\", style: .cancel, handler: nil))\n        present(controller, animated: true)\n    }\n}\n\nextension Error {\n    func getErrorDescription() -> String {\n        let description = (self as? LocalizedError)?.errorDescription\n        return description ?? l(\"error.message.general\")\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Colors/Color+extension.swift",
    "content": "//\n//  Color+extension.swift\n//\n//\n//  Created by Afifi, Mohamed on 7/23/21.\n//\n\nimport SwiftUI\n\nextension Color {\n    public static var appIdentity: Color {\n        Color(\"appTint\", bundle: .module)\n    }\n\n    public static var pageMarkerTint: Color {\n        Color(UIColor { collection in\n            collection.userInterfaceStyle == .dark ? UIColor(rgb: 0x039F85) : UIColor(rgb: 0x004D40)\n        })\n    }\n}\n\npublic extension UIColor {\n    static var appIdentity: UIColor {\n        UIColor(named: \"appTint\", in: .module, compatibleWith: nil) ?? .systemIndigo\n    }\n}\n\nextension UIColor {\n    static var themeCalmText: UIColor {\n        UIColor(named: \"theme-calm-text\", in: .module, compatibleWith: nil)!\n    }\n\n    static var themeCalmBackground: UIColor {\n        UIColor(named: \"theme-calm-bg\", in: .module, compatibleWith: nil)!\n    }\n\n    static var themeFocusText: UIColor {\n        UIColor(named: \"theme-focus-text\", in: .module, compatibleWith: nil)!\n    }\n\n    static var themeFocusBackground: UIColor {\n        UIColor(named: \"theme-focus-bg\", in: .module, compatibleWith: nil)!\n    }\n\n    static var themeOriginalText: UIColor {\n        UIColor(named: \"theme-original-text\", in: .module, compatibleWith: nil)!\n    }\n\n    static var themeOriginalBackground: UIColor {\n        UIColor(named: \"theme-original-bg\", in: .module, compatibleWith: nil)!\n    }\n\n    static var themePaperText: UIColor {\n        UIColor(named: \"theme-paper-text\", in: .module, compatibleWith: nil)!\n    }\n\n    static var themePaperBackground: UIColor {\n        UIColor(named: \"theme-paper-bg\", in: .module, compatibleWith: nil)!\n    }\n\n    static var themeQuietText: UIColor {\n        UIColor(named: \"theme-quiet-text\", in: .module, compatibleWith: nil)!\n    }\n\n    static var themeQuietBackground: UIColor {\n        UIColor(named: \"theme-quiet-bg\", in: .module, compatibleWith: nil)!\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Colors/Colors.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "UI/NoorUI/Colors/Colors.xcassets/appTint.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0x71\",\n          \"green\" : \"0x6B\",\n          \"red\" : \"0x1B\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"srgb\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0xB2\",\n          \"green\" : \"0xA9\",\n          \"red\" : \"0x2B\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "UI/NoorUI/Colors/Colors.xcassets/theme-calm-bg.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.800\",\n          \"green\" : \"0.886\",\n          \"red\" : \"0.933\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.192\",\n          \"green\" : \"0.231\",\n          \"red\" : \"0.255\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "UI/NoorUI/Colors/Colors.xcassets/theme-calm-text.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.118\",\n          \"green\" : \"0.157\",\n          \"red\" : \"0.196\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.867\",\n          \"green\" : \"0.925\",\n          \"red\" : \"0.969\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "UI/NoorUI/Colors/Colors.xcassets/theme-focus-bg.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.961\",\n          \"green\" : \"0.988\",\n          \"red\" : \"0.996\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.051\",\n          \"green\" : \"0.086\",\n          \"red\" : \"0.094\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "UI/NoorUI/Colors/Colors.xcassets/theme-focus-text.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.008\",\n          \"green\" : \"0.071\",\n          \"red\" : \"0.078\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.925\",\n          \"green\" : \"0.976\",\n          \"red\" : \"0.996\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "UI/NoorUI/Colors/Colors.xcassets/theme-original-bg.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"1.000\",\n          \"green\" : \"1.000\",\n          \"red\" : \"1.000\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.000\",\n          \"green\" : \"0.000\",\n          \"red\" : \"0.000\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "UI/NoorUI/Colors/Colors.xcassets/theme-original-text.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.000\",\n          \"green\" : \"0.000\",\n          \"red\" : \"0.000\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"1.000\",\n          \"green\" : \"1.000\",\n          \"red\" : \"1.000\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "UI/NoorUI/Colors/Colors.xcassets/theme-paper-bg.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.929\",\n          \"green\" : \"0.929\",\n          \"red\" : \"0.933\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.118\",\n          \"green\" : \"0.110\",\n          \"red\" : \"0.110\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "UI/NoorUI/Colors/Colors.xcassets/theme-paper-text.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.102\",\n          \"green\" : \"0.102\",\n          \"red\" : \"0.114\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.941\",\n          \"green\" : \"0.949\",\n          \"red\" : \"0.949\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "UI/NoorUI/Colors/Colors.xcassets/theme-quiet-bg.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.302\",\n          \"green\" : \"0.290\",\n          \"red\" : \"0.290\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.000\",\n          \"green\" : \"0.000\",\n          \"red\" : \"0.000\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "UI/NoorUI/Colors/Colors.xcassets/theme-quiet-text.colorset/Contents.json",
    "content": "{\n  \"colors\" : [\n    {\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.957\",\n          \"green\" : \"0.922\",\n          \"red\" : \"0.922\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    },\n    {\n      \"appearances\" : [\n        {\n          \"appearance\" : \"luminosity\",\n          \"value\" : \"dark\"\n        }\n      ],\n      \"color\" : {\n        \"color-space\" : \"display-p3\",\n        \"components\" : {\n          \"alpha\" : \"1.000\",\n          \"blue\" : \"0.573\",\n          \"green\" : \"0.553\",\n          \"red\" : \"0.553\"\n        }\n      },\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "UI/NoorUI/Components/ActiveRoundedButton.swift",
    "content": "//\n//  ActiveRoundedButton.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-09-29.\n//\n\nimport SwiftUI\nimport UIx\n\npublic struct ActiveRoundedButton: View {\n    let label: String\n    let action: AsyncAction\n\n    public init(label: String, action: @escaping AsyncAction) {\n        self.label = label\n        self.action = action\n    }\n\n    public var body: some View {\n        AsyncButton(action: action) {\n            Text(label)\n                .foregroundColor(.white)\n                .padding(.vertical, 5)\n                .padding(.horizontal, 10)\n                .background(\n                    RoundedActiveBackground(cornerRadius: 100)\n                )\n        }\n        .buttonStyle(.borderless)\n    }\n}\n\nprivate struct RoundedActiveBackground: View {\n    let cornerRadius: CGFloat\n\n    var body: some View {\n        RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)\n            .fill(Color.appIdentity.opacity(0.8))\n            .shadow(color: .systemGray3, radius: 2)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Components/AppStoreDownloadButton.swift",
    "content": "//\n//  AppStoreDownloadButton.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-28.\n//\n\nimport SwiftUI\nimport UIx\n\npublic enum DownloadType {\n    case pending\n    case downloading(progress: Double)\n    case download\n}\n\nstruct AppStoreDownloadButton: View {\n    @ScaledMetric private var length = 26\n\n    let type: DownloadType\n    let action: AsyncAction\n\n    var body: some View {\n        AsyncButton(action: action) {\n            Group {\n                switch type {\n                case .pending:\n                    CircularPendingView()\n                case .downloading(let progress):\n                    CircularDownloadingView(progress: progress)\n                case .download:\n                    NoorSystemImage.download.image\n                        .renderingMode(.template)\n                        .foregroundColor(.accentColor)\n                }\n            }\n            .frame(width: length, height: length)\n        }\n        .buttonStyle(.borderless)\n    }\n}\n\nstruct CircularPendingView: View {\n    var body: some View {\n        Arc(circlePercentage: 0.94)\n            .stroke(Color.accentColor, lineWidth: lineWidth)\n            .rotationEffect(.degrees(isAnimating ? 360 : 0))\n            .animation(.linear(duration: 1).repeatForever(autoreverses: false), value: isAnimating)\n            .onAppear {\n                isAnimating = true\n            }\n    }\n\n    @State private var isAnimating = false\n    @ScaledMetric private var lineWidth: Double = 1\n}\n\nstruct CircularDownloadingView: View {\n    @ScaledMetric private var stopLength = 8\n    @ScaledMetric private var lineWidth: Double = 1\n    @ScaledMetric private var fillLineWidth: Double = 4\n\n    let progress: Double\n\n    var body: some View {\n        ZStack {\n            Circle()\n                .stroke(Color.accentColor, lineWidth: lineWidth)\n\n            Arc(circlePercentage: progress)\n                .strokeBorder(Color.accentColor, style: StrokeStyle(lineWidth: fillLineWidth, lineCap: .butt))\n\n            Rectangle()\n                .fill(Color.accentColor)\n                .frame(width: stopLength, height: stopLength)\n        }\n    }\n}\n\nstruct AppStoreDownloadButton_Previews: PreviewProvider {\n    static var previews: some View {\n        List {\n            Group {\n                AppStoreDownloadButton(type: .pending) { }\n                AppStoreDownloadButton(type: .downloading(progress: 0.3)) { }\n                AppStoreDownloadButton(type: .download) { }\n                AppStoreDownloadButton(type: .downloading(progress: 0.9)) { }\n            }\n            .padding()\n            .border(Color.red)\n        }\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Components/AppearanceModeSelector.swift",
    "content": "//\n//  AppearanceModeSelector.swift\n//\n//\n//  Created by Afifi, Mohamed on 9/5/21.\n//\n\nimport Localization\nimport SwiftUI\nimport UIx\n\npublic struct AppearanceModeSelector: View {\n    // MARK: Lifecycle\n\n    public init(appearanceMode: Binding<AppearanceMode>) {\n        _appearanceMode = appearanceMode\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        HStack {\n            Spacer()\n            ForEach([AppearanceMode.light, .dark, .auto], id: \\.self) { mode in\n                AppearanceModeSelection(label: mode.localizedName, selected: appearanceMode == mode) {\n                    appearanceMode = mode\n                }\n            }\n            Spacer()\n        }\n    }\n\n    // MARK: Internal\n\n    @Binding var appearanceMode: AppearanceMode\n}\n\nextension AppearanceMode {\n    public var localizedName: String {\n        switch self {\n        case .auto: l(\"theme.auto\")\n        case .light: l(\"theme.light\")\n        case .dark: l(\"theme.dark\")\n        }\n    }\n}\n\nprivate struct AppearanceModeSelection: View {\n    let label: String\n    let selected: Bool\n    var action: () -> Void\n\n    var body: some View {\n        Button {\n            if !selected {\n                action()\n            }\n        }\n        label: {\n            VStack {\n                Text(label)\n                    .foregroundColor(.label)\n                Text(\"\")\n                if selected {\n                    Image(systemName: \"checkmark.circle.fill\")\n                        .foregroundColor(.accentColor)\n                } else {\n                    Image(systemName: \"checkmark.circle.fill\")\n                        .hidden()\n                        .overlay(Circle().stroke(Color.systemGray))\n                }\n            }\n            .padding()\n        }\n        .buttonStyle(.borderless)\n    }\n}\n\n#Preview {\n    struct Container: View {\n        @State var appearanceMode: AppearanceMode = .auto\n\n        var body: some View {\n            VStack {\n                AppearanceModeSelector(appearanceMode: $appearanceMode)\n            }\n        }\n    }\n    return Container()\n}\n"
  },
  {
    "path": "UI/NoorUI/Components/ChoicesView.swift",
    "content": "//\n//  ChoicesView.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-09-29.\n//\n\nimport SwiftUI\n\npublic struct ChoicesView<Item: Hashable>: View {\n    let items: [Item]\n    @Binding var selection: Item\n    let itemLabel: (Item) -> String\n\n    public init(items: [Item], selection: Binding<Item>, itemLabel: @escaping (Item) -> String) {\n        self.items = items\n        _selection = selection\n        self.itemLabel = itemLabel\n    }\n\n    public var body: some View {\n        Picker(\"\", selection: $selection) {\n            ForEach(items, id: \\.self) { item in\n                Text(itemLabel(item))\n            }\n        }\n        .pickerStyle(SegmentedPickerStyle())\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Components/DataUnavailableView.swift",
    "content": "//\n//  DataUnavailableView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-13.\n//\n\nimport Localization\nimport SwiftUI\n\npublic struct DataUnavailableView: View {\n    // MARK: Lifecycle\n\n    public init(title: String, text: String, image: NoorSystemImage) {\n        self.title = title\n        self.text = text\n        self.image = image\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        GeometryReader { proxy in\n            VStack {\n                image.image\n                    .font(.largeTitle)\n                    .imageScale(.large)\n                Text(title)\n                    .font(.headline)\n                    .padding()\n                Text(text)\n                    .multilineTextAlignment(.center)\n            }\n            .foregroundColor(.secondaryLabel)\n            .padding(.horizontal)\n            .offset(y: proxy.size.height / 4)\n            .frame(maxWidth: .infinity)\n        }\n        .background(Color.systemGroupedBackground)\n        .ignoresSafeArea()\n    }\n\n    // MARK: Internal\n\n    let title: String\n    let text: String\n    let image: NoorSystemImage\n}\n\nstruct DataUnavailableView_Previews: PreviewProvider {\n    static var previews: some View {\n        DataUnavailableView(\n            title: l(\"bookmarks.no-data.title\"),\n            text: l(\"bookmarks.no-data.text\"),\n            image: .bookmark\n        )\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Components/DisclosureIndicator.swift",
    "content": "//\n//  DisclosureIndicator.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-25.\n//\n\nimport SwiftUI\n\nstruct DisclosureIndicator: View {\n    var body: some View {\n        Image(systemName: \"chevron.right\")\n            .flipsForRightToLeftLayoutDirection(true)\n            .foregroundColor(.secondaryLabel)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Components/DropdownButton.swift",
    "content": "//\n//  DropdownButton.swift\n//  QuranEngine\n//\n//  Created by Mohamed Afifi on 2025-03-28.\n//\n\nimport SwiftUI\n\npublic struct DropdownButton<Item: Hashable, Content: View>: View {\n    private let items: [Item]\n    @Binding private var selectedItem: Item\n    private let content: (Item) -> Content\n\n    @ScaledMetric private var horizontalPadding = 12.0\n    @ScaledMetric private var verticalPadding = 6.0\n    @ScaledMetric private var cornerRadius = Dimensions.cornerRadius\n\n    public init(items: [Item], selectedItem: Binding<Item>, @ViewBuilder content: @escaping (Item) -> Content) {\n        self.items = items\n        _selectedItem = selectedItem\n        self.content = content\n    }\n\n    public var body: some View {\n        Menu {\n            ForEach(items, id: \\.self) { item in\n                Button {\n                    selectedItem = item\n                } label: {\n                    content(item)\n                }\n            }\n        } label: {\n            VStack {\n                HStack {\n                    content(selectedItem)\n                    Image(systemName: \"chevron.down\")\n                        .font(.caption)\n                }\n            }\n            .padding(.horizontal, horizontalPadding)\n            .padding(.vertical, verticalPadding)\n            .background(\n                RoundedRectangle(cornerRadius: cornerRadius)\n                    .stroke(Color.systemGray)\n            )\n            .foregroundStyle(Color.label)\n        }\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Components/ErrorAlertModifier.swift",
    "content": "//\n//  ErrorAlertModifier.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-08.\n//\n\nimport Crashing\nimport Localization\nimport SwiftUI\nimport UIx\n\nextension View {\n    public func errorAlert(error: Binding<Error?>, retry: AsyncAction? = nil) -> some View {\n        modifier(ErrorAlertModifier(error: error, retry: retry))\n    }\n}\n\nstruct ErrorAlertModifier: ViewModifier {\n    @Binding var error: Error?\n    let retry: AsyncAction?\n\n    var showError: Binding<Bool> {\n        Binding(\n            get: {\n                if let error {\n                    return !error.isCancelled\n                } else {\n                    return false\n                }\n            },\n            set: { showError in\n                if !showError {\n                    error = nil\n                } else {\n                    // Do nothing since the alert cannot show itself.\n                }\n            }\n        )\n    }\n\n    func body(content: Content) -> some View {\n        content.alert(isPresented: showError) {\n            if let error {\n                crasher.recordError(error, reason: \"ErrorModifier\")\n                if let retry {\n                    return Alert(\n                        title: Text(l(\"error.dialog.title\")),\n                        message: Text(error.getErrorDescription()),\n                        primaryButton: .default(Text(lAndroid(\"download_retry\"))) {\n                            Task {\n                                await retry()\n                            }\n                        },\n                        secondaryButton: .cancel()\n                    )\n                } else {\n                    return Alert(\n                        title: Text(l(\"error.dialog.title\")),\n                        message: Text(error.getErrorDescription())\n                    )\n                }\n            } else {\n                return Alert(\n                    title: Text(l(\"error.dialog.title\")),\n                    message: Text(\"\")\n                )\n            }\n        }\n    }\n}\n\nstruct ErrorAlert_Previews: PreviewProvider {\n    struct ErrorView: View {\n        @State var error: Error?\n\n        var body: some View {\n            NoorList {\n                Section {\n                    Button {\n                        error = URLError(.timedOut)\n                    } label: {\n                        Text(\"Show error alert\")\n                    }\n                }\n            }\n            .errorAlert(error: $error)\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        ErrorView()\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Components/List/NoorList.swift",
    "content": "//\n//  NoorList.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-04.\n//\n\nimport SwiftUI\n\npublic struct NoorList<Content: View>: View {\n    public enum ListType {\n        case app\n        case searching\n    }\n\n    // MARK: Lifecycle\n\n    public init(listType: ListType = .app, @ViewBuilder content: () -> Content) {\n        self.content = content()\n        self.listType = listType\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        configureList {\n            List {\n                content\n            }\n        }\n\n        .listStyle(.insetGrouped)\n    }\n\n    // MARK: Private\n\n    private let listType: ListType\n    private let content: Content\n\n    @ViewBuilder\n    private func configureList(@ViewBuilder list: () -> some View) -> some View {\n        let list = list()\n        switch listType {\n        case .app:\n            list.listStyle(.insetGrouped)\n        case .searching:\n            list.listStyle(.plain)\n        }\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Components/List/NoorListItem.swift",
    "content": "//\n//  NoorListItem.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-25.\n//\n\nimport SwiftUI\nimport UIx\nimport VLogging\n\npublic struct NoorListItem: View {\n    public struct Subtitle {\n        // MARK: Lifecycle\n\n        public init(label: String? = nil, text: String, location: SubtitleLocation) {\n            self.label = label\n            self.text = text\n            self.location = location\n        }\n\n        // MARK: Internal\n\n        let label: String?\n        let text: String\n        let location: SubtitleLocation\n    }\n\n    public struct ItemImage {\n        // MARK: Lifecycle\n\n        public init(_ image: NoorSystemImage, color: Color? = nil) {\n            self.image = image\n            self.color = color\n        }\n\n        // MARK: Internal\n\n        let image: NoorSystemImage\n        let color: Color?\n    }\n\n    // MARK: Lifecycle\n\n    public init(\n        leadingEdgeLineColor: Color? = nil,\n        image: ItemImage? = nil,\n        heading: String? = nil,\n        subheading: MultipartText? = nil,\n        rightPretitle: MultipartText? = nil,\n        title: MultipartText,\n        rightSubtitle: MultipartText? = nil,\n        subtitle: Subtitle? = nil,\n        accessory: Accessory? = nil,\n        action: AsyncAction? = nil\n    ) {\n        self.leadingEdgeLineColor = leadingEdgeLineColor\n        self.image = image\n        self.heading = heading\n        self.subheading = subheading\n        self.rightPretitle = rightPretitle\n        self.title = title\n        self.rightSubtitle = rightSubtitle\n        self.subtitle = subtitle\n        self.accessory = accessory\n        _action = action\n    }\n\n    // MARK: Public\n\n    public enum SubtitleLocation {\n        case trailing\n        case bottom\n    }\n\n    public enum Accessory {\n        case text(String)\n        case disclosureIndicator\n        case download(DownloadType, action: AsyncAction)\n        case image(NoorSystemImage, color: Color? = nil)\n\n        // MARK: Internal\n\n        var actionable: Bool {\n            switch self {\n            case .text: return false\n            case .download: return true\n            case .disclosureIndicator: return false\n            case .image: return false\n            }\n        }\n    }\n\n    public var body: some View {\n        if let action {\n            if let accessory, accessory.actionable {\n                // Use Tap gesture since tapping accessory button will also trigger the whole cell selection.\n                content\n                    .onAsyncTapGesture(asyncAction: action)\n            } else {\n                AsyncButton(action: action) {\n                    content\n                }\n            }\n        } else {\n            content\n        }\n    }\n\n    // MARK: Internal\n\n    let leadingEdgeLineColor: Color?\n    let image: ItemImage?\n    let heading: String?\n    let subheading: MultipartText?\n    let rightPretitle: MultipartText?\n    let title: MultipartText\n    let rightSubtitle: MultipartText?\n    let subtitle: Subtitle?\n    let accessory: Accessory?\n    let _action: AsyncAction?\n\n    // MARK: Private\n\n    private var action: AsyncAction? {\n        guard let _action else {\n            return nil\n        }\n        return {\n            let properties: [(String, String?)] = [\n                (\"heading\", heading),\n                (\"subheading\", subheading?.rawValue),\n                (\"rightPretitle\", rightPretitle?.rawValue),\n                (\"title\", title.rawValue),\n                (\"rightSubtitle\", rightSubtitle?.rawValue),\n                (\"subtitle\", subtitle?.label),\n            ]\n            let description = properties.compactMap { p in p.1.map { \"\\(p.0)=\\($0)\" } }.joined()\n            logger.info(\"NoorListItem tapped. {\\(description)}\")\n            await _action()\n        }\n    }\n\n    private var content: some View {\n        HStack {\n            if let leadingEdgeLineColor {\n                leadingEdgeLineColor\n                    .frame(width: 4)\n            }\n\n            if let image {\n                if let color = image.color {\n                    image.image.image\n                        .foregroundColor(color)\n                } else {\n                    image.image.image\n                }\n            }\n\n            VStack(alignment: .leading) {\n                if let heading {\n                    Text(heading)\n                        .foregroundColor(.accentColor)\n                }\n\n                if let subheading {\n                    subheading.view(ofSize: .caption)\n                        .foregroundColor(Color.secondaryLabel)\n                }\n\n                if let rightPretitle {\n                    HStack {\n                        rightPretitle.view(ofSize: .body)\n                        Spacer()\n                    }\n                    .environment(\\.layoutDirection, .rightToLeft)\n                }\n\n                title.view(ofSize: .body)\n\n                if let rightSubtitle {\n                    HStack {\n                        rightSubtitle.view(ofSize: .caption)\n                            .foregroundColor(.secondaryLabel)\n                        Spacer()\n                    }\n                    .environment(\\.layoutDirection, .rightToLeft)\n                }\n\n                if let subtitle, subtitle.location == .bottom {\n                    subtitleView(subtitle, textFont: .footnote)\n                }\n            }\n\n            if subtitle?.location == .trailing || accessory != nil {\n                Spacer()\n\n                if let subtitle, subtitle.location == .trailing {\n                    subtitleView(subtitle, textFont: .body)\n                }\n\n                if let accessory {\n                    switch accessory {\n                    case .text(let text):\n                        Text(text)\n                            .foregroundColor(.secondaryLabel)\n                            .fontWeight(.light)\n                    case .disclosureIndicator:\n                        DisclosureIndicator()\n                    case let .download(type, action):\n                        AppStoreDownloadButton(type: type, action: action)\n                    case let .image(image, color):\n                        if let color {\n                            image.image\n                                .foregroundColor(color)\n                        } else {\n                            image.image\n                        }\n                    }\n                }\n            }\n        }\n        .foregroundColor(.primary)\n        .contentShape(Rectangle())\n    }\n\n    @ViewBuilder\n    private func subtitleText(_ subtitle: Subtitle, textFont: Font) -> Text {\n        Text(subtitle.text)\n            .foregroundColor(.secondaryLabel)\n            .font(textFont)\n    }\n\n    @ViewBuilder\n    private func subtitleView(_ subtitle: Subtitle, textFont: Font) -> some View {\n        if let label = subtitle.label {\n            Text(label)\n                .foregroundColor(.secondaryLabel)\n                .font(textFont.bold()) +\n                subtitleText(subtitle, textFont: textFont)\n        } else {\n            subtitleText(subtitle, textFont: textFont)\n        }\n    }\n}\n\nstruct NoorListItem_Previews: PreviewProvider {\n    static let ayahText = \"وَإِذۡ قَالَ مُوسَىٰ لِقَوۡمِهِۦ يَٰقَوۡمِ إِنَّكُمۡ ظَلَمۡتُمۡ أَنفُسَكُم بِٱتِّخَاذِكُمُ ٱلۡعِجۡلَ فَتُوبُوٓاْ إِلَىٰ بَارِئِكُمۡ فَٱقۡتُلُوٓاْ أَنفُسَكُمۡ ذَٰلِكُمۡ خَيۡرٞ لَّكُمۡ عِندَ بَارِئِكُمۡ فَتَابَ عَلَيۡكُمۡۚ إِنَّهُۥ هُوَ ٱلتَّوَّابُ ٱلرَّحِيمُ\"\n\n    static var previews: some View {\n        List {\n            ForEach(0 ..< 100) { section in\n                Section {\n                    NoorListItem(\n                        image: .init(.audio),\n                        title: \"Title\",\n                        accessory: .none\n                    )\n\n                    NoorListItem(\n                        image: .init(.share),\n                        heading: \"English\",\n                        title: \"An English title\",\n                        subtitle: .init(label: \"Translator: \", text: \"An English subtitle\", location: .bottom)\n                    ) {\n                    }\n\n                    NoorListItem(\n                        leadingEdgeLineColor: .purple,\n                        subheading: \"Sura 1, verse 2 \\(sura: String(UnicodeScalar(0xE907)!))\",\n                        rightPretitle: \"\\(verse: ayahText, color: .purple, lineLimit: 2)\",\n                        title: \"An English title\",\n                        subtitle: .init(text: \"6 days ago\", location: .bottom)\n                    ) {\n                    }\n\n                    NoorListItem(\n                        image: .init(.mail),\n                        title: \"Title\",\n                        subtitle: .init(text: \"Subtitle\", location: .trailing),\n                        accessory: .disclosureIndicator\n                    ) {\n                    }\n\n                    NoorListItem(\n                        title: \"Reciter name\",\n                        subtitle: .init(text: \"1.25GB – 14 suras downloaded\", location: .bottom),\n                        accessory: .none\n                    ) {\n                    }\n\n                    NoorListItem(\n                        image: .init(.bookmark, color: .red),\n                        title: \"Sura 1 \\(sura: String(UnicodeScalar(0xE907)!))\",\n                        subtitle: .init(text: \"Just now\", location: .bottom),\n                        accessory: .text(\"44\")\n                    ) {\n                    }\n\n                    NoorListItem(\n                        title: \"Reciter name\",\n                        subtitle: .init(text: \"1.25GB – 14 suras downloaded\", location: .bottom),\n                        accessory: .download(.downloading(progress: 0.9), action: {})\n                    ) {\n                    }\n\n                    NoorListItem(\n                        title: \"Reciter name\",\n                        subtitle: .init(text: \"1.25GB – 14 suras downloaded\", location: .bottom),\n                        accessory: .download(.download, action: {})\n                    )\n\n                } header: {\n                    Text(\"Section \\(section + 1)\")\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Components/List/NoorSection.swift",
    "content": "//\n//  NoorSection.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-04.\n//\n\nimport SwiftUI\nimport UIx\n\npublic struct NoorBasicSection<Content: View>: View {\n    // MARK: Lifecycle\n\n    public init(title: String? = nil, footer: String? = nil, @ViewBuilder content: () -> Content) {\n        self.title = title\n        self.footer = footer\n        self.content = content()\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        if let footer {\n            if let title {\n                Section {\n                    content\n                } header: {\n                    Text(title)\n                } footer: {\n                    Text(footer)\n                }\n            } else {\n                Section {\n                    content\n                } footer: {\n                    Text(footer)\n                }\n            }\n        } else if let title {\n            Section {\n                content\n            } header: {\n                Text(title)\n            }\n        } else {\n            Section {\n                content\n            }\n        }\n    }\n\n    // MARK: Internal\n\n    let title: String?\n    let footer: String?\n    let content: Content\n}\n\npublic struct SelfIdentifiable<T: Hashable>: Identifiable {\n    // MARK: Lifecycle\n\n    public init(value: T) {\n        self.value = value\n    }\n\n    // MARK: Public\n\n    public let value: T\n\n    public var id: T { value }\n}\n\npublic struct NoorSection<Item: Identifiable, ListItem: View>: View {\n    // MARK: Lifecycle\n\n    public init(\n        title: String? = nil,\n        _ items: [Item],\n        @ViewBuilder listItem: @escaping (Item) -> ListItem,\n        onDelete: AsyncItemAction<Item>? = nil,\n        onMove: ((IndexSet, Int) -> Void)? = nil\n    ) {\n        self.title = title\n        self.items = items\n        self.listItem = listItem\n        self.onDelete = onDelete\n        self.onMove = onMove\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        if !items.isEmpty {\n            NoorBasicSection(title: title) {\n                ForEach(items) { item in\n                    listItem(item)\n                }\n                .onDelete(perform: onDelete.map { onDelete in\n                    { indexSet in\n                        Task {\n                            let itemsToDelete = indexSet.map { items[$0] }\n                            for itemToDelete in itemsToDelete {\n                                await onDelete(itemToDelete)\n                            }\n                        }\n                    }\n                })\n                .onMove(perform: onMove)\n            }\n        }\n    }\n\n    // MARK: Internal\n\n    let title: String?\n    let items: [Item]\n    let listItem: (Item) -> ListItem\n    var onDelete: AsyncItemAction<Item>?\n    var onMove: ((IndexSet, Int) -> Void)?\n}\n\nextension NoorSection {\n    public func onDelete(action: AsyncItemAction<Item>?) -> Self {\n        var mutableSelf = self\n        mutableSelf.onDelete = action\n        return mutableSelf\n    }\n\n    public func onMove(action: ((IndexSet, Int) -> Void)?) -> Self {\n        var mutableSelf = self\n        mutableSelf.onMove = action\n        return mutableSelf\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Components/LoadingView.swift",
    "content": "//\n//  LoadingView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-07.\n//\n\nimport SwiftUI\n\npublic struct LoadingView: View {\n    // MARK: Lifecycle\n\n    public init() {}\n\n    // MARK: Public\n\n    public var body: some View {\n        HStack {\n            Spacer()\n            ProgressView()\n            Spacer()\n        }\n        .listRowBackground(Color.clear)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Components/MultipartText.swift",
    "content": "//\n//  MultipartText.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-14.\n//\n\nimport SwiftUI\nimport UIx\n\npublic struct HighlightingRange {\n    // MARK: Lifecycle\n\n    public init(_ range: Range<String.Index>, foregroundColor: Color? = nil, fontWeight: Font.Weight? = nil) {\n        self.range = range\n        self.foregroundColor = foregroundColor\n        self.fontWeight = fontWeight\n    }\n\n    // MARK: Internal\n\n    let range: Range<String.Index>\n    let foregroundColor: Color?\n    let fontWeight: Font.Weight?\n}\n\nprivate struct TextPartView: View {\n    // MARK: Internal\n\n    let part: TextPart\n    let size: MultipartText.FontSize\n\n    var body: some View {\n        switch part {\n        case .plain(let text):\n            Text(text)\n                .font(size.plainFont)\n        case .highlighting(let text, let ranges, let lineLimit):\n            highlighting(text: text, ranges: ranges)\n                .lineLimit(lineLimit)\n                .font(size.plainFont)\n        case .sura(let text):\n            if NSLocale.preferredLanguages.first != \"ar\" {\n                Text(text)\n                    .padding(.top, 5)\n                    .frame(alignment: .center)\n                    .font(size.suraFont)\n            }\n        case .verse(let text, let color, let lineLimit):\n            Text(text)\n                .lineLimit(lineLimit)\n                .font(size.verseFont)\n                .padding(versePadding)\n                .background(color)\n        }\n    }\n\n    // MARK: Private\n\n    @ScaledMetric private var versePadding = 5\n\n    private func highlighting(text: String, ranges: [HighlightingRange]) -> Text {\n        var attributedString = AttributedString(text)\n        for highlight in ranges {\n            if let start = AttributedString.Index(highlight.range.lowerBound, within: attributedString),\n               let end = AttributedString.Index(highlight.range.upperBound, within: attributedString)\n            {\n                if let foregroundColor = highlight.foregroundColor {\n                    attributedString[start ..< end].foregroundColor = foregroundColor\n                }\n                if let fontWeight = highlight.fontWeight {\n                    attributedString[start ..< end].font = size.plainFont.weight(fontWeight)\n                }\n            }\n        }\n        return Text(attributedString)\n    }\n}\n\nprivate enum TextPart {\n    case plain(text: String)\n    case highlighting(text: String, ranges: [HighlightingRange], lineLimit: Int?)\n    case sura(text: String)\n    case verse(text: String, color: Color, lineLimit: Int?)\n\n    // MARK: Internal\n\n    var rawValue: String {\n        switch self {\n        case .plain(let text), .highlighting(let text, _, _), .sura(let text), .verse(let text, _, _):\n            return text\n        }\n    }\n}\n\npublic struct MultipartText: ExpressibleByStringInterpolation {\n    public struct StringInterpolation: StringInterpolationProtocol {\n        // MARK: Lifecycle\n\n        public init(literalCapacity: Int, interpolationCount: Int) {}\n\n        // MARK: Public\n\n        public mutating func appendLiteral(_ literal: String) {\n            parts.append(.plain(text: literal))\n        }\n\n        public mutating func appendInterpolation(sura: String) {\n            parts.append(.sura(text: sura))\n        }\n\n        public mutating func appendInterpolation(verse: String, color: Color, lineLimit: Int? = nil) {\n            parts.append(.verse(text: verse, color: color, lineLimit: lineLimit))\n        }\n\n        public mutating func appendInterpolation(_ text: String, lineLimit: Int? = nil, highlighting: [HighlightingRange]) {\n            parts.append(.highlighting(text: text, ranges: highlighting, lineLimit: lineLimit))\n        }\n\n        public mutating func appendInterpolation(_ plain: String) {\n            parts.append(.plain(text: plain))\n        }\n\n        public mutating func appendInterpolation(_ other: MultipartText) {\n            parts.append(contentsOf: other.parts)\n        }\n\n        // MARK: Fileprivate\n\n        fileprivate var parts: [TextPart] = []\n    }\n\n    // MARK: Lifecycle\n\n    public init(stringInterpolation: StringInterpolation) {\n        parts = stringInterpolation.parts\n    }\n\n    public init(stringLiteral value: StringLiteralType) {\n        parts = [.plain(text: value)]\n    }\n\n    // MARK: Public\n\n    public enum FontSize {\n        case body\n        case caption\n        case footnote\n\n        // MARK: Internal\n\n        var plainFont: Font {\n            switch self {\n            case .body: return .body\n            case .footnote: return .footnote\n            case .caption: return .caption\n            }\n        }\n\n        var suraFont: Font {\n            switch self {\n            case .body: return .custom(.suraNames, size: 20, relativeTo: .body)\n            case .footnote: return .custom(.suraNames, size: 16, relativeTo: .footnote)\n            case .caption: return .custom(.suraNames, size: 15, relativeTo: .caption)\n            }\n        }\n\n        var verseFont: Font {\n            switch self {\n            case .body: return .custom(.quran, size: 20, relativeTo: .body)\n            case .footnote: return .custom(.suraNames, size: 16, relativeTo: .footnote)\n            case .caption: return .custom(.quran, size: 15, relativeTo: .caption)\n            }\n        }\n    }\n\n    public mutating func append(_ other: MultipartText) {\n        parts.append(contentsOf: other.parts)\n    }\n\n    public func view(ofSize size: FontSize, alignment: Alignment = .leading) -> some View {\n        MultiPartTextView(text: self, size: size, alignment: alignment)\n    }\n\n    // MARK: Internal\n\n    var rawValue: String {\n        parts.map(\\.rawValue).joined()\n    }\n\n    // MARK: Fileprivate\n\n    fileprivate var parts: [TextPart]\n}\n\nextension MultipartText {\n    public static func text(_ plain: String) -> MultipartText {\n        MultipartText(stringLiteral: plain)\n    }\n}\n\nprivate struct MultiPartTextView: View {\n    // MARK: Lifecycle\n\n    let text: MultipartText\n    let size: MultipartText.FontSize\n    let alignment: Alignment\n\n    var body: some View {\n        wrap {\n            ForEach(0 ..< text.parts.count, id: \\.self) { i in\n                TextPartView(part: text.parts[i], size: size)\n            }\n        }\n    }\n\n    @ViewBuilder\n    private func wrap(@ViewBuilder content: () -> some View) -> some View {\n        if #available(iOS 16.0, *) {\n            WrappingHStack(alignment: alignment, horizontalSpacing: 0, fitContentWidth: true) {\n                content()\n            }\n        } else {\n            HStack(spacing: 0) {\n                content()\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Components/ProminentRoundedButton.swift",
    "content": "//\n//  ProminentRoundedButton.swift\n//\n//\n\nimport SwiftUI\nimport UIx\n\npublic struct ProminentRoundedButton: View {\n    @ScaledMetric private var cornerRadius = Dimensions.cornerRadius\n    @ScaledMetric private var verticalPadding = 10.0\n\n    let label: String\n    let action: AsyncAction\n\n    public init(label: String, action: @escaping AsyncAction) {\n        self.label = label\n        self.action = action\n    }\n\n    public var body: some View {\n        AsyncButton(action: action) {\n            Text(label)\n                .font(.subheadline.weight(.semibold))\n                .foregroundStyle(Color.white)\n                .frame(maxWidth: .infinity)\n                .padding(.vertical, verticalPadding)\n                .background(\n                    RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)\n                        .fill(Color.accentColor)\n                )\n        }\n        .buttonStyle(.plain)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Components/ThemeStyleSelector.swift",
    "content": "//\n//  ThemeStyleSelector.swift\n//  QuranEngine\n//\n//  Created by Mohamed Afifi on 2025-03-25.\n//\nimport SwiftUI\n\nprivate struct ThemeStyleOptionView: View {\n    let themeStyle: ThemeStyle\n    let isSelected: Bool\n    let action: () -> Void\n\n    @ScaledMetric private var cornerRadius = Dimensions.cornerRadius\n    @ScaledMetric private var borderWidth = 3.0\n\n    var body: some View {\n        Button {\n            if !isSelected {\n                action()\n            }\n        }\n        label: {\n            VStack {\n                Text(\"نور\")\n                    .font(.largeTitle)\n\n                Text(themeStyle.localizedName)\n            }\n            .frame(maxWidth: .infinity, maxHeight: .infinity)\n            .aspectRatio(1, contentMode: .fit)\n            .padding()\n            .themedForeground()\n            .themedBackground()\n            .cornerRadius(cornerRadius)\n            .appearanceModeColorSchema()\n            .overlay {\n                RoundedRectangle(cornerRadius: cornerRadius)\n                    .stroke(Color.label, lineWidth: isSelected ? borderWidth : 0)\n            }\n            .shadow(color: .secondaryLabel, radius: 1)\n        }\n        .environment(\\.themeStyle, themeStyle)\n    }\n}\n\npublic struct ThemeStyleSelector: View {\n    @Binding var selectedStyle: ThemeStyle\n\n    public init(selectedStyle: Binding<ThemeStyle>) {\n        _selectedStyle = selectedStyle\n    }\n\n    let columns = [\n        GridItem(.adaptive(minimum: 100)),\n    ]\n\n    let styles = ThemeStyle.styles\n\n    public var body: some View {\n        LazyVGrid(columns: columns) {\n            ForEach(styles, id: \\.self) { style in\n                ThemeStyleOptionView(\n                    themeStyle: style,\n                    isSelected: selectedStyle == style\n                ) { selectedStyle = style }\n            }\n        }\n        .padding()\n    }\n}\n\nprivate extension ThemeStyle {\n    // TODO: Add localization\n    var localizedName: String {\n        switch self {\n        case .paper:\n            return \"Paper\"\n        case .calm:\n            return \"Calm\"\n        case .focus:\n            return \"Focus\"\n        case .original:\n            return \"Original\"\n        case .quiet:\n            return \"Quiet\"\n        }\n    }\n}\n\n#Preview {\n    struct Container: View {\n        @State var selectedStyle: ThemeStyle = .focus\n\n        var body: some View {\n            VStack {\n                ThemeStyleSelector(selectedStyle: $selectedStyle)\n                    .padding()\n            }\n        }\n    }\n    return Container()\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/AudioBanner/AudioBannerViewUI.swift",
    "content": "//\n//  AudioBannerViewUI.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-09-02.\n//\n\nimport Localization\nimport SwiftUI\nimport UIx\n\npublic enum AudioBannerState {\n    case playing(paused: Bool, rate: Float)\n    case readyToPlay(reciter: String)\n    case downloading(progress: Double)\n}\n\npublic struct AudioBannerActions {\n    let play: () -> Void\n    let pause: () -> Void\n    let resume: () -> Void\n    let stop: () -> Void\n    let backward: () -> Void\n    let forward: () -> Void\n    let cancelDownloading: AsyncAction\n    let reciters: () -> Void\n    let more: () -> Void\n    let setPlaybackRate: (Float) -> Void\n\n    public init(\n        play: @escaping () -> Void,\n        pause: @escaping () -> Void,\n        resume: @escaping () -> Void,\n        stop: @escaping () -> Void,\n        backward: @escaping () -> Void,\n        forward: @escaping () -> Void,\n        cancelDownloading: @escaping AsyncAction,\n        reciters: @escaping () -> Void,\n        more: @escaping () -> Void,\n        setPlaybackRate: @escaping (Float) -> Void\n    ) {\n        self.play = play\n        self.pause = pause\n        self.resume = resume\n        self.stop = stop\n        self.backward = backward\n        self.forward = forward\n        self.cancelDownloading = cancelDownloading\n        self.reciters = reciters\n        self.more = more\n        self.setPlaybackRate = setPlaybackRate\n    }\n}\n\npublic struct AudioBannerViewUI: View {\n    private let state: AudioBannerState\n    private let actions: AudioBannerActions\n    public init(state: AudioBannerState, actions: AudioBannerActions) {\n        self.state = state\n        self.actions = actions\n    }\n\n    public var body: some View {\n        ZStack {\n            switch state {\n            case .playing(let paused, let rate):\n                AudioPlaying(paused: paused, currentRate: rate, actions: actions)\n            case .readyToPlay(let reciter):\n                ReadyToPlay(reciter: reciter, actions: actions)\n            case .downloading(let progress):\n                Downloading(progress: progress, actions: actions)\n            }\n        }\n        .font(.title2)\n        .background(\n            BannerBackground(color: .clear)\n                .shadow(color: .label.opacity(0.33), radius: 2)\n        )\n    }\n}\n\nprivate let speedValues: [Float] = [0.5, 0.75, 1.0, 1.25, 1.5]\n\nprivate let speedFormatter: NumberFormatter = {\n    let nf = NumberFormatter()\n    nf.locale = Locale.current.fixedLocaleNumbers()\n    nf.minimumFractionDigits = 0\n    nf.maximumFractionDigits = 2\n    return nf\n}()\n\nprivate func formattedSpeed(_ rate: Float) -> String {\n    // TODO: Localize this\n    return speedFormatter.format(rate) + \"×\"\n}\n\nprivate struct AudioPlaying: View {\n    let paused: Bool\n    let currentRate: Float\n    let actions: AudioBannerActions\n\n    var body: some View {\n        HStack {\n            Button(action: actions.stop) {\n                NoorSystemImage.stop.image\n                    .padding()\n            }\n\n            Menu {\n                ForEach(speedValues, id: \\.self) { value in\n                    Button(formattedSpeed(value)) { actions.setPlaybackRate(value) }\n                }\n            } label: {\n                Text(formattedSpeed(currentRate))\n                    .font(.footnote)\n                    .padding(.horizontal, 8)\n                    .padding(.vertical, 6)\n                    .background(Color(.systemGray5))\n                    .clipShape(Capsule())\n            }\n            .padding(.leading, 4)\n\n            Button(action: actions.backward) {\n                NoorSystemImage.backward.image\n                    .padding()\n            }\n            Group {\n                if paused {\n                    Button(action: actions.resume) {\n                        NoorSystemImage.play.image\n                    }\n                } else {\n                    Button(action: actions.pause) {\n                        NoorSystemImage.pause.image\n                    }\n                }\n            }\n            .padding()\n            Button(action: actions.forward) {\n                NoorSystemImage.forward.image\n                    .padding()\n            }\n\n            Spacer()\n            Button(action: actions.more) {\n                NoorSystemImage.more.image\n                    .padding()\n            }\n        }\n    }\n}\n\nprivate struct ReadyToPlay: View {\n    let reciter: String\n    let actions: AudioBannerActions\n    var body: some View {\n        ZStack {\n            HStack {\n                Button(action: actions.play) {\n                    NoorSystemImage.play.image\n                        .padding()\n                }\n                Spacer()\n                Text(reciter)\n                    .font(.body)\n                    .lineLimit(1)\n                Spacer()\n                Button(action: actions.more) {\n                    NoorSystemImage.more.image\n                        .padding()\n                }\n            }\n            .background {\n                Button(action: actions.reciters) {\n                    Color.clear\n                        .frame(maxWidth: .infinity, maxHeight: .infinity)\n                        .contentShape(Rectangle())\n                }\n                .buttonStyle(CustomButtonStyle { config in\n                    config.label\n                        .background(\n                            BannerBackground(color: config.isPressed ? .systemFill : Color.clear)\n                        )\n                })\n            }\n        }\n    }\n}\n\nprivate struct Downloading: View {\n    let progress: Double\n    let actions: AudioBannerActions\n    var body: some View {\n        HStack {\n            AsyncButton(action: actions.cancelDownloading) {\n                ZStack {\n                    // workaround to have uniform height.\n                    NoorSystemImage.more.image\n                        .padding()\n                        .hidden()\n                    NoorSystemImage.cancel.image\n                        .padding()\n                }\n                .overlay(Divider(), alignment: .trailing)\n            }\n\n            Spacer()\n            VStack {\n                ProgressView(value: progress)\n                    .progressViewStyle(LinearProgressViewStyle())\n\n                Text(l(\"downloading_title\"))\n                    .font(.body)\n                    .frame(maxWidth: .infinity, alignment: .leading)\n            }\n            .padding(.trailing)\n        }\n    }\n}\n\nprivate struct BannerBackground: View {\n    let color: Color\n    @ScaledMetric private var cornerRadius = Dimensions.cornerRadius\n\n    var body: some View {\n        color\n            .background(.thinMaterial)\n            .clipShape(RoundedRectangle(cornerRadius: cornerRadius))\n            .ignoresSafeArea(edges: [.bottom, .leading, .trailing])\n    }\n}\n\n#Preview {\n    struct PreviewView: View {\n        let actions = AudioBannerActions(\n            play: {},\n            pause: {},\n            resume: {},\n            stop: {},\n            backward: {},\n            forward: {},\n            cancelDownloading: {},\n            reciters: {},\n            more: {},\n            setPlaybackRate: { _ in }\n        )\n\n        let readyToPlay = AudioBannerState.readyToPlay(reciter: \"Mishary Al-afasy\")\n        let playing = AudioBannerState.playing(paused: false, rate: 1.0)\n        let downloading = AudioBannerState.downloading(progress: 0.7)\n        var state: AudioBannerState {\n            switch counter % 3 {\n            case 0: readyToPlay\n            case 1: playing\n            default: downloading\n            }\n        }\n\n        @State var counter: Int = 0\n\n        var body: some View {\n            VStack {\n                Spacer()\n                Button {\n                    counter += 1\n                } label: {\n                    Text(\"Rotate\")\n                }\n                Spacer()\n                Group {\n                    AudioBannerViewUI(state: state, actions: actions)\n                }\n            }\n        }\n    }\n\n    return PreviewView()\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/AyahMenu/AyahMenuUI.swift",
    "content": "//\n//  AyahMenuUI.swift\n//\n//\n//  Created by Afifi, Mohamed on 7/25/21.\n//\n\nimport QuranAnnotations\nimport UIx\n\npublic enum AyahMenuUI {\n    public struct Actions {\n        // MARK: Lifecycle\n\n        public init(\n            play: @escaping AsyncAction,\n            repeatVerses: @escaping AsyncAction,\n            highlight: @Sendable @escaping (Note.Color) async -> Void,\n            addNote: @escaping AsyncAction,\n            deleteNote: @escaping AsyncAction,\n            showTranslation: @escaping AsyncAction,\n            copy: @escaping AsyncAction,\n            share: @escaping AsyncAction\n        ) {\n            self.play = play\n            self.repeatVerses = repeatVerses\n            self.highlight = highlight\n            self.addNote = addNote\n            self.deleteNote = deleteNote\n            self.showTranslation = showTranslation\n            self.copy = copy\n            self.share = share\n        }\n\n        // MARK: Internal\n\n        let play: AsyncAction\n        let repeatVerses: AsyncAction\n        let highlight: @Sendable (Note.Color) async -> Void\n        let addNote: AsyncAction\n        let deleteNote: AsyncAction\n        let showTranslation: AsyncAction\n        let copy: AsyncAction\n        let share: AsyncAction\n    }\n\n    public struct DataObject {\n        // MARK: Lifecycle\n\n        public init(\n            highlightingColor: Note.Color,\n            state: NoteState,\n            playSubtitle: String,\n            repeatSubtitle: String,\n            actions: Actions,\n            isTranslationView: Bool\n        ) {\n            self.highlightingColor = highlightingColor\n            self.state = state\n            self.playSubtitle = playSubtitle\n            self.repeatSubtitle = repeatSubtitle\n            self.actions = actions\n            self.isTranslationView = isTranslationView\n        }\n\n        // MARK: Internal\n\n        let highlightingColor: Note.Color\n        let state: NoteState\n        let actions: Actions\n        let playSubtitle: String\n        let repeatSubtitle: String\n        let isTranslationView: Bool\n    }\n\n    // MARK: Public\n\n    public enum NoteState {\n        case noHighlight\n        case highlighted\n        case noted\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/AyahMenu/AyahMenuView.swift",
    "content": "//\n//  AyahMenuView.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 7/10/21.\n//  Copyright © 2021 Quran.com. All rights reserved.\n//\n\nimport Localization\nimport QuranAnnotations\nimport SwiftUI\nimport UIx\n\nprivate enum MenuState {\n    case list\n    case highlights\n}\n\npublic struct AyahMenuView: View {\n    // MARK: Lifecycle\n\n    public init(dataObject: AyahMenuUI.DataObject) {\n        self.dataObject = dataObject\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        switch state {\n        case .list:\n            ScrollView {\n                AyahMenuViewList(dataObject: dataObject) {\n                    withAnimation {\n                        state = .highlights\n                    }\n                }\n            }\n            .preferredContentSizeMatchesScrollView()\n            .transition(.opacity)\n        case .highlights:\n            ScrollView {\n                NoteCircles(selectedColor: existingHighlightedColor, tapped: dataObject.actions.highlight)\n            }\n            .preferredContentSizeMatchesScrollView()\n            .transition(AnyTransition.scale(scale: 2.0).combined(with: .opacity))\n        }\n    }\n\n    // MARK: Internal\n\n    let dataObject: AyahMenuUI.DataObject\n\n    // MARK: Private\n\n    @State private var state: MenuState = .list\n\n    private var existingHighlightedColor: Note.Color? {\n        switch dataObject.state {\n        case .highlighted, .noted:\n            return dataObject.highlightingColor\n        case .noHighlight:\n            return nil\n        }\n    }\n}\n\nprivate struct AyahMenuViewList: View {\n    let dataObject: AyahMenuUI.DataObject\n    let showHighlights: AsyncAction\n\n    var noteDeleteText: String {\n        switch dataObject.state {\n        case .noHighlight:\n            return \"-\"\n        case .highlighted:\n            return l(\"ayah.menu.delete-highlight\")\n        case .noted:\n            return l(\"ayah.menu.delete-note\")\n        }\n    }\n\n    var editNote: some View {\n        Row(title: l(\"ayah.menu.edit-note\"), action: dataObject.actions.addNote) {\n            Image(systemName: \"text.bubble.fill\")\n                .foregroundColor(dataObject.highlightingColor.color)\n        }\n    }\n\n    var addNote: some View {\n        Row(title: l(\"ayah.menu.add-note\"), action: dataObject.actions.addNote) {\n            Image(systemName: \"plus.bubble.fill\")\n                .foregroundColor(dataObject.highlightingColor.color)\n        }\n    }\n\n    var translation: some View {\n        MenuGroup {\n            Divider()\n            Row(title: l(\"menu.translation\"), action: dataObject.actions.showTranslation) {\n                Image(systemName: \"globe\")\n            }\n            Divider()\n        }\n    }\n\n    var body: some View {\n        VStack(alignment: .leading) {\n            MenuGroup {\n                Row(\n                    title: lAndroid(\"play\"),\n                    subtitle: dataObject.playSubtitle,\n                    action: dataObject.actions.play\n                ) {\n                    NoorSystemImage.play.image\n                }\n                Divider()\n                Row(\n                    title: l(\"ayah.menu.repeat\"),\n                    subtitle: dataObject.repeatSubtitle,\n                    action: dataObject.actions.repeatVerses\n                ) {\n                    Image(systemName: \"repeat\")\n                }\n                Divider()\n            }\n\n            MenuGroup {\n                Divider()\n\n                if dataObject.state == .noHighlight {\n                    Row(\n                        title: l(\"ayah.menu.highlight\"),\n                        action: {\n                            Task {\n                                await dataObject.actions.highlight(dataObject.highlightingColor)\n                            }\n                        }\n                    ) {\n                        IconCircle(color: dataObject.highlightingColor)\n                    }\n                    Divider()\n                        .padding(.leading)\n                }\n                Row(\n                    title: l(\"ayah.menu.highlight\"),\n                    subtitle: l(\"ayah.menu.highlight-select-color\"),\n                    action: showHighlights\n                ) {\n                    IconCircles()\n                }\n                Divider()\n                    .padding(.leading)\n\n                switch dataObject.state {\n                case .noHighlight, .highlighted:\n                    addNote\n                case .noted:\n                    editNote\n                }\n\n                if dataObject.state != .noHighlight {\n                    Divider()\n                        .padding(.leading)\n\n                    Row(title: noteDeleteText, action: dataObject.actions.deleteNote) {\n                        Image(systemName: \"trash\")\n                            .foregroundColor(Color.red)\n                    }\n                }\n\n                Divider()\n            }\n\n            if !dataObject.isTranslationView {\n                translation\n            }\n\n            MenuGroup {\n                Divider()\n\n                Row(title: l(\"ayah.menu.copy\"), action: dataObject.actions.copy) {\n                    Image(systemName: \"doc.on.doc\")\n                }\n                Divider()\n                    .padding(.leading)\n                Row(title: l(\"ayah.menu.share\"), action: dataObject.actions.share) {\n                    Image(systemName: \"square.and.arrow.up\")\n                }\n            }\n        }\n        .fixedSize(horizontal: true, vertical: false)\n    }\n}\n\nprivate struct Row<Symbol: View>: View {\n    // MARK: Lifecycle\n\n    init(\n        title: String,\n        subtitle: String? = nil,\n        action: @Sendable @escaping () async -> Void,\n        @ViewBuilder symbol: () -> Symbol\n    ) {\n        self.symbol = symbol()\n        self.title = title\n        self.subtitle = subtitle\n        self.action = action\n    }\n\n    // MARK: Internal\n\n    let symbol: Symbol\n    let title: String\n    let subtitle: String?\n    let action: @Sendable () async -> Void\n    @ScaledMetric var verticalPadding = 12\n\n    var body: some View {\n        AsyncButton(action: action) {\n            HStack {\n                ZStack {\n                    IconCircles()\n                        .hidden()\n                    symbol\n                        .foregroundColor(Color.label)\n                }\n                HStack(spacing: 0) {\n                    Text(title)\n                        .foregroundColor(Color.label)\n                    if let subtitle {\n                        Group {\n                            Text(\" \")\n                            Text(subtitle)\n                        }\n                        .font(.footnote)\n                        .foregroundColor(.secondaryLabel)\n                    }\n                }\n            }\n            .padding(.horizontal)\n            .padding(.vertical, verticalPadding)\n            .frame(maxWidth: .infinity, alignment: .leading)\n            .contentShape(Rectangle())\n        }\n        .buttonStyle(BackgroundHighlightingStyle())\n    }\n}\n\nprivate struct MenuGroup<Content: View>: View {\n    // MARK: Lifecycle\n\n    init(@ViewBuilder content: () -> Content) {\n        self.content = content()\n    }\n\n    // MARK: Internal\n\n    let content: Content\n\n    var body: some View {\n        VStack(alignment: .leading, spacing: 0) {\n            content\n        }\n        .background(Color.secondarySystemGroupedBackground)\n    }\n}\n\nprivate struct IconCircles: View {\n    @ScaledMetric var trailingPadding = 8\n    @ScaledMetric var purpleOffset = 8\n    @ScaledMetric var blueOffset = 4\n    @ScaledMetric var radius = 1\n\n    var body: some View {\n        ZStack {\n            IconCircle(color: .purple)\n                .offset(x: purpleOffset)\n            IconCircle(color: .blue)\n                .offset(x: blueOffset)\n            IconCircle(color: .green)\n        }\n        .compositingGroup()\n        .shadow(color: Color.tertiarySystemGroupedBackground, radius: radius)\n        .padding(.trailing, trailingPadding)\n    }\n}\n\nprivate struct IconCircle: View {\n    @ScaledMetric var minLength = 20\n\n    var color: Note.Color\n\n    var body: some View {\n        ColoredCircle(color: color.color, selected: false, minLength: minLength)\n    }\n}\n\nprivate struct NoteCircles: View {\n    let selectedColor: Note.Color?\n    let tapped: @Sendable (Note.Color) async -> Void\n\n    var body: some View {\n        HStack {\n            ForEach(Note.Color.sortedColors, id: \\.self) { color in\n                AsyncButton(\n                    action: { await tapped(color) },\n                    label: { NoteCircle(color: color.color, selected: color == selectedColor) }\n                )\n                .shadow(color: Color.tertiarySystemGroupedBackground, radius: 1)\n            }\n        }\n        .padding()\n    }\n}\n\nstruct AyahMenuView_Previews: PreviewProvider {\n    static let actions = AyahMenuUI.Actions(\n        play: {},\n        repeatVerses: {},\n        highlight: { _ in },\n        addNote: {},\n        deleteNote: {},\n        showTranslation: {},\n        copy: {},\n        share: {}\n    )\n\n    static var previews: some View {\n        Group {\n            VStack {\n                Spacer()\n                AyahMenuView(dataObject: AyahMenuUI.DataObject(\n                    highlightingColor: .green,\n                    state: .noted,\n                    playSubtitle: \"To the end of Juz'\",\n                    repeatSubtitle: \"selected verses\",\n                    actions: actions,\n                    isTranslationView: true\n                ))\n                Spacer()\n            }\n            .background(Color.systemGroupedBackground)\n\n            VStack {\n                Spacer()\n                AyahMenuView(dataObject: AyahMenuUI.DataObject(\n                    highlightingColor: .red,\n                    state: .highlighted,\n                    playSubtitle: \"To the end of Juz'\",\n                    repeatSubtitle: \"selected verses\",\n                    actions: actions,\n                    isTranslationView: true\n                ))\n                Spacer()\n            }\n            .background(Color.systemGroupedBackground)\n            .colorScheme(.dark)\n\n            VStack {\n                Spacer()\n                AyahMenuView(dataObject: AyahMenuUI.DataObject(\n                    highlightingColor: .green,\n                    state: .noHighlight,\n                    playSubtitle: \"To the end of Juz'\",\n                    repeatSubtitle: \"selected verses\",\n                    actions: actions,\n                    isTranslationView: true\n                ))\n                Spacer()\n            }\n            .background(Color.systemGroupedBackground)\n            .environment(\\.sizeCategory, .extraExtraExtraLarge)\n        }\n        .previewLayout(.fixed(width: 320, height: 470))\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Content/ContentStatusView.swift",
    "content": "//\n//  ContentStatusView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-02-20.\n//\n\nimport Localization\nimport SwiftUI\n\npublic struct ContentStatusView: View {\n    public enum State {\n        case downloading(progress: Double)\n        case error(_ error: Error, retry: () -> Void)\n    }\n\n    // MARK: Lifecycle\n\n    public init(state: State) {\n        self.state = state\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        VStack {\n            Spacer()\n            switch state {\n            case .downloading(let progress):\n                downloadingView(progress)\n            case let .error(error, retry):\n                errorView(error, retry: retry)\n            }\n            Spacer()\n            Spacer()\n        }\n        .padding()\n    }\n\n    // MARK: Private\n\n    private let state: State\n\n    private func downloadingView(_ progress: Double) -> some View {\n        VStack {\n            ProgressView(value: progress, total: 1)\n            Text(l(\"downloading_title\"))\n        }\n    }\n\n    private func errorView(_ error: Error, retry: @escaping () -> Void) -> some View {\n        VStack {\n            Text(l(\"error.message.general\"))\n            Text(error.localizedDescription)\n                .font(.callout)\n                .padding(.bottom)\n            Button(action: retry) {\n                Text(lAndroid(\"download_retry\"))\n            }\n        }\n    }\n}\n\nstruct PreparingContent_Previews: PreviewProvider {\n    static var previews: some View {\n        Group {\n            ContentStatusView(state: .downloading(progress: 0.4))\n            ContentStatusView(state: .error(URLError(.notConnectedToInternet) as NSError, retry: {}))\n        }\n        .accentColor(.appIdentity)\n        .preferredColorScheme(.light)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Note/EditableNote.swift",
    "content": "//\n//  EditableNote.swift\n//\n//\n//  Created by Afifi, Mohamed on 10/26/21.\n//\n\nimport Combine\nimport QuranAnnotations\n\npublic class EditableNote: ObservableObject {\n    // MARK: Lifecycle\n\n    public init(ayahText: String, modifiedSince: String, selectedColor: Note.Color, note: String) {\n        self.ayahText = ayahText\n        self.modifiedSince = modifiedSince\n        self.selectedColor = selectedColor\n        self.note = note\n        editing = false\n    }\n\n    // MARK: Public\n\n    public let ayahText: String\n    public let modifiedSince: String\n    @Published public internal(set) var selectedColor: Note.Color\n    @Published public internal(set) var note: String\n\n    // MARK: Internal\n\n    @Published var editing: Bool\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Note/Note.Color++.swift",
    "content": "//\n//  Note.Color++.swift\n//\n//\n//  Created by Afifi, Mohamed on 10/25/21.\n//\n\nimport QuranAnnotations\nimport SwiftUI\nimport UIKit\n\nextension Note.Color {\n    // MARK: Public\n\n    public var uiColor: UIColor {\n        switch self {\n        case .red: return #colorLiteral(red: 0.9976003766, green: 0.6918323636, blue: 0.790571034, alpha: 1)\n        case .green: return #colorLiteral(red: 0.7582061887, green: 0.9266348481, blue: 0.441752553, alpha: 1)\n        case .blue: return #colorLiteral(red: 0.6776656508, green: 0.8418365121, blue: 0.994728744, alpha: 1)\n        case .yellow: return #colorLiteral(red: 0.9911049008, green: 0.9235726595, blue: 0.3886876702, alpha: 1)\n        case .purple: return #colorLiteral(red: 0.8482968211, green: 0.695538938, blue: 0.9965527654, alpha: 1)\n        }\n    }\n\n    // MARK: Internal\n\n    static var sortedColors: [Self] {\n        [.yellow, .green, .blue, .red, .purple]\n    }\n\n    public var color: SwiftUI.Color {\n        SwiftUI.Color(uiColor)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Note/NoteCircle.swift",
    "content": "//\n//  NoteCircle.swift\n//\n//\n//  Created by Afifi, Mohamed on 7/25/21.\n//\n\nimport SwiftUI\n\nstruct NoteCircle: View {\n    @ScaledMetric var minLength: CGFloat = 35\n\n    var color: Color\n    var selected: Bool\n\n    var body: some View {\n        ColoredCircle(color: color, selected: selected, minLength: minLength)\n    }\n}\n\nstruct ColoredCircle: View {\n    let color: Color\n    let selected: Bool\n    let minLength: CGFloat\n\n    var body: some View {\n        ZStack {\n            Circle()\n                .fill(color)\n            Circle()\n                .stroke(Color.tertiarySystemGroupedBackground, lineWidth: 1)\n            if selected {\n                Circle()\n                    .stroke(Color.label, lineWidth: 2)\n            }\n        }\n        .frame(width: minLength, height: minLength)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Note/NoteEditorView.swift",
    "content": "//\n//  NoteEditorView.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 12/20/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport QuranAnnotations\nimport SwiftUI\nimport UIx\n\npublic struct NoteEditorView: View {\n    // MARK: Lifecycle\n\n    public init(note: EditableNote, done: @escaping () -> Void, delete: @Sendable @escaping () async -> Void) {\n        _note = ObservedObject(initialValue: note)\n        self.done = done\n        self.delete = delete\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        VStack {\n            ZStack(alignment: .leading) {\n                HStack {\n                    Spacer()\n                    ForEach(Note.Color.sortedColors, id: \\.self) { color in\n                        Button(\n                            action: { note.selectedColor = color },\n                            label: { NoteCircle(color: color.color, selected: color == note.selectedColor) }\n                        )\n                    }\n                    Spacer()\n                }\n\n                Button(action: {\n                    Task {\n                        await delete()\n                    }\n                }, label: {\n                    Image(systemName: \"trash\")\n                        .foregroundColor(Color.red)\n                        .padding()\n                        .background(\n                            Circle()\n                                .fill(Color.systemBackground)\n                                .shadow(color: Color.primary.opacity(0.5), radius: 1)\n                        )\n                })\n            }\n            HStack {\n                Spacer()\n                Text(note.ayahText)\n                    .lineLimit(3)\n                    .font(.quran(ofSize: .small))\n                    .padding(.leading)\n                    .overlay(HStack {\n                        Rectangle().fill(note.selectedColor.color)\n                            .frame(width: 4)\n                        Spacer()\n                    })\n                    .environment(\\.layoutDirection, .rightToLeft)\n            }\n\n            TextView($note.note, editing: $note.editing)\n                .font(.headline)\n                .multilineTextAlignment(.leading)\n                .frame(maxHeight: .infinity)\n                .onTapGesture { } // to prevent from tapping text view dismissing the keyboard\n        }\n        .padding()\n        .contentShape(Rectangle())\n        .onTapGesture {\n            note.editing = false\n        }\n        .onAppear {\n            note.editing = note.note.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty\n        }\n    }\n\n    // MARK: Internal\n\n    @ObservedObject var note: EditableNote\n\n    let done: () -> Void\n    let delete: @Sendable () async -> Void\n}\n\nstruct NoteEditorView_Previews: PreviewProvider {\n    static var previews: some View {\n        Group {\n            NoteEditorView(\n                note: EditableNote(\n                    ayahText: \"وَإِذۡ قَالَ مُوسَىٰ لِقَوۡمِهِۦ يَٰقَوۡمِ إِنَّكُمۡ ظَلَمۡتُمۡ أَنفُسَكُم بِٱتِّخَاذِكُمُ ٱلۡعِجۡلَ فَتُوبُوٓاْ إِلَىٰ بَارِئِكُمۡ فَٱقۡتُلُوٓاْ أَنفُسَكُمۡ ذَٰلِكُمۡ خَيۡرٞ لَّكُمۡ عِندَ بَارِئِكُمۡ فَتَابَ عَلَيۡكُمۡۚ إِنَّهُۥ هُوَ ٱلتَّوَّابُ ٱلرَّحِيمُ\",\n                    modifiedSince: \"3 hours ago\",\n                    selectedColor: .blue,\n                    note: \"A good note! What about a very very very long note where it will reach today is Sunday 1st of Jan today\"\n                ),\n                done: {},\n                delete: {}\n            )\n            NoteEditorView(\n                note: EditableNote(\n                    ayahText: \"وَإِذۡ قَالَ مُوسَىٰ لِقَوۡمِهِۦ\",\n                    modifiedSince: \"10 seconds ago\",\n                    selectedColor: .blue,\n                    note: \"A good note!\"\n                ),\n                done: {},\n                delete: {}\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Note/UIViewController+Note.swift",
    "content": "//\n//  UIViewController+Note.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 12/24/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport Localization\nimport UIKit\nimport UIx\n\nextension UIViewController {\n    public func confirmNoteDelete(delete: @escaping AsyncAction, cancel: @escaping () -> Void) {\n        let alert = UIAlertController(\n            title: l(\"notes.delete.alert.title\"),\n            message: l(\"notes.delete.alert.body\"),\n            preferredStyle: .alert\n        )\n        alert.addAction(UIAlertAction(title: lAndroid(\"cancel\"), style: .cancel) { _ in cancel() })\n        alert.addAction(UIAlertAction(title: l(\"button.delete\"), style: .destructive) { _ in\n            Task {\n                await delete()\n            }\n        })\n        present(alert, animated: true)\n    }\n\n    public func addCloudSyncInfo() {\n        navigationItem.leftBarButtonItem = UIBarButtonItem(\n            image: .symbol(\"link.icloud.fill\"),\n            style: .plain,\n            target: self,\n            action: #selector(presentCloudSyncInfo)\n        )\n    }\n\n    @objc\n    private func presentCloudSyncInfo() {\n        let alert = UIAlertController(\n            title: l(\"notes.icloud.alert.title\"),\n            message: l(\"notes.icloud.alert.body\"),\n            preferredStyle: .alert\n        )\n        alert.addAction(UIAlertAction(title: lAndroid(\"dialog_ok\"), style: .default, handler: nil))\n        present(alert, animated: true)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Quran/AdaptiveImageScrollView.swift",
    "content": "//\n//  AdaptiveImageScrollView.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-02-17.\n//\n\nimport QuranGeometry\nimport SwiftUI\n\n/// `AdaptiveImageScrollView` adjusts an image to fill the available space and enables scrolling\n/// when the view's width is greater than its height. In contrast, it fits the image within the view\n/// without scrolling when the view's height is greater than its width.\npublic struct AdaptiveImageScrollView<Header: View, Footer: View>: View {\n    // MARK: Lifecycle\n\n    public init(\n        decorations: ImageDecorations,\n        renderingMode: QuranThemedImage.RenderingMode = .tinted,\n        image: () -> UIImage?,\n        onScaleChange: @escaping (WordFrameScale) -> Void,\n        onGlobalFrameChange: @escaping (CGRect) -> Void,\n        @ViewBuilder header: () -> Header,\n        @ViewBuilder footer: () -> Footer\n    ) {\n        self.decorations = decorations\n        self.image = image()\n        self.renderingMode = renderingMode\n        self.header = header()\n        self.footer = footer()\n        self.onScaleChange = onScaleChange\n        self.onGlobalFrameChange = onGlobalFrameChange\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        AdaptiveQuranScrollView {\n            header\n        } footer: {\n            footer\n        } content: { availableContentSize in\n            Group {\n                if let image {\n                    QuranThemedImage(image: image, renderingMode: renderingMode)\n                        .background(\n                            ImageDecorationsView(\n                                imageSize: image.size,\n                                decorations: decorations,\n                                onScaleChange: onScaleChange,\n                                onGlobalFrameChange: onGlobalFrameChange\n                            )\n                        )\n                } else {\n                    Color.clear\n                }\n            }\n            .frame(height: imageHeight(for: availableContentSize))\n        }\n    }\n\n    // MARK: Private\n\n    private let header: Header\n    private let footer: Footer\n    private let image: UIImage?\n    private let renderingMode: QuranThemedImage.RenderingMode\n    private let decorations: ImageDecorations\n    private let onScaleChange: (WordFrameScale) -> Void\n    private let onGlobalFrameChange: (CGRect) -> Void\n\n    private func imageHeight(for availableContentSize: CGSize) -> CGFloat {\n        if let imageSize = image?.size, availableContentSize.width > availableContentSize.height {\n            return availableContentSize.width * (imageSize.height / imageSize.width)\n        } else {\n            return availableContentSize.height\n        }\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Quran/AdaptiveQuranScrollView.swift",
    "content": "//\n//  AdaptiveQuranScrollView.swift\n//\n//\n//  Created by Mohamed Afifi on 2026-03-30.\n//\n\nimport SwiftUI\n\n/// `AdaptiveQuranScrollView` provides the shared Quran page shell with a header,\n/// footer, readable insets, and a content area that adapts to the remaining space.\npublic struct AdaptiveQuranScrollView<Header: View, Footer: View, Content: View>: View {\n    // MARK: Lifecycle\n\n    public init(\n        @ViewBuilder header: () -> Header,\n        @ViewBuilder footer: () -> Footer,\n        @ViewBuilder content: @escaping (CGSize) -> Content\n    ) {\n        self.header = header()\n        self.footer = footer()\n        self.content = content\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        GeometryReader { geometry in\n            scrollView {\n                VStack(spacing: 0) {\n                    header\n                        .onSizeChange { headerSize = $0 }\n\n                    content(availableContentSize(from: geometry))\n                        .readableInsetsPadding(.horizontal)\n\n                    footer\n                        .onSizeChange { footerSize = $0 }\n                }\n            }\n        }\n        .onReadableInsetsChange { readableInsets = $0 }\n    }\n\n    // MARK: Private\n\n    @State private var headerSize: CGSize = .zero\n    @State private var footerSize: CGSize = .zero\n    @State private var readableInsets: EdgeInsets = .zero\n\n    private let header: Header\n    private let footer: Footer\n    private let content: (CGSize) -> Content\n\n    @ViewBuilder\n    private func scrollView(@ViewBuilder content: () -> some View) -> some View {\n        if #available(iOS 16.4, *) {\n            ScrollView(content: content)\n                .scrollBounceBehavior(.basedOnSize)\n        } else {\n            ScrollView(content: content)\n        }\n    }\n\n    private func availableContentSize(from geometry: GeometryProxy) -> CGSize {\n        CGSize(\n            width: max(0, geometry.size.width - readableInsets.leading - readableInsets.trailing),\n            height: max(0, geometry.size.height - headerSize.height - footerSize.height)\n        )\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Quran/ImageDecorationsView.swift",
    "content": "//\n//  ImageDecorationsView.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-04-02.\n//\n\nimport QuranGeometry\nimport SwiftUI\n\npublic struct ImageDecorations {\n    public var suraHeaders: [SuraHeaderLocation]\n    public var ayahNumbers: [AyahNumberLocation]\n    public var wordFrames: WordFrameCollection\n    public var highlights: [WordFrame: Color]\n\n    public init(\n        suraHeaders: [SuraHeaderLocation],\n        ayahNumbers: [AyahNumberLocation],\n        wordFrames: WordFrameCollection,\n        highlights: [WordFrame: Color]\n    ) {\n        self.suraHeaders = suraHeaders\n        self.ayahNumbers = ayahNumbers\n        self.wordFrames = wordFrames\n        self.highlights = highlights\n    }\n}\n\nstruct ImageDecorationsView: View {\n    private struct SizeInfo: Equatable {\n        var imageSize: CGSize\n        var viewSize: CGSize\n    }\n\n    // MARK: Internal\n\n    let imageSize: CGSize\n    let decorations: ImageDecorations\n    let onScaleChange: (WordFrameScale) -> Void\n    let onGlobalFrameChange: (CGRect) -> Void\n\n    var scale: WordFrameScale {\n        WordFrameScale.scaling(imageSize: sizeInfo.imageSize, into: sizeInfo.viewSize)\n    }\n\n    var highlights: some View {\n        VStack(alignment: .leading, spacing: 0) {\n            ForEach(Array(decorations.wordFrames.lines.enumerated()), id: \\.element) { item in\n                let line = item.element\n                let index = item.offset\n                ZStack(alignment: .topLeading) {\n                    // Needed to ensure ZStack takes full width.\n                    Spacer()\n                        .frame(maxWidth: .infinity, maxHeight: 0)\n\n                    ForEach(line.frames, id: \\.self) { frame in\n                        let color = decorations.highlights[frame] ?? .clear\n                        let scaledRectangle = frame.rect.scaled(by: scale)\n                        color\n                            .offset(x: scaledRectangle.minX)\n                            .frame(width: scaledRectangle.width, height: scaledRectangle.height)\n                    }\n                }\n                .padding(.top, decorations.wordFrames.topPadding(atLineIndex: index, scale: scale))\n            }\n        }\n        .padding(.top, scale.yOffset)\n    }\n\n    var suraHeaders: some View {\n        ForEach(decorations.suraHeaders, id: \\.self) { suraHeader in\n            let scaledRectangle = suraHeader.rect.scaled(by: scale)\n            SuraHeaderView()\n                .offset(x: scaledRectangle.minX, y: scaledRectangle.minY)\n                .frame(width: scaledRectangle.width, height: scaledRectangle.height)\n        }\n    }\n\n    var ayahNumbers: some View {\n        ForEach(decorations.ayahNumbers, id: \\.self) { ayahNumber in\n            let length = 0.06 * imageSize.width\n            let scaledRectangle = CGRect(\n                x: ayahNumber.center.x - length / 2,\n                y: ayahNumber.center.y - length / 2,\n                width: length,\n                height: length\n            ).scaled(by: scale)\n            AyahNumberView(number: ayahNumber.ayah.ayah)\n                .offset(x: scaledRectangle.minX, y: scaledRectangle.minY)\n                .frame(width: scaledRectangle.width, height: scaledRectangle.height)\n        }\n    }\n\n    var body: some View {\n        GeometryReader { g in\n            ZStack(alignment: .topLeading) {\n                highlights\n                suraHeaders\n                ayahNumbers\n            }\n            .environment(\\.layoutDirection, .leftToRight)\n        }\n        .onChangeWithInitial(of: imageSize) { sizeInfo.imageSize = $0 }\n        .onSizeChange { sizeInfo.viewSize = $0 }\n        .onChange(of: sizeInfo) { newSizeInfo in\n            onScaleChange(.scaling(imageSize: newSizeInfo.imageSize, into: newSizeInfo.viewSize))\n        }\n        .onGlobalFrameChanged(onGlobalFrameChange)\n    }\n\n    // MARK: Private\n\n    @State private var sizeInfo: SizeInfo = SizeInfo(imageSize: .zero, viewSize: .zero)\n}\n\npublic struct SuraHeaderView: View {\n    private let tint: Color\n\n    public init(tint: Color = .pageMarkerTint) {\n        self.tint = tint\n    }\n\n    public var body: some View {\n        NoorImage.suraHeader.image\n            .renderingMode(.template)\n            .resizable()\n            .aspectRatio(contentMode: .fit)\n            .foregroundColor(tint)\n            .themedColorScheme()\n    }\n}\n\npublic struct AyahNumberView: View {\n    private let number: Int\n    private let ringColor: Color\n    private let fillColor: Color?\n    private let textColor: Color?\n\n    public init(\n        number: Int,\n        ringColor: Color = .pageMarkerTint,\n        fillColor: Color? = nil,\n        textColor: Color? = nil\n    ) {\n        self.number = number\n        self.ringColor = ringColor\n        self.fillColor = fillColor\n        self.textColor = textColor\n    }\n\n    public var body: some View {\n        Group {\n            if let fillColor, let textColor {\n                ZStack {\n                    Circle()\n                        .fill(fillColor)\n                        .padding(5)\n\n                    ayahRing\n                        .foregroundColor(ringColor)\n\n                    ayahText\n                        .foregroundColor(textColor)\n                }\n            } else {\n                ayahRing\n                    .foregroundColor(ringColor)\n                    .overlay(ayahText)\n            }\n        }\n        .themedColorScheme()\n    }\n\n    private var ayahRing: some View {\n        NoorImage.ayahEnd.image\n            .renderingMode(.template)\n            .resizable()\n            .padding(.horizontal, 1)\n            .aspectRatio(contentMode: .fit)\n    }\n\n    private var ayahText: some View {\n        Text(NumberFormatter.arabicNumberFormatter.format(number))\n            .font(.largeTitle)\n            .minimumScaleFactor(0.03)\n            .padding(3)\n    }\n}\n\n#Preview {\n    List {\n        SuraHeaderView()\n            .frame(height: 40)\n\n        AyahNumberView(number: 1)\n            .frame(height: 40)\n        AyahNumberView(number: 2)\n            .frame(height: 40)\n\n        AyahNumberView(number: 100)\n            .frame(height: 40)\n\n        AyahNumberView(number: 999)\n            .frame(height: 40)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Quran/QuranArabicText.swift",
    "content": "//\n//  QuranArabicText.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-02-10.\n//\n\nimport Localization\nimport QuranKit\nimport QuranText\nimport SwiftUI\n\npublic struct QuranArabicText: View {\n    @ScaledMetric var bottomPadding = 5\n    @ScaledMetric var topPadding = 10\n    @ScaledMetric var cornerRadius = 6\n\n    let verse: AyahNumber\n    let text: String\n    let fontSize: FontSize\n\n    public init(verse: AyahNumber, text: String, fontSize: FontSize) {\n        self.verse = verse\n        self.text = text\n        self.fontSize = fontSize\n    }\n\n    public var body: some View {\n        VStack(alignment: .leading, spacing: 0) {\n            Text(lFormat(\"translation.text.ayah-number\", verse.sura.suraNumber, verse.ayah))\n                .padding(8)\n                .themedSecondaryForeground()\n                .themedSecondaryBackground()\n                .cornerRadius(cornerRadius)\n\n            Text(text)\n                .font(.quran())\n                .dynamicTypeSize(fontSize.dynamicTypeSize)\n                .textAlignment(follows: .rightToLeft)\n        }\n        .padding(.bottom, bottomPadding)\n        .padding(.top, topPadding)\n        .readableInsetsPadding(.horizontal)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Quran/QuranPageFooter.swift",
    "content": "//\n//  QuranPageFooter.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-02-10.\n//\n\nimport SwiftUI\n\npublic struct QuranPageFooter: View {\n    let page: String\n    let readableInsetEdges: Edge.Set\n\n    public init(page: String, readableInsetEdges: Edge.Set = [.bottom, .horizontal]) {\n        self.page = page\n        self.readableInsetEdges = readableInsetEdges\n    }\n\n    public var body: some View {\n        HStack {\n            Spacer()\n            Text(page)\n            Spacer()\n        }\n        .padding(.top, ContentDimension.interSpacing)\n        .readableInsetsPadding(readableInsetEdges)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Quran/QuranPageHeader.swift",
    "content": "//\n//  QuranPageHeader.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-02-10.\n//\n\nimport SwiftUI\n\npublic struct QuranPageHeader: View {\n    private let quarterName: String\n    private let suraNames: MultipartText\n    private let readableInsetEdges: Edge.Set\n\n    public init(\n        quarterName: String,\n        suraNames: MultipartText,\n        readableInsetEdges: Edge.Set = [.top, .horizontal]\n    ) {\n        self.quarterName = quarterName\n        self.suraNames = suraNames\n        self.readableInsetEdges = readableInsetEdges\n    }\n\n    public var body: some View {\n        HStack {\n            Text(quarterName)\n            Spacer()\n            suraNames\n                // TODO: Should get footnote from environment.\n                .view(ofSize: .footnote, alignment: .trailing)\n        }\n        .readableInsetsPadding(readableInsetEdges)\n        .padding(.bottom, ContentDimension.interSpacing)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Quran/QuranPageSeparators.swift",
    "content": "//\n//  QuranPageSeparators.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-25.\n//\n\nimport SwiftUI\n\npublic enum QuranSeparators {\n    // MARK: Public\n\n    public static let middleWidth: CGFloat = ContentDimension.interPageSpacing\n\n    // MARK: Internal\n\n    static let sideWidth: CGFloat = 10\n}\n\nextension QuranSeparators {\n    public struct PageSideSeparator: View {\n        // MARK: Lifecycle\n\n        public init(leading: Bool) {\n            self.leading = leading\n        }\n\n        // MARK: Public\n\n        public var body: some View {\n            ZStack {\n                LinearGradient(\n                    gradient: Gradient(colors: directionalGradientColors),\n                    startPoint: .leading,\n                    endPoint: .trailing\n                )\n                .frame(width: width)\n\n                // Adding lines on top of the gradient\n                ForEach(0 ..< lines, id: \\.self) { i in\n                    let step = width / CGFloat(lines - 1)\n                    let distance = CGFloat(i) * step\n\n                    Rectangle()\n                        .fill(lineColor)\n                        .frame(width: lineWidth)\n                        .offset(x: distance - width / 2)\n                }\n            }\n            .flipsForRightToLeftLayoutDirection(true)\n        }\n\n        // MARK: Internal\n\n        @Environment(\\.themeStyle) var themeStyle\n\n        var gradientColors: [Color] {\n            [Color(themeStyle.pageSeparatorBackground), Color(themeStyle.backgroundColor)]\n        }\n\n        var lineColor: Color {\n            Color(themeStyle.pageSeparatorLine)\n        }\n\n        let lines: Int = 5\n        let width: CGFloat = QuranSeparators.sideWidth\n        let lineWidth: CGFloat = 0.5\n\n        let leading: Bool\n\n        var directionalGradientColors: [Color] {\n            leading ? gradientColors : gradientColors.reversed()\n        }\n    }\n\n    public struct PageMiddleSeparator: View {\n        // MARK: Lifecycle\n\n        public init() {\n        }\n\n        // MARK: Public\n\n        public var body: some View {\n            ZStack {\n                HStack(spacing: 0) {\n                    LinearGradient(\n                        gradient: Gradient(colors: gradientColors),\n                        startPoint: .trailing,\n                        endPoint: .leading\n                    )\n                    .frame(width: width)\n\n                    LinearGradient(\n                        gradient: Gradient(colors: gradientColors),\n                        startPoint: .leading,\n                        endPoint: .trailing\n                    )\n                    .frame(width: width)\n                }\n                .hidden()\n\n                // Adding 1 line on top of the gradients\n                Rectangle()\n                    .fill(lineColor)\n                    .frame(width: lineWidth)\n            }\n            .flipsForRightToLeftLayoutDirection(true)\n        }\n\n        // MARK: Internal\n\n        @Environment(\\.themeStyle) var themeStyle\n\n        var gradientColors: [Color] {\n            [Color(themeStyle.pageSeparatorBackground), Color(themeStyle.backgroundColor)]\n        }\n\n        var lineColor: Color {\n            Color(themeStyle.pageSeparatorLine)\n        }\n\n        let width: CGFloat = QuranSeparators.middleWidth / 2\n        let lineWidth: CGFloat = 0.7\n\n        var directionalGradientColors: [Color] {\n            gradientColors\n        }\n    }\n}\n\nstruct QuranPageSeparators_Previews: PreviewProvider {\n    struct QuranPageSeparatorsPreview: View {\n        @Environment(\\.themeStyle) var themeStyle\n        var body: some View {\n            HStack {\n                QuranSeparators.PageSideSeparator(leading: true)\n                Spacer()\n                QuranSeparators.PageMiddleSeparator()\n                Spacer()\n                QuranSeparators.PageSideSeparator(leading: false)\n            }\n            .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)\n            .themedBackground()\n            .ignoresSafeArea()\n            .environment(\\.layoutDirection, .rightToLeft)\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        VStack {\n            ForEach(ThemeStyle.styles, id: \\.self) { s in\n                QuranPageSeparatorsPreview()\n                    .environment(\\.themeStyle, s)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Quran/QuranScrollingViewModifier.swift",
    "content": "//\n//  QuranScrollingViewModifier.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-08-03.\n//\n\nimport SwiftUI\n\nstruct QuranScrollingViewModifier<Value: Equatable, ID: Hashable>: ViewModifier {\n    let scrollToValue: Value?\n    let anchor: UnitPoint\n    let transform: (Value) -> ID?\n    @State private var scrollToValueRequest: Value?\n\n    func body(content: Content) -> some View {\n        ScrollViewReader { scrollView in\n            content\n                .onChange(of: scrollToValue) { scrollToValueRequest = $0 }\n                .onChange(of: scrollToValueRequest) { scrollToValue in\n                    if let scrollToValue, let id = transform(scrollToValue) {\n                        withAnimation {\n                            scrollView.scrollTo(id, anchor: anchor)\n                        }\n                        scrollToValueRequest = nil\n                    }\n                }\n        }\n        .onSizeChange { _ in\n            scrollToValueRequest = scrollToValue\n        }\n    }\n}\n\nextension View {\n    public func quranScrolling<Value: Equatable>(\n        scrollToValue: Value?,\n        anchor: UnitPoint = UnitPoint(x: 0, y: 0.2),\n        transform: @escaping (Value) -> (some Hashable)?\n    ) -> some View {\n        modifier(QuranScrollingViewModifier(scrollToValue: scrollToValue, anchor: anchor, transform: transform))\n    }\n\n    public func quranScrolling(\n        scrollToValue: (some Hashable)?,\n        anchor: UnitPoint = UnitPoint(x: 0, y: 0.2)\n    ) -> some View {\n        modifier(QuranScrollingViewModifier(scrollToValue: scrollToValue, anchor: anchor) { $0 })\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Quran/QuranSuraName.swift",
    "content": "//\n//  QuranSuraName.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-02-10.\n//\n\nimport QuranText\nimport SwiftUI\n\npublic struct QuranSuraName: View {\n    @ScaledMetric var bottomPadding = 5\n    @ScaledMetric var topPadding = 10\n\n    let suraName: String\n    let besmAllah: String\n    let besmAllahFontSize: FontSize\n\n    public init(suraName: String, besmAllah: String, besmAllahFontSize: FontSize) {\n        self.suraName = suraName\n        self.besmAllah = besmAllah\n        self.besmAllahFontSize = besmAllahFontSize\n    }\n\n    public var body: some View {\n        VStack {\n            NoorImage.suraHeader.image.resizable()\n                .aspectRatio(contentMode: .fit)\n                .overlay {\n                    Text(suraName)\n                        .font(.title3)\n                        .lineLimit(1)\n                        .minimumScaleFactor(0.3)\n                }\n            Text(besmAllah)\n                .font(.quran())\n                .dynamicTypeSize(besmAllahFontSize.dynamicTypeSize)\n        }\n        .padding(.bottom, bottomPadding)\n        .padding(.top, topPadding)\n        .readableInsetsPadding(.horizontal)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Quran/QuranThemedImage.swift",
    "content": "//\n//  QuranThemedImage.swift\n//  QuranEngine\n//\n//  Created by Mohamed Afifi on 2025-04-01.\n//\n\nimport SwiftUI\n\npublic struct QuranThemedImage: View {\n    // MARK: Lifecycle\n\n    public init(image: UIImage, renderingMode: RenderingMode = .tinted) {\n        self.image = image\n        self.renderingMode = renderingMode\n    }\n\n    // MARK: Public\n\n    public enum RenderingMode: Equatable {\n        case tinted\n        case invertInDarkMode\n    }\n\n    public var body: some View {\n        Image(uiImage: themedImage ?? image)\n            .resizable()\n            .aspectRatio(contentMode: .fit)\n            .invertThemedColorIfNeeded()\n            .onChange(of: themeStyle) { newThemeStyle in\n                processImage(colorScheme: colorScheme, themeStyle: newThemeStyle)\n            }\n            .onChange(of: colorScheme) { newColorScheme in\n                processImage(colorScheme: newColorScheme, themeStyle: themeStyle)\n            }\n            .onAppear {\n                processImage(colorScheme: colorScheme, themeStyle: themeStyle)\n            }\n            .onDisappear {\n                processingTask?.cancel()\n            }\n    }\n\n    // MARK: Internal\n\n    @Environment(\\.themeStyle) var themeStyle\n    @Environment(\\.colorScheme) var colorScheme\n\n    let image: UIImage\n    let renderingMode: RenderingMode\n\n    // MARK: Private\n\n    @State private var themedImage: UIImage?\n    @State private var processingTask: Task<Void, Never>? = nil\n\n    /// Process the image on a background thread and update the state on the main thread.\n    private func processImage(colorScheme: ColorScheme, themeStyle: ThemeStyle) {\n        processingTask?.cancel()\n\n        processingTask = Task {\n            let processedImage = await processedImage(colorScheme: colorScheme, themeStyle: themeStyle)\n\n            guard !Task.isCancelled else { return }\n\n            await MainActor.run {\n                themedImage = processedImage\n            }\n        }\n    }\n\n    private func processedImage(colorScheme: ColorScheme, themeStyle: ThemeStyle) async -> UIImage? {\n        switch renderingMode {\n        case .tinted:\n            // return await tintedImage(colorScheme: colorScheme, themeStyle: themeStyle)\n            fallthrough // Tinting is not perfect, currently, let's reconsider it later\n        case .invertInDarkMode:\n            guard colorScheme == .dark || themeStyle == .quiet else {\n                return nil\n            }\n            // Not used, using SwiftUI's color invert (invertThemedColorIfNeeded) instead\n            // return await invertedImage()\n            return nil\n        }\n    }\n\n    private func tintedImage(colorScheme: ColorScheme, themeStyle: ThemeStyle) async -> UIImage? {\n        await withCheckedContinuation { continuation in\n            DispatchQueue.global(qos: .userInitiated).async {\n                let result = image.tintedImageUsingFalseColorFilter(colorScheme: colorScheme, themeStyle: themeStyle)\n                continuation.resume(returning: result)\n            }\n        }\n    }\n\n    private func invertedImage() async -> UIImage {\n        await withCheckedContinuation { continuation in\n            DispatchQueue.global(qos: .userInitiated).async {\n                let result = image.inverted()\n                continuation.resume(returning: result)\n            }\n        }\n    }\n}\n\nextension UIImage {\n    func tintedImageUsingFalseColorFilter(colorScheme: ColorScheme, themeStyle: ThemeStyle) -> UIImage? {\n        tintedImageUsingFalseColorFilter(with: themeStyle.textColor.resolvedColor(with: colorScheme.traitCollection))\n    }\n}\n\nextension ColorScheme {\n    var traitCollection: UITraitCollection {\n        switch self {\n        case .light: return UITraitCollection(userInterfaceStyle: .light)\n        case .dark: return UITraitCollection(userInterfaceStyle: .dark)\n        @unknown default: return UITraitCollection(userInterfaceStyle: .light)\n        }\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Quran/QuranTranslationReferenceVerse.swift",
    "content": "//\n//  QuranTranslationReferenceVerse.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-02-10.\n//\n\nimport Localization\nimport QuranKit\nimport QuranText\nimport SwiftUI\nimport UIx\n\npublic struct QuranTranslationReferenceVerse: View {\n    @ScaledMetric var topPadding = 10\n\n    let reference: AyahNumber\n    let fontSize: FontSize\n    let characterDirection: Locale.LanguageDirection\n\n    public init(reference: AyahNumber, fontSize: FontSize, characterDirection: Locale.LanguageDirection) {\n        self.reference = reference\n        self.fontSize = fontSize\n        self.characterDirection = characterDirection\n    }\n\n    public var body: some View {\n        Text(lFormat(\"translation.text.see-referenced-verse\", reference.ayah))\n            .font(.body)\n            .dynamicTypeSize(fontSize.dynamicTypeSize)\n            .textAlignment(follows: characterDirection)\n            .padding(.top, topPadding)\n            .readableInsetsPadding(.horizontal)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Quran/QuranTranslationTextChunk.swift",
    "content": "//\n//  QuranTranslationTextChunk.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-02-10.\n//\n\nimport Localization\nimport QuranText\nimport SwiftUI\nimport UIx\n\npublic struct QuranTranslationTextChunk: View {\n    @ScaledMetric var topPadding = 10\n    @ScaledMetric var baselineOffset = 5\n\n    let text: String\n    let chunk: Range<String.Index>\n    let footnoteRanges: [Range<String.Index>]\n    let quranRanges: [Range<String.Index>]\n\n    let firstChunk: Bool\n    let readMoreURL: URL?\n    let footnoteURL: (Int) -> URL\n\n    let font: Font\n    let fontSize: FontSize\n    let characterDirection: Locale.LanguageDirection\n\n    public init(text: String, chunk: Range<String.Index>, footnoteRanges: [Range<String.Index>], quranRanges: [Range<String.Index>], firstChunk: Bool, readMoreURL: URL?, footnoteURL: @escaping (Int) -> URL, font: Font, fontSize: FontSize, characterDirection: Locale.LanguageDirection) {\n        self.text = text\n        self.chunk = chunk\n        self.footnoteRanges = footnoteRanges\n        self.quranRanges = quranRanges\n        self.firstChunk = firstChunk\n        self.readMoreURL = readMoreURL\n        self.footnoteURL = footnoteURL\n        self.font = font\n        self.fontSize = fontSize\n        self.characterDirection = characterDirection\n    }\n\n    public var body: some View {\n        Text(string)\n            .font(font)\n            .dynamicTypeSize(fontSize.dynamicTypeSize)\n            .textAlignment(follows: characterDirection)\n            .padding(.top, firstChunk ? topPadding : 0)\n            .readableInsetsPadding(.horizontal)\n    }\n\n    private var string: AttributedString {\n        let chunkText = text[chunk]\n\n        var string = AttributedString(chunkText)\n        for (index, footnoteRange) in footnoteRanges.enumerated() {\n            if let range = string.range(from: footnoteRange, overallRange: chunk, overallText: text) {\n                string[range].link = footnoteURL(index)\n                // TODO: Should get footnote from environment.\n                string[range].font = .footnote\n                string[range].baselineOffset = baselineOffset\n            }\n        }\n\n        for quranRange in quranRanges {\n            if let range = string.range(from: quranRange, overallRange: chunk, overallText: text) {\n                string[range].foregroundColor = .accentColor\n            }\n        }\n\n        if let readMoreURL {\n            var readMore = AttributedString(\"\\n\\(l(\"translation.text.read-more\"))\")\n            readMore.foregroundColor = .accentColor\n            readMore.link = readMoreURL\n            readMore.font = .body\n            string.append(readMore)\n        }\n\n        return string\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Quran/QuranTranslatorName.swift",
    "content": "//\n//  QuranTranslatorName.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-02-10.\n//\n\nimport QuranText\nimport SwiftUI\nimport UIx\n\npublic struct QuranTranslatorName: View {\n    @ScaledMetric var bottomPadding = 10\n\n    let name: String\n    let fontSize: FontSize\n    let characterDirection: Locale.LanguageDirection\n\n    public init(name: String, fontSize: FontSize, characterDirection: Locale.LanguageDirection) {\n        self.name = name\n        self.fontSize = fontSize\n        self.characterDirection = characterDirection\n    }\n\n    public var body: some View {\n        Text(verbatim: \"- \\(name)\")\n            .themedSecondaryForeground()\n            .font(.footnote)\n            .dynamicTypeSize(fontSize.dynamicTypeSize)\n            .textAlignment(follows: characterDirection)\n            .padding(.bottom, bottomPadding)\n            .readableInsetsPadding(.horizontal)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Features/Quran/QuranVerseSeparator.swift",
    "content": "//\n//  QuranVerseSeparator.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-02-10.\n//\n\nimport SwiftUI\n\npublic struct QuranVerseSeparator: View {\n    public init() { }\n\n    public var body: some View {\n        Spacer()\n            .frame(height: 1)\n            .frame(maxWidth: .infinity, alignment: .trailing)\n            .themedSecondaryBackground()\n            .padding(.top, ContentDimension.interSpacing)\n    }\n}\n\n#Preview {\n    VStack {\n        QuranVerseSeparator()\n    }\n    .environment(\\.themeStyle, .original)\n}\n"
  },
  {
    "path": "UI/NoorUI/Font/FontName++.swift",
    "content": "//\n//  FontName++.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 3/30/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n\nimport NoorFont\nimport QuranText\nimport SwiftUI\n\nprivate let arabicQuranTextFontSize: CGFloat = 21\nprivate let arabicTafseerTextFontSize: CGFloat = 21\n\npublic extension Font {\n    static func quran(ofSize size: FontSize? = nil) -> Font {\n        custom(.quran, size: size?.fontSize(forMediumSize: arabicQuranTextFontSize) ?? arabicQuranTextFontSize)\n    }\n\n    static func arabicTafseer() -> Font {\n        custom(.arabic, size: arabicTafseerTextFontSize)\n    }\n}\n\npublic func attributedString(of text: String, arabicSuraName: String, fontSize: CGFloat) -> NSAttributedString {\n    let systemFont = UIFont.systemFont(ofSize: fontSize)\n    let text = NSMutableAttributedString(string: text, attributes: [.font: systemFont])\n    if NSLocale.preferredLanguages.first == \"ar\" {\n        return text\n    }\n    text.append(NSAttributedString(string: \" \"))\n    let decoratedFont = UIFont(.suraNames, size: fontSize + 4)\n    text.append(NSAttributedString(string: arabicSuraName, attributes: [.font: decoratedFont]))\n    return text\n}\n"
  },
  {
    "path": "UI/NoorUI/Font/FontSize++.swift",
    "content": "//\n//  FontSize++.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/2/18.\n//\n\nimport CoreFoundation\nimport QuranText\n\nextension FontSize {\n    func fontSize(forMediumSize size: CGFloat) -> CGFloat {\n        let factor: CGFloat = switch self {\n        case .xSmall: 0.7 * 0.7 * 0.7\n        case .small: 0.7 * 0.7\n        case .medium: 0.7\n        case .large: 1\n        case .xLarge: 1 / 0.8\n        case .xxLarge: 1 / 0.8 / 0.8\n        case .xxxLarge: 1 / 0.8 / 0.8 / 0.8\n        case .accessibility1: 1 / 0.8 / 0.8 / 0.8 / 0.8\n        case .accessibility2: 1 / 0.8 / 0.8 / 0.8 / 0.8 / 0.8\n        case .accessibility3: 1 / 0.8 / 0.8 / 0.8 / 0.8 / 0.8 / 0.8\n        case .accessibility4: 1 / 0.8 / 0.8 / 0.8 / 0.8 / 0.8 / 0.8 / 0.8\n        case .accessibility5: 1 / 0.8 / 0.8 / 0.8 / 0.8 / 0.8 / 0.8 / 0.8 / 0.8\n        }\n        return size * factor\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Formatters/TimeAgo.swift",
    "content": "//\n//  TimeAgo.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/6/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n\nimport Foundation\n\nextension Date {\n    private static let dateFormatter: DateFormatter = {\n        let formatter = DateFormatter()\n        formatter.locale = formatter.locale.fixedLocaleNumbers()\n        formatter.dateStyle = .full\n        return formatter\n    }()\n\n    private static let relativeDateFormatter: RelativeDateTimeFormatter = {\n        let formatter = RelativeDateTimeFormatter()\n        formatter.locale = formatter.locale.fixedLocaleNumbers()\n        formatter.unitsStyle = .full\n        return formatter\n    }()\n\n    public func timeAgo() -> String {\n        let now = Date()\n        let diff = now.timeIntervalSince(self)\n        // if it is over 30 days\n        if diff > 60 * 60 * 24 * 30 {\n            return Self.dateFormatter.string(from: self)\n        } else {\n            return Self.relativeDateFormatter.localizedString(for: self, relativeTo: now)\n        }\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Images/Images.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "UI/NoorUI/Images/Images.xcassets/ayah-end-marker.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"ayah-end@1x.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "UI/NoorUI/Images/Images.xcassets/pointer-25.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"pointer-25.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"pointer-25@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"pointer-25@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "UI/NoorUI/Images/Images.xcassets/rotate_to_landscape-25.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"rotate_to_landscape-25.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"rotate_to_landscape-50.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"rotate_to_landscape-75.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "UI/NoorUI/Images/Images.xcassets/rotate_to_portrait-25.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"rotate_to_portrait-25.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"rotate_to_portrait-50.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"rotate_to_portrait-75.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "UI/NoorUI/Images/Images.xcassets/settings-25.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"settings-25.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"settings-50.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"settings-75.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "UI/NoorUI/Images/Images.xcassets/settings_filled-25.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"settings_filled-25.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"settings_filled-50.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"settings_filled-75.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "UI/NoorUI/Images/Images.xcassets/sura_header.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"filename\" : \"sura_header2.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  },\n  \"properties\" : {\n    \"template-rendering-intent\" : \"template\"\n  }\n}\n"
  },
  {
    "path": "UI/NoorUI/Images/NoorImage.swift",
    "content": "//\n//  NoorImage.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-21.\n//\n\nimport SwiftUI\nimport UIKit\n\npublic enum NoorImage: String {\n    case ayahEnd = \"ayah-end-marker\"\n    case pointer = \"pointer-25\"\n    case rotateToLandscape = \"rotate_to_landscape-25\"\n    case rotateToPortrait = \"rotate_to_portrait-25\"\n    case settings = \"settings-25\"\n    case settingsFilled = \"settings_filled-25\"\n    case suraHeader = \"sura_header\"\n\n    // MARK: Public\n\n    public var image: Image { Image(rawValue, bundle: .module) }\n    public var uiImage: UIImage { UIImage(named: rawValue, in: .module, with: nil)! }\n}\n"
  },
  {
    "path": "UI/NoorUI/Images/NoorSystemImage.swift",
    "content": "//\n//  NoorSystemImage.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-25.\n//\n\nimport SwiftUI\n\npublic enum NoorSystemImage: String {\n    case audio = \"headphones\"\n    case downloads = \"square.and.arrow.down\"\n    case download = \"icloud.and.arrow.down\"\n    case translation = \"globe\"\n    case heart = \"heart.fill\"\n    case share = \"square.and.arrow.up\"\n    case star\n    case mail = \"envelope\"\n    case checkmark_checked = \"checkmark.circle.fill\"\n    case checkmark_unchecked = \"circle\"\n    case checkmark\n    case bookmark = \"bookmark.fill\"\n    case note = \"text.badge.star\"\n    case lastPage = \"clock\"\n    case profile = \"person.crop.circle\"\n    case settings = \"gearshape\"\n    case signOut = \"rectangle.portrait.and.arrow.right\"\n    case search = \"magnifyingglass\"\n    case mushafs = \"books.vertical.fill\"\n    case debug = \"ant\"\n    case play = \"play.fill\"\n    case stop = \"stop.fill\"\n    case pause = \"pause.fill\"\n    case more = \"ellipsis.circle\"\n    case backward = \"backward.fill\"\n    case forward = \"forward.fill\"\n    case cancel = \"xmark\"\n\n    // MARK: Public\n\n    public var image: Image {\n        Image(systemName: rawValue)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Miscellaneous/ContentDimension.swift",
    "content": "//\n//  ContentDimension.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 2/9/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport SwiftUI\n\npublic enum ContentDimension {\n    // MARK: Public\n\n    public static let interSpacing: CGFloat = spacing\n    public static let interPageSpacing: CGFloat = 12\n\n    public static func insets(of view: UIView) -> NSDirectionalEdgeInsets {\n        let readableInsets = view.window?.safeAreaInsets ?? .zero\n        let topInset = max(24, readableInsets.top)\n        return NSDirectionalEdgeInsets(\n            top: topInset + spacing,\n            leading: readableInsets.left + spacing,\n            bottom: readableInsets.bottom + spacing,\n            trailing: readableInsets.right + spacing\n        )\n    }\n\n    public static func readableInsets(of safeAreaInsets: EdgeInsets) -> EdgeInsets {\n        EdgeInsets(\n            top: max(24, safeAreaInsets.top) + spacing,\n            leading: safeAreaInsets.leading + spacing,\n            bottom: safeAreaInsets.bottom + spacing,\n            trailing: safeAreaInsets.trailing + spacing\n        )\n    }\n\n    // MARK: Internal\n\n    static let spacing: CGFloat = 8\n}\n"
  },
  {
    "path": "UI/NoorUI/Miscellaneous/Dimensions.swift",
    "content": "//\n//  Dimensions.swift\n//  QuranEngine\n//\n//  Created by Mohamed Afifi on 2025-03-27.\n//\n\nimport SwiftUI\n\npublic enum Dimensions {\n    public static let cornerRadius: CGFloat = 12\n}\n"
  },
  {
    "path": "UI/NoorUI/Miscellaneous/ReadableInsetsViewModifier.swift",
    "content": "//\n//  ReadableInsetsViewModifier.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-19.\n//\n\nimport SwiftUI\n\nprivate extension EnvironmentValues {\n    var readableInsets: EdgeInsets {\n        get { self[ReadableInsetsKey.self] }\n        set { self[ReadableInsetsKey.self] = newValue }\n    }\n}\n\nprivate struct ReadableInsetsKey: EnvironmentKey {\n    static let defaultValue = EdgeInsets()\n}\n\nprivate struct ReadableInsetsModifier: ViewModifier {\n    @State var windowSafeAreaInsets: EdgeInsets = .zero\n\n    func body(content: Content) -> some View {\n        content\n            .readWindowSafeAreaInsets($windowSafeAreaInsets)\n            .environment(\\.readableInsets, ContentDimension.readableInsets(of: windowSafeAreaInsets))\n    }\n}\n\nprivate struct ReadableInsetsPadding: ViewModifier {\n    @Environment(\\.readableInsets) var readableInsets\n    let edges: Edge.Set\n\n    func body(content: Content) -> some View {\n        content\n            .padding(.top, edges.contains(.top) ? readableInsets.top : 0)\n            .padding(.bottom, edges.contains(.bottom) ? readableInsets.bottom : 0)\n            .padding(.leading, edges.contains(.leading) ? readableInsets.leading : 0)\n            .padding(.trailing, edges.contains(.trailing) ? readableInsets.trailing : 0)\n    }\n}\n\nprivate struct ReadableInsetsReader: ViewModifier {\n    @Environment(\\.readableInsets) var readableInsets\n    let onChange: (EdgeInsets) -> Void\n\n    func body(content: Content) -> some View {\n        content\n            .onChange(of: readableInsets, perform: onChange)\n    }\n}\n\nextension View {\n    public func populateReadableInsets() -> some View {\n        modifier(ReadableInsetsModifier())\n    }\n\n    public func readableInsetsPadding(_ edges: Edge.Set = .all) -> some View {\n        modifier(ReadableInsetsPadding(edges: edges))\n    }\n\n    public func onReadableInsetsChange(_ body: @escaping (EdgeInsets) -> Void) -> some View {\n        modifier(ReadableInsetsReader(onChange: body))\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Miscellaneous/TestResource+Path.swift",
    "content": "//\n//  TestResource+Path.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-24.\n//\n\nimport Foundation\n\npublic func testResourceURL(_ resource: String) -> URL {\n    URL(validURL: \"\\(#filePath)/../../../../Domain/TestResources/test_data/\\(resource)\").standardized\n}\n"
  },
  {
    "path": "UI/NoorUI/Miscellaneous/ThemedColorInvert.swift",
    "content": "//\n//  ThemedColorInvert.swift\n//  QuranEngine\n//\n//  Created by Mohamed Afifi on 2025-12-05.\n//\n\nimport SwiftUI\n\nprivate struct ThemedColorInvertModifier: ViewModifier {\n    @Environment(\\.colorScheme) var colorScheme\n    @Environment(\\.themeStyle) var themeStyle\n\n    func body(content: Content) -> some View {\n        if colorScheme == .dark || themeStyle == .quiet {\n            content.colorInvert()\n        } else {\n            content\n        }\n    }\n}\n\nextension View {\n    public func invertThemedColorIfNeeded() -> some View {\n        modifier(ThemedColorInvertModifier())\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Pager/PageViewController.swift",
    "content": "//\n//  PageViewController.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-23.\n//\n\n// Most of the code is copied from https://github.com/benjaminsage/iPages\n\nimport SwiftUI\nimport UIKit\nimport VLogging\n\npublic struct PageViewController<Element, Content>: View\n    where Element: Identifiable,\n    Element: Equatable,\n    Content: View\n{\n    // MARK: Lifecycle\n\n    public init(\n        transitionStyle: UIPageViewController.TransitionStyle,\n        navigationOrientation: UIPageViewController.NavigationOrientation,\n        interPageSpacing: CGFloat,\n        animated: Bool,\n        selection: Binding<Element>,\n        @ViewBuilder forEach: () -> ForEach<[Element], Element.ID, Content>\n    ) {\n        self.transitionStyle = transitionStyle\n        self.navigationOrientation = navigationOrientation\n        self.interPageSpacing = interPageSpacing\n        self.animated = animated\n        _selection = selection\n        self.forEach = forEach()\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        _PageViewController<Element, Content>(\n            transitionStyle: transitionStyle,\n            navigationOrientation: navigationOrientation,\n            interPageSpacing: interPageSpacing,\n            animated: animated,\n            forEach: forEach,\n            selection: $selection\n        )\n    }\n\n    // MARK: Internal\n\n    let transitionStyle: UIPageViewController.TransitionStyle\n    let navigationOrientation: UIPageViewController.NavigationOrientation\n    let interPageSpacing: CGFloat\n    let animated: Bool\n\n    @Binding var selection: Element\n    let forEach: ForEach<[Element], Element.ID, Content>\n}\n\nprivate struct _PageViewController<Element, Content>: UIViewControllerRepresentable\n    where\n    Element: Identifiable,\n    Element: Equatable,\n    Content: View\n{\n    let transitionStyle: UIPageViewController.TransitionStyle\n    let navigationOrientation: UIPageViewController.NavigationOrientation\n    let interPageSpacing: CGFloat\n    let animated: Bool\n\n    let forEach: ForEach<[Element], Element.ID, Content>\n    @Binding var selection: Element\n\n    @State var userDraggingStartedTransitionInProgress = false\n\n    func makeCoordinator() -> Coordinator {\n        Coordinator(self)\n    }\n\n    func makeUIViewController(context: Context) -> UIPageViewController {\n        let options: [UIPageViewController.OptionsKey: Any] = [\n            .interPageSpacing: interPageSpacing,\n        ]\n        let pageViewController = UIPageViewController(\n            transitionStyle: transitionStyle,\n            navigationOrientation: navigationOrientation,\n            options: options\n        )\n\n        pageViewController.dataSource = context.coordinator\n        pageViewController.delegate = context.coordinator\n\n        pageViewController.view.backgroundColor = .clear\n\n        for view in pageViewController.view.subviews {\n            if let scrollView = view as? UIScrollView {\n                scrollView.delegate = context.coordinator\n                break\n            }\n        }\n\n        // Trigger an update.\n        updateUIViewController(pageViewController, context: context)\n\n        return pageViewController\n    }\n\n    func updateUIViewController(_ pageViewController: UIPageViewController, context: Context) {\n        // Early return if showing selection's view controller.\n        if let visibleController = pageViewController.viewControllers?.first as? PageContentController {\n            if visibleController.element == selection {\n                return\n            }\n        }\n\n        if userDraggingStartedTransitionInProgress {\n            logger.info(\"Cannot change page while user dragging in progress\")\n\n            // when user dragging initiated transition is still in progress,\n            // prevent the app from starting simultaneous transitions to avoid assertion failure and crash\n            // reference: https://github.com/hons82/THSegmentedPager/blob/master/THSegmentedPager/THSegmentedPager.m#L233\n\n            // failure type 1: Assertion failure in\n            // -[UIPageViewController queuingScrollView:didEndManualScroll:toRevealView:direction:animated:didFinish:didComplete:],\n            // /SourceCache/UIKit_Sim/UIKit-2935.137/UIPageViewController.m:1866\n            // Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'No view controller managing visible view\n\n            // failure type 2: Assertion failure in -[_UIQueuingScrollView _enqueueCompletionState:],\n            // /SourceCache/UIKit_Sim/UIKit-2935.137/_UIQueuingScrollView.m:499\n            // Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Duplicate states in queue'\n            return\n        }\n\n        let previousSelection = context.coordinator.parent.selection\n        context.coordinator.parent = self\n\n        let viewController = makeController(selection)\n\n        let previousIndex = forEach.data.firstIndex { $0 == previousSelection }\n        let currentIndex = forEach.data.firstIndex { $0 == selection }\n        let direction: UIPageViewController.NavigationDirection = if let previousIndex, let currentIndex {\n            currentIndex < previousIndex ? .forward : .reverse\n        } else {\n            .forward\n        }\n\n        pageViewController.setViewControllers([viewController], direction: direction, animated: animated)\n    }\n\n    func makeController(_ element: Element) -> UIViewController {\n        let view = forEach.content(element)\n        return PageContentController(rootView: view, element: element)\n    }\n}\n\n// MARK: - Coordinator\n\nextension _PageViewController {\n    class Coordinator: NSObject, UIPageViewControllerDataSource, UIPageViewControllerDelegate, UIScrollViewDelegate {\n        // MARK: Lifecycle\n\n        init(_ pageViewController: _PageViewController) {\n            parent = pageViewController\n        }\n\n        // MARK: Internal\n\n        var parent: _PageViewController\n\n        func pageViewController(\n            _ pageViewController: UIPageViewController,\n            viewControllerBefore viewController: UIViewController\n        ) -> UIViewController? {\n            guard let contentController = viewController as? PageContentController else {\n                return nil\n            }\n\n            guard let index = parent.forEach.data.firstIndex(of: contentController.element) else {\n                return nil\n            }\n\n            let newIndex = index - 1\n            if newIndex < 0 {\n                return nil\n            }\n            let element = parent.forEach.data[newIndex]\n            return parent.makeController(element)\n        }\n\n        func pageViewController(\n            _ pageViewController: UIPageViewController,\n            viewControllerAfter viewController: UIViewController\n        ) -> UIViewController? {\n            guard let contentController = viewController as? PageContentController else {\n                return nil\n            }\n\n            guard let index = parent.forEach.data.firstIndex(of: contentController.element) else {\n                return nil\n            }\n\n            let newIndex = index + 1\n\n            if newIndex >= parent.forEach.data.count {\n                return nil\n            }\n            let element = parent.forEach.data[newIndex]\n            return parent.makeController(element)\n        }\n\n        func pageViewController(\n            _ pageViewController: UIPageViewController,\n            didFinishAnimating finished: Bool,\n            previousViewControllers: [UIViewController],\n            transitionCompleted completed: Bool\n        ) {\n            if completed,\n               let visibleViewController = pageViewController.viewControllers?.first,\n               let contentController = visibleViewController as? PageContentController\n            {\n                parent.selection = contentController.element\n            }\n        }\n\n        // MARK: - UIScrollViewDelegate\n\n        func scrollViewDidScroll(_ scrollView: UIScrollView) {\n            if scrollView.isTracking || scrollView.isDecelerating {\n                parent.userDraggingStartedTransitionInProgress = true\n            }\n        }\n\n        func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {\n            parent.userDraggingStartedTransitionInProgress = false\n        }\n    }\n}\n\nextension _PageViewController {\n    private class PageContentController: UIHostingController<Content> {\n        // MARK: Lifecycle\n\n        init(rootView: Content, element: Element) {\n            self.element = element\n            super.init(rootView: rootView)\n            view.backgroundColor = .clear\n            _disableSafeArea = true\n        }\n\n        @available(*, unavailable)\n        @objc\n        dynamic required init?(coder aDecoder: NSCoder) {\n            fatalError(\"init(coder:) has not been implemented\")\n        }\n\n        // MARK: Internal\n\n        let element: Element\n    }\n}\n\nstruct PaginationView_Previews: PreviewProvider {\n    struct PaginationViewPreview: View {\n        struct Page: Identifiable, Equatable { let id: Int }\n\n        // MARK: Internal\n\n        let pages = (0 ..< 604).map(Page.init)\n        @State var currentPage = Page(id: 45)\n\n        var body: some View {\n            PageViewController(\n                transitionStyle: .scroll,\n                navigationOrientation: .horizontal,\n                interPageSpacing: 10,\n                animated: true,\n                selection: $currentPage\n            ) {\n                ForEach(pages) { page in\n                    VStack {\n                        Text(\"Top\")\n                        Spacer()\n                        Text(\"Page: \\(page.id)\")\n                        Spacer()\n                        Text(\"Top\")\n                    }\n                    .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)\n                    .background(page.id % 2 == 0 ? Color.red : Color.green)\n                }\n            }\n            .ignoresSafeArea()\n            .background(Color.blue)\n            .border(Color.purple)\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        PaginationViewPreview()\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Shapes/Arc.swift",
    "content": "//\n//  Arc.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-29.\n//\n\nimport SwiftUI\n\nstruct Arc: InsettableShape {\n    // MARK: Lifecycle\n\n    init(startAngle: Angle, endAngle: Angle, clockwise: Bool) {\n        self.startAngle = startAngle\n        self.endAngle = endAngle\n        self.clockwise = clockwise\n    }\n\n    init(circlePercentage: Double) {\n        startAngle = .degrees(0)\n        endAngle = .degrees(360 * circlePercentage)\n        clockwise = true\n    }\n\n    // MARK: Internal\n\n    let startAngle: Angle\n    let endAngle: Angle\n    let clockwise: Bool\n\n    var insetAmount = 0.0\n\n    func path(in rect: CGRect) -> Path {\n        let rotationAdjustment = Angle.degrees(90)\n        let modifiedStart = startAngle - rotationAdjustment\n        let modifiedEnd = endAngle - rotationAdjustment\n\n        var path = Path()\n        path.addArc(center: CGPoint(x: rect.midX, y: rect.midY), radius: rect.width / 2 - insetAmount, startAngle: modifiedStart, endAngle: modifiedEnd, clockwise: !clockwise)\n\n        return path\n    }\n\n    func inset(by amount: CGFloat) -> some InsettableShape {\n        var arc = self\n        arc.insetAmount += amount\n        return arc\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Theme/AppearanceModeViews.swift",
    "content": "//\n//  AppearanceModeViews.swift\n//  QuranEngine\n//\n//  Created by Mohamed Afifi on 2025-03-31.\n//\n\nimport Combine\nimport SwiftUI\n\nextension View {\n    public func appearanceModeColorSchema() -> some View {\n        modifier(AppearanceModeColorSchema())\n    }\n\n    public func themedColorScheme() -> some View {\n        modifier(ThemedColorScheme())\n    }\n}\n\n@MainActor\nprivate final class AppearanceModeColorSchemaViewModel: ObservableObject {\n    @Published private var appearanceMode: AppearanceMode\n    @Published private var userInterfaceStyle: UIUserInterfaceStyle\n\n    private let themeService = ThemeService.shared\n    private let window = SystemUserInterfaceStyleObserverWindow.shared\n\n    init() {\n        userInterfaceStyle = window.traitCollection.userInterfaceStyle\n        appearanceMode = themeService.appearanceMode\n        themeService.appearanceModePublisher.assign(to: &$appearanceMode)\n        window.traitCollectionChangesPublisher.map(\\.userInterfaceStyle).assign(to: &$userInterfaceStyle)\n    }\n\n    var colorSchema: ColorScheme? {\n        switch appearanceMode {\n        case .light: return .light\n        case .dark: return .dark\n        case .auto:\n            switch userInterfaceStyle {\n            case .light: return .light\n            case .dark: return .dark\n            case .unspecified: return nil\n            @unknown default: return nil\n            }\n        }\n    }\n}\n\nprivate struct AppearanceModeColorSchema: ViewModifier {\n    @StateObject private var viewModel = AppearanceModeColorSchemaViewModel()\n\n    func body(content: Content) -> some View {\n        if let colorSchema = viewModel.colorSchema {\n            content\n                .environment(\\.colorScheme, colorSchema)\n        } else {\n            content\n        }\n    }\n}\n\nprivate struct ThemedColorScheme: ViewModifier {\n    @Environment(\\.themeStyle) private var themeStyle\n\n    func body(content: Content) -> some View {\n        if themeStyle == .quiet {\n            content.environment(\\.colorScheme, .dark)\n        } else {\n            content\n        }\n    }\n}\n\nclass SystemUserInterfaceStyleObserverWindow: UIWindow {\n    static let shared: SystemUserInterfaceStyleObserverWindow = {\n        let window = SystemUserInterfaceStyleObserverWindow(frame: .zero)\n        window.isHidden = true\n        return window\n    }()\n\n    let traitCollectionChangesPublisher = PassthroughSubject<UITraitCollection, Never>()\n\n    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {\n        traitCollectionChangesPublisher.send(traitCollection)\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Theme/QuranHighlights+Theme.swift",
    "content": "//\n//  QuranHighlights+Theme.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 10/7/18.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2018  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport QuranAnnotations\nimport QuranKit\nimport SwiftUI\nimport UIKit\n\n// TODO: Use SwiftUI.Color and remove UIColor usage.\nextension QuranHighlights {\n    public static let opacity = 0.3\n\n    public static let wordHighlightColor = Color.appIdentity.opacity(opacity)\n\n    static let readingColor = UIColor.appIdentity.withAlphaComponent(opacity)\n    static let shareColor = UIColor.systemBlue.withAlphaComponent(opacity)\n    static let searchColor = UIColor.systemGray.withAlphaComponent(opacity)\n\n    // TODO: Use Color\n    public func versesByHighlights() -> [AyahNumber: UIColor] {\n        // Sort order: share, reading, search, .note\n        var versesByHighlights: [AyahNumber: UIColor] = [:]\n\n        for (verse, note) in noteVerses {\n            versesByHighlights[verse] = note.color.uiColor.withAlphaComponent(Self.opacity)\n        }\n\n        func add(verses: [AyahNumber], color: UIColor) {\n            for verse in verses {\n                versesByHighlights[verse] = color\n            }\n        }\n\n        add(verses: searchVerses, color: Self.searchColor)\n        add(verses: readingVerses, color: Self.readingColor)\n        add(verses: shareVerses, color: Self.shareColor)\n        return versesByHighlights\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Theme/ThemeService.swift",
    "content": "//\n//  ThemeService.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/7/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport Combine\nimport Preferences\nimport UIKit\n\n@MainActor\npublic class ThemeService {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Public\n\n    public static let shared = ThemeService()\n\n    public var appearanceMode: AppearanceMode {\n        get { preferenceAppearanceMode }\n        set {\n            guard newValue != preferenceAppearanceMode else {\n                return\n            }\n            preferenceAppearanceMode = newValue\n            updateUserInterfaceStyle(themeStyle: themeStyle, appearanceMode: appearanceMode)\n        }\n    }\n\n    public var themeStyle: ThemeStyle {\n        get { preferenceThemeStyle }\n        set {\n            guard newValue != preferenceThemeStyle else {\n                return\n            }\n            preferenceThemeStyle = newValue\n            updateUserInterfaceStyle(themeStyle: newValue, appearanceMode: appearanceMode)\n        }\n    }\n\n    public var appearanceModePublisher: AnyPublisher<AppearanceMode, Never> {\n        $preferenceAppearanceMode\n    }\n\n    public var themeStylePublisher: AnyPublisher<ThemeStyle, Never> {\n        $preferenceThemeStyle\n    }\n\n    public var userInterfaceStyle: UIUserInterfaceStyle {\n        return themeStyle == .quiet ? .dark : appearanceMode.userInterfaceStyle\n    }\n\n    // MARK: Private\n\n    private static let appearanceModeRaw = PreferenceKey<Int?>(key: \"theme\", defaultValue: nil)\n    private static let appearanceModeTransformer = PreferenceTransformer<Int?, AppearanceMode>(\n        rawToValue: { $0.flatMap { AppearanceMode(rawValue: $0) } ?? .auto },\n        valueToRaw: { $0.rawValue }\n    )\n\n    private static let themeStyleRaw = PreferenceKey<Int?>(key: \"themeStyle\", defaultValue: nil)\n    private static let themeStyleTransformer = PreferenceTransformer<Int?, ThemeStyle>(\n        rawToValue: { $0.flatMap { ThemeStyle(rawValue: $0) } ?? .paper },\n        valueToRaw: { $0.rawValue }\n    )\n\n    @TransformedPreference(appearanceModeRaw, transformer: appearanceModeTransformer)\n    private var preferenceAppearanceMode: AppearanceMode\n\n    @TransformedPreference(themeStyleRaw, transformer: themeStyleTransformer)\n    private var preferenceThemeStyle: ThemeStyle\n\n    private func updateUserInterfaceStyle(themeStyle: ThemeStyle, appearanceMode: AppearanceMode) {\n        let newInterfaceStyle = userInterfaceStyle\n        let windows = UIApplication.shared\n            .connectedScenes\n            .compactMap { $0 as? UIWindowScene }\n            .flatMap(\\.windows)\n        for window in windows {\n            if !(window is SystemUserInterfaceStyleObserverWindow) {\n                window.overrideUserInterfaceStyle = newInterfaceStyle\n            }\n        }\n    }\n}\n\npublic enum AppearanceMode: Int, CustomStringConvertible {\n    case light = 0\n    case dark = 1\n    case auto = 2\n\n    // MARK: Public\n\n    public var description: String {\n        switch self {\n        case .light: return \"light\"\n        case .dark: return \"dark\"\n        case .auto: return \"auto\"\n        }\n    }\n}\n\npublic enum ThemeStyle: Int, Sendable {\n    case calm\n    case focus\n    case original\n    case paper\n    case quiet\n\n    static let styles: [ThemeStyle] = [.paper, .original, .quiet, .calm, .focus]\n}\n\nprivate extension AppearanceMode {\n    var userInterfaceStyle: UIUserInterfaceStyle {\n        switch self {\n        case .light:\n            return .light\n        case .dark:\n            return .dark\n        case .auto:\n            return .unspecified\n        }\n    }\n}\n"
  },
  {
    "path": "UI/NoorUI/Theme/ThemeStyleViews.swift",
    "content": "//\n//  ThemeStyleViews.swift\n//  QuranEngine\n//\n//  Created by Mohamed Afifi on 2025-03-29.\n//\n\nimport SwiftUI\n\nextension View {\n    public func themedBackground() -> some View {\n        modifier(ThemeBackgroundStyle())\n    }\n\n    public func themedForeground() -> some View {\n        modifier(ThemeForegroundStyle())\n    }\n\n    public func themedSecondaryForeground() -> some View {\n        modifier(ThemeSecondaryForegroundStyle())\n    }\n\n    public func themedSecondaryBackground() -> some View {\n        modifier(ThemeSecondaryBackgroundStyle())\n    }\n\n    public func populateThemeStyle() -> some View {\n        modifier(ThemeStylePopulator())\n    }\n}\n\nprivate struct ThemeBackgroundStyle: ViewModifier {\n    @Environment(\\.themeStyle) var themeStyle\n\n    func body(content: Content) -> some View {\n        content\n            .background(Color(themeStyle.backgroundColor))\n    }\n}\n\nprivate struct ThemeForegroundStyle: ViewModifier {\n    @Environment(\\.themeStyle) var themeStyle\n\n    func body(content: Content) -> some View {\n        content\n            .foregroundColor(Color(themeStyle.textColor))\n    }\n}\n\nprivate struct ThemeSecondaryForegroundStyle: ViewModifier {\n    @Environment(\\.themeStyle) var themeStyle\n\n    func body(content: Content) -> some View {\n        content\n            .foregroundColor(Color(themeStyle.secondaryTextColor))\n    }\n}\n\nprivate struct ThemeSecondaryBackgroundStyle: ViewModifier {\n    @Environment(\\.themeStyle) var themeStyle\n\n    func body(content: Content) -> some View {\n        content\n            .background(Color(themeStyle.secondaryBackgroundColor))\n    }\n}\n\n// MARK: - Populate\n\nprivate struct ThemeStylePopulator: ViewModifier {\n    @StateObject private var viewModel = ThemeStylePopulatorViewModel()\n\n    func body(content: Content) -> some View {\n        content\n            .environment(\\.themeStyle, viewModel.themeStyle)\n    }\n}\n\n@MainActor\nprivate final class ThemeStylePopulatorViewModel: ObservableObject {\n    @Published var themeStyle: ThemeStyle\n    private let themeService = ThemeService.shared\n\n    init() {\n        themeStyle = themeService.themeStyle\n        themeService.themeStylePublisher.assign(to: &$themeStyle)\n    }\n}\n\n// MARK: - Environment Key\n\nprivate struct ThemeStyleKey: EnvironmentKey {\n    static let defaultValue: ThemeStyle = .quiet\n}\n\nextension EnvironmentValues {\n    public var themeStyle: ThemeStyle {\n        get { return self[ThemeStyleKey.self]\n        } set { self[ThemeStyleKey.self] = newValue }\n    }\n}\n\n// MARK: - Theme Style Values\n\nprivate extension UIColor {\n    static let themeCalmSecondaryText: UIColor = .themeCalmText.secondaryLabelVariant()\n    static let themeCalmSecondaryBackground: UIColor = .themeCalmBackground.secondaryBackgroundVariant()\n    static let themeCalmPageSeparatorBackground: UIColor = .themeCalmBackground.pageSeparatorBackgroundVariant()\n    static let themeCalmPageSeparatorLine: UIColor = .themeCalmBackground.pageSeparatorLineVariant()\n\n    static let themeFocusSecondaryText: UIColor = .themeFocusText.secondaryLabelVariant()\n    static let themeFocusSecondaryBackground: UIColor = .themeFocusBackground.secondaryBackgroundVariant()\n    static let themeFocusPageSeparatorBackground: UIColor = .themeFocusBackground.pageSeparatorBackgroundVariant()\n    static let themeFocusPageSeparatorLine: UIColor = .themeFocusBackground.pageSeparatorLineVariant()\n\n    static let themeOriginalSecondaryText: UIColor = .themeOriginalText.secondaryLabelVariant()\n    static let themeOriginalSecondaryBackground: UIColor = .themeOriginalBackground.secondaryBackgroundVariant()\n    static let themeOriginalPageSeparatorBackground: UIColor = .themeOriginalBackground.pageSeparatorBackgroundVariant()\n    static let themeOriginalPageSeparatorLine: UIColor = .themeOriginalBackground.pageSeparatorLineVariant()\n\n    static let themePaperSecondaryText: UIColor = .themePaperText.secondaryLabelVariant()\n    static let themePaperSecondaryBackground: UIColor = .themePaperBackground.secondaryBackgroundVariant()\n    static let themePaperPageSeparatorBackground: UIColor = .themePaperBackground.pageSeparatorBackgroundVariant()\n    static let themePaperPageSeparatorLine: UIColor = .themePaperBackground.pageSeparatorLineVariant()\n\n    static let themeQuietSecondaryText: UIColor = .themeQuietText.secondaryLabelVariant()\n    static let themeQuietSecondaryBackground: UIColor = .themeQuietBackground.secondaryBackgroundVariant()\n    static let themeQuietPageSeparatorBackground: UIColor = .themeQuietBackground.pageSeparatorBackgroundVariant()\n    static let themeQuietPageSeparatorLine: UIColor = .themeQuietBackground.pageSeparatorLineVariant()\n}\n\nextension ThemeStyle {\n    var textColor: UIColor {\n        switch self {\n        case .calm: .themeCalmText\n        case .focus: .themeFocusText\n        case .original: .themeOriginalText\n        case .paper: .themePaperText\n        case .quiet: .themeQuietText\n        }\n    }\n\n    var secondaryTextColor: UIColor {\n        switch self {\n        case .calm: .themeCalmSecondaryText\n        case .focus: .themeFocusSecondaryText\n        case .original: .themeOriginalSecondaryText\n        case .paper: .themePaperSecondaryText\n        case .quiet: .themeQuietSecondaryText\n        }\n    }\n\n    public var backgroundColor: UIColor {\n        switch self {\n        case .calm: .themeCalmBackground\n        case .focus: .themeFocusBackground\n        case .original: .themeOriginalBackground\n        case .paper: .themePaperBackground\n        case .quiet: .themeQuietBackground\n        }\n    }\n\n    var secondaryBackgroundColor: UIColor {\n        switch self {\n        case .calm: .themeCalmSecondaryBackground\n        case .focus: .themeFocusSecondaryBackground\n        case .original: .themeOriginalSecondaryBackground\n        case .paper: .themePaperSecondaryBackground\n        case .quiet: .themeQuietSecondaryBackground\n        }\n    }\n\n    var pageSeparatorBackground: UIColor {\n        switch self {\n        case .calm: .themeCalmPageSeparatorBackground\n        case .focus: .themeFocusPageSeparatorBackground\n        case .original: .themeOriginalPageSeparatorBackground\n        case .paper: .themePaperPageSeparatorBackground\n        case .quiet: .themeQuietPageSeparatorBackground\n        }\n    }\n\n    var pageSeparatorLine: UIColor {\n        switch self {\n        case .calm: .themeCalmPageSeparatorLine\n        case .focus: .themeFocusPageSeparatorLine\n        case .original: .themeOriginalPageSeparatorLine\n        case .paper: .themePaperPageSeparatorLine\n        case .quiet: .themeQuietPageSeparatorLine\n        }\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/CollectionView/CollectionView.swift",
    "content": "//\n//  CollectionView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-26.\n//\n\nimport SwiftUI\n\npublic enum ScrollAnchor {\n    case center\n}\n\npublic struct CollectionView<\n    SectionId: Hashable,\n    Item: Identifiable & Hashable,\n    ItemContent: View\n>: View {\n    // MARK: Lifecycle\n\n    public init(\n        layout: UICollectionViewLayout,\n        sections: [ListSection<SectionId, Item>],\n        @ViewBuilder content: @escaping (SectionId, Item) -> ItemContent\n    ) {\n        self.layout = layout\n        self.sections = sections\n        self.content = content\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        CollectionViewBody(\n            layout: layout,\n            sections: sections,\n            configure: configure,\n            content: content,\n            isPagingEnabled: isPagingEnabled,\n            usesCollectionViewSafeAreaForCellLayoutMargins: usesCollectionViewSafeAreaForCellLayoutMargins,\n            scrollAnchorId: scrollAnchorId,\n            scrollAnchor: scrollAnchor\n        )\n    }\n\n    public func configureCollectionView(configure: @escaping (UICollectionView) -> Void) -> Self {\n        mutateSelf {\n            $0.configure = configure\n        }\n    }\n\n    public func anchorScrollTo(\n        id scrollAnchorId: Binding<Item.ID>,\n        anchor: ScrollAnchor = .center\n    ) -> Self {\n        mutateSelf {\n            $0.scrollAnchorId = scrollAnchorId\n            $0.scrollAnchor = anchor\n        }\n    }\n\n    public func pagingEnabled(_ isPagingEnabled: Bool) -> Self {\n        mutateSelf {\n            $0.isPagingEnabled = isPagingEnabled\n        }\n    }\n\n    public func usesCollectionViewSafeAreaForCellLayoutMargins(_ flag: Bool) -> Self {\n        mutateSelf {\n            $0.usesCollectionViewSafeAreaForCellLayoutMargins = flag\n        }\n    }\n\n    // MARK: Private\n\n    private let layout: UICollectionViewLayout\n    private let sections: [ListSection<SectionId, Item>]\n    private let content: (SectionId, Item) -> ItemContent\n    private var configure: ((UICollectionView) -> Void)?\n\n    private var isPagingEnabled: Bool = false\n    private var usesCollectionViewSafeAreaForCellLayoutMargins: Bool = false\n\n    private var scrollAnchorId: Binding<Item.ID>?\n    private var scrollAnchor: ScrollAnchor = .center\n}\n\nprivate struct CollectionViewBody<\n    SectionId: Hashable,\n    Item: Identifiable & Hashable,\n    ItemContent: View\n>: UIViewControllerRepresentable {\n    typealias UIViewControllerType = CollectionViewController<SectionId, Item, ItemContent>\n\n    // MARK: Internal\n\n    let layout: UICollectionViewLayout\n    let sections: [ListSection<SectionId, Item>]\n    let configure: ((UICollectionView) -> Void)?\n    let content: (SectionId, Item) -> ItemContent\n\n    let isPagingEnabled: Bool\n    let usesCollectionViewSafeAreaForCellLayoutMargins: Bool\n\n    let scrollAnchorId: Binding<Item.ID>?\n    let scrollAnchor: ScrollAnchor\n\n    func makeUIViewController(context: Context) -> UIViewControllerType {\n        let viewController = UIViewControllerType(collectionViewLayout: layout, content: content)\n        configure?(viewController.collectionView)\n\n        context.coordinator.viewController = viewController\n        updateUIViewController(viewController, context: context)\n\n        return viewController\n    }\n\n    func updateUIViewController(_ viewController: UIViewControllerType, context: Context) {\n        // Update the reader\n        if let proxy = context.environment._collectionView {\n            if proxy.wrappedValue !== viewController.collectionView {\n                DispatchQueue.main.async {\n                    proxy.wrappedValue = viewController.collectionView\n                }\n            }\n        }\n\n        let previousView = context.coordinator.parent\n        if previousView.layout != layout {\n            viewController.collectionView.collectionViewLayout = layout\n        }\n\n        viewController.dataSource?.sections = sections\n\n        viewController.usesCollectionViewSafeAreaForCellLayoutMargins = usesCollectionViewSafeAreaForCellLayoutMargins\n\n        viewController.scroller.isPagingEnabled = isPagingEnabled\n        viewController.scroller.onScrollAnchorIdUpdated = {\n            scrollAnchorId?.wrappedValue = $0\n        }\n        if let scrollAnchorId {\n            viewController.scroller.anchorScrollTo(id: scrollAnchorId.wrappedValue, anchor: scrollAnchor)\n        }\n    }\n\n    func makeCoordinator() -> Coordinator {\n        Coordinator(self)\n    }\n}\n\nextension CollectionViewBody {\n    class Coordinator {\n        let parent: CollectionViewBody\n        weak var viewController: UIViewControllerType?\n\n        init(_ parent: CollectionViewBody) {\n            self.parent = parent\n        }\n    }\n}\n\nstruct StaticCollectionView_Previews: PreviewProvider {\n    struct Item: Identifiable & Hashable {\n        let id: Int\n        let text: String\n    }\n\n    enum SectionId: Hashable {\n        case main\n    }\n\n    struct StaticCollectionViewPreview: View {\n        @State var layout: UICollectionViewLayout = {\n            let size = NSCollectionLayoutSize(\n                widthDimension: NSCollectionLayoutDimension.fractionalWidth(1),\n                heightDimension: NSCollectionLayoutDimension.estimated(99)\n            )\n            let item = NSCollectionLayoutItem(layoutSize: size)\n            let group = NSCollectionLayoutGroup.horizontal(layoutSize: size, subitem: item, count: 1)\n            let section = NSCollectionLayoutSection(group: group)\n            section.interGroupSpacing = 60\n            let collectionViewLayout = UICollectionViewCompositionalLayout(section: section)\n            return collectionViewLayout\n        }()\n\n        @State var sections: [ListSection<SectionId, Item>] = [\n            ListSection(\n                sectionId: .main,\n                items: (1 ... 100).map { Item(id: $0, text: \"Item \\($0)\") }\n            ),\n        ]\n\n        @State var scrollAnchorId: Int = 45 {\n            didSet {\n                print(\"Scrolled to item \\(scrollAnchorId)\")\n            }\n        }\n\n        var body: some View {\n            ZStack {\n                CollectionView(layout: layout, sections: sections) { _, item in\n                    VStack {\n                        Text(item.text)\n                            .padding()\n                        Divider()\n                    }\n                    .border(.purple)\n                }\n                .configureCollectionView { collectionView in\n                    collectionView.contentInsetAdjustmentBehavior = .never\n                }\n                .anchorScrollTo(id: $scrollAnchorId)\n\n                Circle()\n                    .foregroundColor(.purple)\n                    .frame(width: 10)\n            }\n        }\n    }\n\n    // MARK: Internal\n\n    static var previews: some View {\n        StaticCollectionViewPreview()\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/CollectionView/CollectionViewController.swift",
    "content": "//\n//  CollectionViewController.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-08.\n//\n\nimport SwiftUI\n\nfinal class CollectionViewController<\n    SectionId: Hashable,\n    Item: Identifiable & Hashable,\n    ItemContent: View\n>: UIViewController, UICollectionViewDelegate {\n    typealias CellType = HostingCollectionViewCell<ItemContent>\n\n    // MARK: Lifecycle\n\n    init(\n        collectionViewLayout: UICollectionViewLayout,\n        content: @escaping (SectionId, Item) -> ItemContent\n    ) {\n        collectionView = .init(frame: .zero, collectionViewLayout: collectionViewLayout)\n        collectionView.backgroundColor = .clear\n\n        super.init(nibName: nil, bundle: nil)\n        collectionView.delegate = self\n\n        setUpDataSource(content: content)\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Internal\n\n    let collectionView: UICollectionView\n    lazy var scroller = CollectionViewScroller<SectionId, Item>(collectionView: collectionView)\n\n    var usesCollectionViewSafeAreaForCellLayoutMargins = true {\n        didSet {\n            if usesCollectionViewSafeAreaForCellLayoutMargins != oldValue {\n                updateLayoutMarginsForVisibleCells()\n            }\n        }\n    }\n\n    var dataSource: CollectionViewDataSource<SectionId, Item>? {\n        didSet {\n            scroller.dataSource = dataSource\n        }\n    }\n\n    override func viewSafeAreaInsetsDidChange() {\n        super.viewSafeAreaInsetsDidChange()\n        updateLayoutMarginsForVisibleCells()\n    }\n\n    override func loadView() {\n        view = collectionView\n    }\n\n    override func viewIsAppearing(_ animated: Bool) {\n        super.viewIsAppearing(animated)\n        scroller.scrollToInitialItemIfNeeded()\n    }\n\n    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {\n        super.viewWillTransition(to: size, with: coordinator)\n        scroller.animateToSize(size, with: coordinator)\n    }\n\n    override func viewDidLayoutSubviews() {\n        super.viewDidLayoutSubviews()\n        scroller.scrollToAnchoredItemIfNeeded()\n    }\n\n    // MARK: - Cell Lifecycle\n\n    func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {\n        guard let typedCell = cell as? CellType else {\n            return\n        }\n        typedCell.updateLayoutMargins(\n            usesCollectionViewSafeAreaForCellLayoutMargins: usesCollectionViewSafeAreaForCellLayoutMargins,\n            collectionViewSafeAreaInsets: view.safeAreaInsets\n        )\n\n        typedCell.cellWillDisplay(animated: false)\n    }\n\n    func collectionView(\n        _ collectionView: UICollectionView,\n        didEndDisplaying cell: UICollectionViewCell,\n        forItemAt indexPath: IndexPath\n    ) {\n        guard let typedCell = cell as? CellType else {\n            return\n        }\n        typedCell.cellDidEndDisplaying(animated: false)\n    }\n\n    // MARK: - Paging\n\n    func collectionView(_ collectionView: UICollectionView, targetContentOffsetForProposedContentOffset proposedContentOffset: CGPoint) -> CGPoint {\n        scroller.targetContentOffsetForProposedContentOffset(proposedContentOffset)\n    }\n\n    func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {\n        targetContentOffset.pointee = scroller.targetContentOffsetForProposedContentOffset(targetContentOffset.pointee)\n    }\n\n    // MARK: - Scrolling\n\n    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {\n        scroller.startInteractiveScrolling()\n    }\n\n    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {\n        if !decelerate {\n            scroller.endInteractiveScrolling()\n        }\n    }\n\n    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {\n        scroller.endInteractiveScrolling()\n    }\n\n    func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {\n        scroller.endInteractiveScrolling()\n    }\n\n    // MARK: Private\n\n    private func setUpDataSource(content: @escaping (SectionId, Item) -> ItemContent) {\n        collectionView.register(CellType.self, forCellWithReuseIdentifier: CellType.reuseId)\n\n        dataSource = CollectionViewDataSource(collectionView: collectionView) {\n            [weak self] _, indexPath, itemId in\n            guard let self, let dataSource else {\n                return nil\n            }\n\n            guard let section = dataSource.section(from: indexPath), let item = dataSource.item(at: indexPath) else {\n                return nil\n            }\n\n            assert(item.id == itemId, \"Sections data doesn't match data source snapshot.\")\n\n            // Get & configure the cell.\n            let cell = collectionView.dequeueReusableCell(CellType.self, for: indexPath)\n            cell.configure(content: content(section.id, item), dataId: itemId)\n\n            cell.updateLayoutMargins(\n                usesCollectionViewSafeAreaForCellLayoutMargins: usesCollectionViewSafeAreaForCellLayoutMargins,\n                collectionViewSafeAreaInsets: view.safeAreaInsets\n            )\n\n            return cell\n        }\n    }\n\n    private func updateLayoutMarginsForVisibleCells() {\n        for cell in collectionView.visibleCells {\n            (cell as? CellType)?.updateLayoutMargins(\n                usesCollectionViewSafeAreaForCellLayoutMargins: usesCollectionViewSafeAreaForCellLayoutMargins,\n                collectionViewSafeAreaInsets: view.safeAreaInsets\n            )\n        }\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/CollectionView/CollectionViewDataSource.swift",
    "content": "//\n//  CollectionViewDataSource.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-10.\n//\n\nimport UIKit\n\nfinal class CollectionViewDataSource<\n    SectionId: Hashable,\n    Item: Identifiable & Hashable\n>: UICollectionViewDiffableDataSource<SectionId, Item.ID> {\n    // MARK: Internal\n\n    var sections: [ListSection<SectionId, Item>] = [] {\n        didSet {\n            updateSections(oldSections: oldValue, newSections: sections)\n        }\n    }\n\n    func section(from indexPath: IndexPath) -> ListSection<SectionId, Item>? {\n        if indexPath.section < 0 || indexPath.section >= sections.count {\n            return nil\n        }\n        return sections[indexPath.section]\n    }\n\n    func item(at indexPath: IndexPath) -> Item? {\n        guard let section = section(from: indexPath) else {\n            return nil\n        }\n        if indexPath.item < 0 || indexPath.item >= section.items.count {\n            return nil\n        }\n        return section.items[indexPath.item]\n    }\n\n    // MARK: Private\n\n    private func updateSections(\n        oldSections: [ListSection<SectionId, Item>],\n        newSections: [ListSection<SectionId, Item>]\n    ) {\n        var snapshot = snapshot()\n        var hasDataSourceChanged = false\n        defer {\n            if hasDataSourceChanged {\n                apply(snapshot, animatingDifferences: false)\n            }\n        }\n\n        // Early return for initial update.\n        guard !oldSections.isEmpty else {\n            hasDataSourceChanged = true\n\n            snapshot.deleteAllItems()\n            for newSection in newSections {\n                snapshot.appendSections([newSection.sectionId])\n                snapshot.appendItems(newSection.items.map(\\.id))\n            }\n            return\n        }\n\n        // Build new snapshot, if any item/section id changed.\n        let oldSectionIds = oldSections.map(\\.sectionId)\n        let newSectionIds = newSections.map(\\.sectionId)\n        let oldItemIds = oldSections.map { $0.items.map(\\.id) }\n        let newItemIds = newSections.map { $0.items.map(\\.id) }\n\n        if oldSectionIds != newSectionIds || oldItemIds != newItemIds {\n            hasDataSourceChanged = true\n            snapshot = .init()\n            for newSection in newSections {\n                snapshot.appendSections([newSection.sectionId])\n                snapshot.appendItems(newSection.items.map(\\.id))\n            }\n        }\n\n        // Reload updated items.\n        let allOldItems = oldSections.flatMap(\\.items)\n        let oldItemsDictionary = Dictionary(grouping: allOldItems, by: \\.id).mapValues(\\.first)\n\n        let allNewItems = newSections.flatMap(\\.items)\n        let newItemsDictionary = Dictionary(grouping: allNewItems, by: \\.id).mapValues(\\.first)\n\n        for (itemId, newItem) in newItemsDictionary {\n            if newItem != oldItemsDictionary[itemId] {\n                hasDataSourceChanged = true\n                snapshot.reconfigureItems([itemId])\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/CollectionView/CollectionViewReader.swift",
    "content": "//\n//  CollectionViewReader.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-29.\n//\n\nimport SwiftUI\n\nprivate struct CollectionViewControllerKey: EnvironmentKey {\n    static let defaultValue: Binding<UICollectionView?>? = nil\n}\n\nextension EnvironmentValues {\n    var _collectionView: Binding<UICollectionView?>? {\n        get { self[CollectionViewControllerKey.self] }\n        set { self[CollectionViewControllerKey.self] = newValue }\n    }\n}\n\npublic struct CollectionViewReader<Content: View>: View {\n    // MARK: Lifecycle\n\n    public init(@ViewBuilder content: @escaping (UICollectionView?) -> Content) {\n        self.content = content\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        content(_environmentCollectionView?.wrappedValue ?? _collectionView)\n            .environment(\\._collectionView, $_collectionView)\n    }\n\n    // MARK: Internal\n\n    @State var _collectionView: UICollectionView? = nil\n    @Environment(\\._collectionView) var _environmentCollectionView\n    let content: (UICollectionView?) -> Content\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/CollectionView/CollectionViewScroller.swift",
    "content": "//\n//  CollectionViewScroller.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-12.\n//\n\nimport SwiftUI\nimport VLogging\n\n@MainActor\nfinal class CollectionViewScroller<\n    SectionId: Hashable,\n    Item: Identifiable & Hashable\n> {\n    init(collectionView: UICollectionView) {\n        scrollToItemHelper = CollectionViewScrollToItemHelper(collectionView: collectionView)\n        self.collectionView = collectionView\n    }\n\n    var dataSource: CollectionViewDataSource<SectionId, Item>?\n\n    var onScrollAnchorIdUpdated: ((Item.ID) -> Void)?\n\n    var isPagingEnabled: Bool = false {\n        didSet {\n            collectionView.decelerationRate = isPagingEnabled ? .fast : .normal\n        }\n    }\n\n    private var transitioningToNewSize = false\n    private var programmaticScrollingInProgress = false\n\n    private let collectionView: UICollectionView\n    private let scrollToItemHelper: CollectionViewScrollToItemHelper\n\n    private var hasScrolledToInitialItem = false\n    private var scrollAnchor: ScrollAnchor = .center\n    private var scrollAnchorId: Item.ID? {\n        didSet {\n            assert(scrollAnchorId != nil, \"scrollAnchorId shouldn't be nil\")\n            if let scrollAnchorId, oldValue != scrollAnchorId {\n                onScrollAnchorIdUpdated?(scrollAnchorId)\n            }\n        }\n    }\n\n    private var isUserScrolling = false {\n        didSet {\n            if !isUserScrolling {\n                updateScrollAnchorId()\n            }\n        }\n    }\n}\n\nextension CollectionViewScroller {\n    // MARK: - Pagingation\n\n    func targetContentOffsetForProposedContentOffset(_ proposedContentOffset: CGPoint) -> CGPoint {\n        if !isPagingEnabled {\n            return proposedContentOffset\n        }\n\n        guard let scrollAnchorId, let anchorIndexPath = dataSource?.indexPath(for: scrollAnchorId) else {\n            logger.error(\"targetContentOffset couldn't find the anchor with id: \\(String(describing: scrollAnchorId))\")\n            return proposedContentOffset\n        }\n\n        let scrollsHorizontally = collectionView.scrollsHorizontally\n        if scrollsHorizontally && collectionView.scrollsVertically {\n            logger.error(\"isPagingEnabled doesn't support UICollectionView scrolling in both directions.\")\n            return proposedContentOffset\n        }\n\n        let targetIndexPaths = [\n            collectionView.previousIndexPath(anchorIndexPath),\n            anchorIndexPath,\n            collectionView.nextIndexPath(anchorIndexPath),\n        ].compactMap { $0 }\n\n        let centeredContentOffset = collectionView.centeredContentOffset(proposedContentOffset)\n\n        let indexPathDistances = targetIndexPaths.compactMap { indexPath in\n            if let layoutAttributes = collectionView.layoutAttributesForItem(at: indexPath) {\n                let distance = layoutAttributes.frame.squaredDistance(to: centeredContentOffset)\n                return (layoutAttributes: layoutAttributes, distance: distance)\n            }\n            return nil\n        }\n\n        let targetLayoutAttributes = indexPathDistances.min { $0.distance < $1.distance }?.layoutAttributes\n        if let targetLayoutAttributes {\n            return collectionView.contentOffsetCentering(targetLayoutAttributes, proposedContentOffset: proposedContentOffset)\n        } else {\n            logger.error(\"targetContentOffset couldn't find layout attributes for the target nor the anchor.\")\n            return proposedContentOffset\n        }\n    }\n}\n\nextension CollectionViewScroller {\n    // MARK: - Scroll Anchor\n\n    func anchorScrollTo(id scrollAnchorId: Item.ID, anchor: ScrollAnchor) {\n        let oldScrollAnchorId = self.scrollAnchorId\n        self.scrollAnchorId = scrollAnchorId\n        scrollAnchor = anchor\n\n        // Animate to the new value, if changed.\n        if scrollAnchorId != oldScrollAnchorId {\n            scrollToAnchoredItem(animated: true)\n        }\n    }\n\n    func animateToSize(_ size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {\n        // Update scroll item in case user scrolling is in progress.\n        updateScrollAnchorId()\n\n        transitioningToNewSize = true\n\n        coordinator.animate(alongsideTransition: { _ in\n            self.scrollToAnchoredItem(animated: false)\n        }, completion: { _ in\n            self.transitioningToNewSize = false\n            self.scrollToAnchoredItem(animated: false)\n        })\n    }\n\n    func scrollToAnchoredItemIfNeeded() {\n        if transitioningToNewSize {\n            scrollToAnchoredItem(animated: false)\n        }\n    }\n\n    func scrollToInitialItemIfNeeded() {\n        if !hasScrolledToInitialItem {\n            hasScrolledToInitialItem = true\n            if scrollAnchorId != nil {\n                scrollToAnchoredItem(animated: false)\n\n                if !isAnchorVisible {\n                    // Try to scroll again, if first time failed to scroll.\n                    DispatchQueue.main.async {\n                        self.collectionView.reloadData()\n                        self.collectionView.setNeedsLayout()\n                        self.collectionView.layoutIfNeeded()\n                        self.scrollToAnchoredItem(animated: false)\n                    }\n                }\n            }\n        }\n    }\n\n    func startInteractiveScrolling() {\n        isUserScrolling = true\n    }\n\n    func endInteractiveScrolling() {\n        // Give scroll view time to rest before calculating the new anchor.\n        DispatchQueue.main.async {\n            self.isUserScrolling = false\n        }\n    }\n}\n\nextension CollectionViewScroller {\n    // MARK: - Helpers\n\n    private func scrollToAnchoredItem(animated: Bool) {\n        // Prevent rescursive anchoring.\n        if programmaticScrollingInProgress {\n            return\n        }\n        programmaticScrollingInProgress = true\n        defer {\n            DispatchQueue.main.async {\n                self.programmaticScrollingInProgress = false\n            }\n        }\n\n        if let scrollAnchorId,\n           let scrollIndexPath = dataSource?.indexPath(for: scrollAnchorId),\n           let scrollPositionOfScrollAnchor\n        {\n            scrollToItemHelper.accuratelyScrollToItem(at: scrollIndexPath, position: scrollPositionOfScrollAnchor, animated: animated)\n            if !animated {\n                collectionView.contentOffset = targetContentOffsetForProposedContentOffset(collectionView.contentOffset)\n            }\n        }\n    }\n\n    private func updateScrollAnchorId() {\n        if let scrollIndex = indexPathClosestToAnchor {\n            if let item = dataSource?.item(at: scrollIndex) {\n                scrollAnchorId = item.id\n            }\n        }\n    }\n\n    private var isAnchorVisible: Bool {\n        guard let scrollAnchorId else {\n            return false\n        }\n        guard let anchorIndexPath = dataSource?.indexPath(for: scrollAnchorId) else {\n            return false\n        }\n        return collectionView.indexPathsForVisibleItems.contains(anchorIndexPath)\n    }\n\n    private var indexPathClosestToAnchor: IndexPath? {\n        let anchorPoint = anchorPoint\n        let superviewAnchor = CGPoint(\n            x: anchorPoint.x * collectionView.bounds.width + collectionView.frame.minX,\n            y: anchorPoint.y * collectionView.bounds.height + collectionView.frame.minY\n        )\n        let collectionViewAnchor = collectionView.convert(superviewAnchor, from: collectionView.superview)\n        return closestIndexPath(to: collectionViewAnchor)\n    }\n\n    private func closestIndexPath(to point: CGPoint) -> IndexPath? {\n        // First, check if there's an item exactly at the point\n        if let exactIndexPath = collectionView.indexPathForItem(at: point) {\n            return exactIndexPath\n        }\n\n        let indexPathDistances = collectionView.indexPathsForVisibleItems.compactMap { indexPath in\n            if let frame = collectionView.layoutAttributesForItem(at: indexPath)?.frame {\n                let distance = frame.squaredDistance(to: point)\n                return (indexPath: indexPath, distance: distance)\n            }\n            return nil\n        }\n\n        return indexPathDistances\n            .min { $0.distance < $1.distance }\n            .map(\\.indexPath)\n    }\n\n    private var anchorPoint: UnitPoint {\n        switch scrollAnchor {\n        case .center:\n            return UnitPoint(x: 0.5, y: 0.5)\n        }\n    }\n\n    private var scrollPositionOfScrollAnchor: UICollectionView.ScrollPosition? {\n        let scrollsHorizontally = collectionView.scrollsHorizontally\n        let scrollsVertically = collectionView.scrollsVertically\n\n        switch scrollAnchor {\n        case .center:\n            if scrollsVertically && !scrollsHorizontally {\n                return .centeredVertically\n            } else if !scrollsVertically && scrollsHorizontally {\n                return .centeredHorizontally\n            }\n            return nil\n        }\n    }\n}\n\nprivate extension UICollectionView {\n    var scrollsHorizontally: Bool {\n        let availableWidth = bounds.width -\n            adjustedContentInset.left -\n            adjustedContentInset.right\n        return contentSize.width > availableWidth\n    }\n\n    var scrollsVertically: Bool {\n        let availableHeight = bounds.height -\n            adjustedContentInset.top -\n            adjustedContentInset.bottom\n\n        return contentSize.height > availableHeight\n    }\n\n    func nextIndexPath(_ indexPath: IndexPath) -> IndexPath? {\n        if indexPath.item < numberOfItems(inSection: indexPath.section) - 1 {\n            // Next item in the same section\n            return IndexPath(item: indexPath.item + 1, section: indexPath.section)\n        } else if indexPath.section < numberOfSections - 1 {\n            // First item in the next section\n            return IndexPath(item: 0, section: indexPath.section + 1)\n        } else {\n            // Already at the last item of the last section\n            return nil\n        }\n    }\n\n    func previousIndexPath(_ indexPath: IndexPath) -> IndexPath? {\n        if indexPath.item > 0 {\n            // Previous item in the same section\n            return IndexPath(item: indexPath.item - 1, section: indexPath.section)\n        } else if indexPath.section > 0 {\n            // Last item in the previous section\n            let previousSection = indexPath.section - 1\n            let lastItemInPreviousSection = numberOfItems(inSection: previousSection) - 1\n            return IndexPath(item: lastItemInPreviousSection, section: previousSection)\n        } else {\n            // Already at the first item of the first section\n            return nil\n        }\n    }\n\n    func contentOffsetCentering(_ layoutAttributes: UICollectionViewLayoutAttributes, proposedContentOffset: CGPoint) -> CGPoint {\n        let cellCenter = layoutAttributes.center\n        if scrollsHorizontally {\n            let offsetX = cellCenter.x - bounds.width / 2\n            return CGPoint(x: offsetX, y: proposedContentOffset.y)\n        } else {\n            let offsetY = cellCenter.y - bounds.height / 2\n            return CGPoint(x: proposedContentOffset.x, y: offsetY)\n        }\n    }\n\n    func centeredContentOffset(_ contentOffset: CGPoint) -> CGPoint {\n        CGPoint(\n            x: contentOffset.x + bounds.width / 2,\n            y: contentOffset.y + bounds.height / 2\n        )\n    }\n}\n\nprivate extension CGRect {\n    func cornerClosest(to point: CGPoint) -> CGPoint {\n        let closestX = max(minX, min(maxX, point.x))\n        let closestY = max(minY, min(maxY, point.y))\n        return CGPoint(x: closestX, y: closestY)\n    }\n\n    func squaredDistance(to point: CGPoint) -> CGFloat {\n        let corner = cornerClosest(to: point)\n        return UIx.squaredDistance(point, corner)\n    }\n}\n\nprivate func squaredDistance(_ p1: CGPoint, _ p2: CGPoint) -> CGFloat {\n    let deltaX = p2.x - p1.x\n    let deltaY = p2.y - p1.y\n    return deltaX * deltaX + deltaY * deltaY\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/CollectionView/HostingCollectionViewCell.swift",
    "content": "//\n//  HostingCollectionViewCell.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-07.\n//\n\nimport SwiftUI\n\nfinal class HostingCollectionViewCell<Content: View>: UICollectionViewCell {\n    // MARK: Internal\n\n    override var safeAreaInsets: UIEdgeInsets {\n        .zero\n    }\n\n    func updateLayoutMargins(usesCollectionViewSafeAreaForCellLayoutMargins: Bool, collectionViewSafeAreaInsets: UIEdgeInsets) {\n        if usesCollectionViewSafeAreaForCellLayoutMargins {\n            cellLayoutMargins = .useCollectionViewSafeArea(collectionViewSafeAreaInsets)\n        } else {\n            cellLayoutMargins = .zero\n        }\n    }\n\n    func configure(content: Content, dataId: AnyHashable) {\n        self.dataId = dataId\n        let content = EpoxySwiftUIHostingView<Content>.Content(rootView: content, dataID: dataId)\n        if let hostingView {\n            hostingView.setContent(content, animated: false)\n        } else {\n            let hostingView = EpoxySwiftUIHostingView(style: .init(reuseBehavior: .reusable, initialContent: content))\n            setViewIfNeeded(view: hostingView)\n        }\n    }\n\n    func cellWillDisplay(animated: Bool) {\n        hostingView?.handleWillDisplay(animated: animated)\n    }\n\n    func cellDidEndDisplaying(animated: Bool) {\n        hostingView?.handleDidEndDisplaying(animated: animated)\n    }\n\n    // MARK: Private\n\n    private var dataId: AnyHashable?\n    private var hostingView: EpoxySwiftUIHostingView<Content>?\n\n    private var cellLayoutMargins: CollectionViewCellLayoutMargins = .zero {\n        didSet {\n            updateLayoutMarginsIfNeeded()\n        }\n    }\n\n    private func setViewIfNeeded(view: EpoxySwiftUIHostingView<Content>) {\n        guard hostingView == nil else {\n            return\n        }\n        hostingView = view\n\n        view.translatesAutoresizingMaskIntoConstraints = false\n        // Use the existing content view size so that we don't have to wait for auto layout to give this\n        // view an initial size.\n        view.frame = contentView.bounds\n        contentView.addSubview(view)\n        NSLayoutConstraint.activate([\n            view.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),\n            view.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),\n            view.topAnchor.constraint(equalTo: contentView.topAnchor),\n            view.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),\n        ])\n    }\n\n    private func updateLayoutMarginsIfNeeded() {\n        switch cellLayoutMargins {\n        case .zero:\n            hostingView?.layoutMargins = .zero\n        case .useCollectionViewSafeArea(let insets):\n            hostingView?.layoutMargins = insets\n        }\n    }\n}\n\nprivate enum CollectionViewCellLayoutMargins {\n    case zero\n    case useCollectionViewSafeArea(_ safeArea: UIEdgeInsets)\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/CollectionView/ListSection.swift",
    "content": "//\n//  ListSection.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-07.\n//\n\npublic struct ListSection<\n    SectionId: Hashable,\n    Item: Identifiable & Hashable\n>: Hashable, Identifiable {\n    // MARK: Lifecycle\n\n    public init(sectionId: SectionId, items: [Item] = []) {\n        self.sectionId = sectionId\n        self.items = items\n    }\n\n    // MARK: Public\n\n    public var sectionId: SectionId\n    public var items: [Item]\n\n    public var id: SectionId { sectionId }\n\n    public mutating func append(_ item: Item) {\n        items.append(item)\n    }\n}\n\nextension ListSection {\n    public func mapItems<NewItem>(_ transform: (Item) -> NewItem) -> ListSection<SectionId, NewItem>\n        where NewItem: Identifiable & Hashable\n    {\n        ListSection<SectionId, NewItem>(sectionId: sectionId, items: items.map(transform))\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Epoxy/CollectionViewScrollToItemHelper.swift",
    "content": "// Created by Bryan Keller on 10/20/20.\n// Copyright © 2020 Airbnb Inc. All rights reserved.\n\nimport UIKit\n\n// MARK: - CollectionViewScrollToItemHelper\n\n/// This class facilitates scrolling to an item at a particular index path, since the built-in\n/// scroll-to-item functionality is broken for self-sizing cells.\n///\n/// The fix for the animated case involves driving the scroll animation ourselves using a\n/// `CADisplayLink`.\n///\n/// The fix for the non-animated case involves repeatedly calling the UIKit `scrollToItem`\n/// implementation until we land at a stable content offset.\nfinal class CollectionViewScrollToItemHelper {\n\n  // MARK: Lifecycle\n\n  /// The collection view instance is weakly-held.\n  init(collectionView: UICollectionView) {\n    self.collectionView = collectionView\n  }\n\n  // MARK: Internal\n\n  func accuratelyScrollToItem(\n    at indexPath: IndexPath,\n    position: UICollectionView.ScrollPosition,\n    animated: Bool)\n  {\n    if animated {\n      accurateScrollToItemWithAnimation(itemIndexPath: indexPath, position: position)\n    } else {\n      accurateScrollToItemWithoutAnimation(itemIndexPath: indexPath, position: position)\n    }\n  }\n\n  /// Cancels an in-flight animated scroll-to-item, if there is one.\n  ///\n  /// Call this function if your collection view is about to deallocate. For example, you can call\n  /// this from `viewWillDisappear` in a view controller, or `didMoveToWindow` when `window == nil`\n  /// in a view. You can also call this when a user interacts with the collection view so that\n  /// control is returned to the user.\n  func cancelAnimatedScrollToItem() {\n    scrollToItemContext = nil\n  }\n\n  // MARK: Private\n\n  private weak var collectionView: UICollectionView?\n  private weak var scrollToItemDisplayLink: CADisplayLink?\n\n  private var scrollToItemContext: ScrollToItemContext? {\n    willSet {\n      scrollToItemDisplayLink?.invalidate()\n    }\n  }\n\n  private func accurateScrollToItemWithoutAnimation(\n    itemIndexPath: IndexPath,\n    position: UICollectionView.ScrollPosition)\n  {\n    guard let collectionView = collectionView else { return }\n\n    // Programmatically scrolling to an item, even without an animation, when using self-sizing\n    // cells usually results in slightly incorrect scroll offsets. By invoking `scrollToItem`\n    // multiple times in a row, we can force the collection view to eventually end up in the right\n    // spot.\n    //\n    // This usually only takes 3 iterations: 1 to get to an estimated offset, 1 to get to the\n    // final offset, and 1 to verify that we're at the final offset. If it takes more than 5\n    // attempts, we'll stop trying since we're blocking the main thread during these attempts.\n    var previousContentOffset = CGPoint(\n      x: CGFloat.greatestFiniteMagnitude,\n      y: CGFloat.greatestFiniteMagnitude)\n    var numberOfAttempts = 1\n    while\n\n      abs(collectionView.contentOffset.x - previousContentOffset.x) >= 1 ||\n      abs(collectionView.contentOffset.y - previousContentOffset.y) >= 1,\n      numberOfAttempts <= 5\n    {\n      if numberOfAttempts > 1 {\n        collectionView.setNeedsLayout()\n        collectionView.layoutIfNeeded()\n      }\n\n      previousContentOffset = collectionView.contentOffset\n      collectionView.scrollToItem(at: itemIndexPath, at: position, animated: false)\n\n      numberOfAttempts += 1\n    }\n\n    if numberOfAttempts > 5 {\n      EpoxyLogger.shared.warn(\n        \"Gave up scrolling to an item without an animation because it took more than 5 attempts.\")\n    }\n  }\n\n  private func accurateScrollToItemWithAnimation(\n    itemIndexPath: IndexPath,\n    position: UICollectionView.ScrollPosition)\n  {\n    guard let collectionView = collectionView else { return }\n\n    let scrollPosition: UICollectionView.ScrollPosition\n    if position == [] {\n      guard\n        let closestScrollPosition = closestRestingScrollPosition(\n          forTargetItemIndexPath: itemIndexPath,\n          collectionView: collectionView)\n      else {\n        // If we can't find a closest-scroll-position, it's because the item is already fully\n        // visible. In this situation, we can return early / do nothing.\n        return\n      }\n      scrollPosition = closestScrollPosition\n    } else {\n      scrollPosition = position\n    }\n\n    scrollToItemContext = ScrollToItemContext(\n      targetIndexPath: itemIndexPath,\n      targetScrollPosition: scrollPosition,\n      animationStartTime: CACurrentMediaTime())\n\n    startScrollingTowardTargetItem()\n  }\n\n  private func startScrollingTowardTargetItem() {\n    let scrollToItemDisplayLink = CADisplayLink(\n      target: self,\n      selector: #selector(scrollToItemDisplayLinkFired))\n    if #available(iOS 15.1, *) {\n      #if swift(>=5.5) // Proxy check for being built with the iOS 14 & below SDK, running on iOS 15.\n      scrollToItemDisplayLink.preferredFrameRateRange = CAFrameRateRange(\n        minimum: 80,\n        maximum: 120,\n        preferred: 120)\n      #endif\n    }\n    scrollToItemDisplayLink.add(to: .main, forMode: .common)\n    self.scrollToItemDisplayLink = scrollToItemDisplayLink\n  }\n\n  /// Removes our scroll-to-item context and finalizes our custom scroll-to-item by invoking the\n  /// original function. This guarantees that our last frame of animation ends us in the correct\n  /// position.\n  private func finalizeScrollingTowardItem(\n    for scrollToItemContext: ScrollToItemContext,\n    animated: Bool)\n  {\n    self.scrollToItemContext = nil\n\n    guard let collectionView = collectionView else { return }\n\n    // Calling `scrollToItem(…)` with in invalid index path raises an exception:\n    // > NSInternalInconsistencyException: Attempted to scroll the collection view to an out-of-\n    // >  bounds item\n    // We must guard against this to check to ensure that this never happens, as we call this method\n    // repeatedly and the items/section may change out from under us.\n    if\n      case let indexPath = scrollToItemContext.targetIndexPath,\n      indexPath.section < collectionView.numberOfSections,\n      indexPath.item < collectionView.numberOfItems(inSection: indexPath.section)\n    {\n      collectionView.scrollToItem(\n        at: indexPath,\n        at: scrollToItemContext.targetScrollPosition,\n        animated: animated)\n    }\n\n    if !animated {\n      collectionView.delegate?.scrollViewDidEndScrollingAnimation?(collectionView)\n    }\n  }\n\n  @objc\n  private func scrollToItemDisplayLinkFired() {\n    guard let collectionView = collectionView else { return }\n    guard let scrollToItemContext = scrollToItemContext else {\n      EpoxyLogger.shared.assertionFailure(\n        \"\"\"\n        Expected `scrollToItemContext` to be non-nil when programmatically scrolling toward an \\\n        item.\n        \"\"\")\n      return\n    }\n\n    // Don't start programmatically scrolling until we have a greater-than`.zero` `bounds.size`.\n    // This might happen if `scrollToItem` is called before the collection view has been laid out.\n    guard collectionView.bounds.width > 0, collectionView.bounds.height > 0 else { return }\n\n    // Figure out which axis to use for scrolling.\n    guard let scrollAxis = scrollAxis(for: collectionView) else {\n      // If we can't determine a scroll axis, it's either due to the collection view being too small\n      // to be scrollable along either axis, or the collection view being scrollable along both\n      // axes. In either scenario, we can just fall back to the default scroll-to-item behavior.\n      finalizeScrollingTowardItem(for: scrollToItemContext, animated: true)\n      return\n    }\n\n    let maximumPerAnimationTickOffset = maximumPerAnimationTickOffset(\n      for: scrollAxis,\n      collectionView: collectionView)\n\n    // After 3 seconds, the scrolling reaches is maximum speed.\n    let secondsSinceAnimationStart = CACurrentMediaTime() - scrollToItemContext.animationStartTime\n    let offset = maximumPerAnimationTickOffset * CGFloat(min(secondsSinceAnimationStart / 3, 1))\n\n    // Apply this scroll animation \"tick's\" offset adjustment. This is what actually causes the\n    // scroll position to change, giving the illusion of smooth scrolling as this happens 60+ times\n    // per second.\n    let positionBeforeLayout = positionRelativeToVisibleBounds(\n      forTargetItemIndexPath: scrollToItemContext.targetIndexPath,\n      collectionView: collectionView)\n\n    switch positionBeforeLayout {\n    case .before:\n      collectionView.contentOffset[scrollAxis] -= offset\n\n    case .after:\n      collectionView.contentOffset[scrollAxis] += offset\n\n    // If the target item is partially or fully visible, then we don't need to apply a full `offset`\n    // adjustment of the content offset. Instead, we do some special logic to look at how close we\n    // currently are to the target origin, then change our content offset based on how far away we\n    // are from that target.\n    case .partiallyOrFullyVisible(let frame):\n      let targetContentOffset = targetContentOffsetForVisibleItem(\n        withFrame: frame,\n        inBounds: collectionView.bounds,\n        contentSize: collectionView.contentSize,\n        adjustedContentInset: collectionView.adjustedContentInset,\n        targetScrollPosition: scrollToItemContext.targetScrollPosition,\n        scrollAxis: scrollAxis)\n\n      let targetOffset = targetContentOffset[scrollAxis]\n      let currentOffset = collectionView.contentOffset[scrollAxis]\n      let distanceToTargetOffset = targetOffset - currentOffset\n\n      switch distanceToTargetOffset {\n      case ...(-1):\n        collectionView.contentOffset[scrollAxis] += max(-offset, distanceToTargetOffset)\n      case 1...:\n        collectionView.contentOffset[scrollAxis] += min(offset, distanceToTargetOffset)\n      default:\n        finalizeScrollingTowardItem(for: scrollToItemContext, animated: false)\n      }\n\n    case .none:\n      break\n    }\n\n    collectionView.setNeedsLayout()\n    collectionView.layoutIfNeeded()\n  }\n\n  private func scrollAxis(for collectionView: UICollectionView) -> ScrollAxis? {\n    let availableWidth = collectionView.bounds.width -\n      collectionView.adjustedContentInset.left -\n      collectionView.adjustedContentInset.right\n    let availableHeight = collectionView.bounds.height -\n      collectionView.adjustedContentInset.top -\n      collectionView.adjustedContentInset.bottom\n    let scrollsHorizontally = collectionView.contentSize.width > availableWidth\n    let scrollsVertically = collectionView.contentSize.height > availableHeight\n\n    switch (scrollsHorizontally: scrollsHorizontally, scrollsVertically: scrollsVertically) {\n    case (scrollsHorizontally: false, scrollsVertically: true):\n      return .vertical\n\n    case (scrollsHorizontally: true, scrollsVertically: false):\n      return .horizontal\n\n    case (scrollsHorizontally: true, scrollsVertically: true),\n         (scrollsHorizontally: false, scrollsVertically: false):\n      return nil\n    }\n  }\n\n  private func maximumPerAnimationTickOffset(\n    for scrollAxis: ScrollAxis,\n    collectionView: UICollectionView)\n    -> CGFloat\n  {\n    let offset: CGFloat\n    switch scrollAxis {\n    case .vertical: offset = collectionView.bounds.height\n    case .horizontal: offset = collectionView.bounds.width\n    }\n\n    return offset * 1.5\n  }\n\n  /// Returns the position (before, after, visible) of an item relative to the current viewport.\n  /// Note that the position (before, after, visible) is agnostic of scroll axis.\n  private func positionRelativeToVisibleBounds(\n    forTargetItemIndexPath targetIndexPath: IndexPath,\n    collectionView: UICollectionView)\n    -> PositionRelativeToVisibleBounds?\n  {\n    let indexPathsForVisibleItems = collectionView.indexPathsForVisibleItems.sorted()\n\n    if let targetItemFrame = collectionView.layoutAttributesForItem(at: targetIndexPath)?.frame {\n      return .partiallyOrFullyVisible(frame: targetItemFrame)\n    } else if\n      let firstVisibleIndexPath = indexPathsForVisibleItems.first,\n      targetIndexPath < firstVisibleIndexPath\n    {\n      return .before\n    } else if\n      let lastVisibleIndexPath = indexPathsForVisibleItems.last,\n      targetIndexPath > lastVisibleIndexPath\n    {\n      return .after\n    } else {\n      EpoxyLogger.shared.assertionFailure(\n        \"Could not find a position relative to the visible bounds for item at \\(targetIndexPath)\")\n      return nil\n    }\n  }\n\n  /// If a scroll position is not specified, this function is called to find the closest scroll\n  /// position to make the item as visible as possible. If the item is already completely visible,\n  /// this function returns `nil`.\n  private func closestRestingScrollPosition(\n    forTargetItemIndexPath targetIndexPath: IndexPath,\n    collectionView: UICollectionView)\n    -> UICollectionView.ScrollPosition?\n  {\n    guard let scrollAxis = scrollAxis(for: collectionView) else {\n      return nil\n    }\n\n    let positionRelativeToVisibleBounds = positionRelativeToVisibleBounds(\n      forTargetItemIndexPath: targetIndexPath,\n      collectionView: collectionView)\n\n    let insetBounds = collectionView.bounds.inset(by: collectionView.adjustedContentInset)\n\n    switch (scrollAxis, positionRelativeToVisibleBounds) {\n    case (.vertical, .before):\n      return .top\n    case (.vertical, .after):\n      return .bottom\n    case (.vertical, .partiallyOrFullyVisible(let itemFrame)):\n      guard !insetBounds.contains(itemFrame) else { return nil }\n      return itemFrame.midY < insetBounds.midY ? .top : .bottom\n    case (.horizontal, .before):\n      return .left\n    case (.horizontal, .after):\n      return .right\n    case (.horizontal, .partiallyOrFullyVisible(let itemFrame)):\n      guard !insetBounds.contains(itemFrame) else { return nil }\n      return itemFrame.midX < insetBounds.midX ? .left : .right\n    default:\n      EpoxyLogger.shared.assertionFailure(\"Unsupported scroll position.\")\n      return nil\n    }\n  }\n\n  /// Returns the correct content offset for a scroll-to-item action for the current viewport.\n  ///\n  /// This will be used to determine how much farther we need to programmatically scroll on each\n  /// animation tick.\n  private func targetContentOffsetForVisibleItem(\n    withFrame itemFrame: CGRect,\n    inBounds bounds: CGRect,\n    contentSize: CGSize,\n    adjustedContentInset: UIEdgeInsets,\n    targetScrollPosition: UICollectionView.ScrollPosition,\n    scrollAxis: ScrollAxis)\n    -> CGPoint\n  {\n    let itemPosition, itemSize, viewportSize, minContentOffset, maxContentOffset: CGFloat\n    let visibleBounds = bounds.inset(by: adjustedContentInset)\n    switch scrollAxis {\n    case .vertical:\n      itemPosition = itemFrame.minY\n      itemSize = itemFrame.height\n      viewportSize = visibleBounds.height\n      minContentOffset = -adjustedContentInset.top\n      maxContentOffset = -adjustedContentInset.top + contentSize.height - visibleBounds.height\n    case .horizontal:\n      itemPosition = itemFrame.minX\n      itemSize = itemFrame.width\n      viewportSize = visibleBounds.width\n      minContentOffset = -adjustedContentInset.left\n      maxContentOffset = -adjustedContentInset.left + contentSize.width - visibleBounds.width\n    }\n\n    let newOffset: CGFloat\n    switch targetScrollPosition {\n    case .top, .left:\n      newOffset = itemPosition + minContentOffset\n    case .bottom, .right:\n      newOffset = itemPosition + itemSize - viewportSize + minContentOffset\n    case .centeredVertically, .centeredHorizontally:\n      newOffset = itemPosition + (itemSize / 2) - (viewportSize / 2) + minContentOffset\n    default:\n      EpoxyLogger.shared.assertionFailure(\"Unsupported scroll position.\")\n      return itemFrame.origin\n    }\n\n    let clampedOffset = min(max(newOffset, minContentOffset), maxContentOffset)\n\n    var targetOffset = itemFrame.origin\n    targetOffset[scrollAxis] = clampedOffset\n    return targetOffset\n  }\n\n}\n\n// MARK: - ScrollToItemContext\n\nprivate struct ScrollToItemContext {\n  let targetIndexPath: IndexPath\n  let targetScrollPosition: UICollectionView.ScrollPosition\n  let animationStartTime: CFTimeInterval\n}\n\n// MARK: - ScrollAxis\n\nprivate enum ScrollAxis {\n  case vertical\n  case horizontal\n}\n\n// MARK: - PositionRelativeToVisibleBounds\n\nprivate enum PositionRelativeToVisibleBounds {\n  case before\n  case after\n  case partiallyOrFullyVisible(frame: CGRect)\n}\n\n// MARK: - CGPoint\n\nextension CGPoint {\n  fileprivate subscript(axis: ScrollAxis) -> CGFloat {\n    get {\n      switch axis {\n      case .vertical: return y\n      case .horizontal: return x\n      }\n    }\n    set {\n      switch axis {\n      case .vertical: y = newValue\n      case .horizontal: x = newValue\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Epoxy/DataIDProviding.swift",
    "content": "// Created by eric_horacek on 12/1/20.\n// Copyright © 2020 Airbnb Inc. All rights reserved.\n\n// MARK: - DataIDProviding\n\n/// The capability of providing a stable data identifier with an erased type.\n///\n/// While it has similar semantics, this type cannot inherit from `Identifiable` as this would give\n/// it an associated type, which would cause the `keyPath` used in its `EpoxyModelProperty` to not\n/// be stable across types if written as `\\Self.dataID` since the `KeyPath` `Root` would be\n/// different for each type.\n///\n/// - SeeAlso: `Identifiable`.\npublic protocol DataIDProviding {\n  /// A stable identifier that uniquely identifies this instance, with its typed erased.\n  ///\n  /// Defaults to `DefaultDataID.noneProvided` if no data ID is provided.\n  var dataID: AnyHashable { get }\n}\n\n// MARK: - EpoxyModeled\n\nextension EpoxyModeled where Self: DataIDProviding {\n\n  // MARK: Public\n\n  /// A stable identifier that uniquely identifies this model, with its typed erased.\n  public var dataID: AnyHashable {\n    get { self[dataIDProperty] }\n    set { self[dataIDProperty] = newValue }\n  }\n\n  /// Returns a copy of this model with the ID replaced with the provided ID.\n  public func dataID(_ value: AnyHashable) -> Self {\n    copy(updating: dataIDProperty, to: value)\n  }\n\n  // MARK: Private\n\n  private var dataIDProperty: EpoxyModelProperty<AnyHashable> {\n    EpoxyModelProperty(\n      keyPath: \\DataIDProviding.dataID,\n      defaultValue: DefaultDataID.noneProvided,\n      updateStrategy: .replace)\n  }\n}\n\n// MARK: - DefaultDataID\n\n/// The default data ID when none is provided.\npublic enum DefaultDataID: Hashable, CustomDebugStringConvertible {\n  case noneProvided\n\n  public var debugDescription: String {\n    \"DefaultDataID.noneProvided\"\n  }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Epoxy/EpoxyIntrinsicContentSizeInvalidator.swift",
    "content": "// Created by matthew_cheok on 11/19/21.\n// Copyright © 2021 Airbnb Inc. All rights reserved.\n\nimport SwiftUI\n\n// MARK: - EpoxyIntrinsicContentSizeInvalidator\n\n/// Allows the SwiftUI view contained in an Epoxy model to request the invalidation of\n/// the container's intrinsic content size.\n///\n/// ```\n/// @Environment(\\.epoxyIntrinsicContentSizeInvalidator) var invalidateIntrinsicContentSize\n///\n/// var body: some View {\n///   ...\n///   .onChange(of: size) {\n///     invalidateIntrinsicContentSize()\n///   }\n/// }\n/// ```\npublic struct EpoxyIntrinsicContentSizeInvalidator {\n  let invalidate: () -> Void\n\n  public func callAsFunction() {\n    invalidate()\n  }\n}\n\n// MARK: - EnvironmentValues\n\nextension EnvironmentValues {\n  /// A means of invalidating the intrinsic content size of the parent `EpoxySwiftUIHostingView`.\n  public var epoxyIntrinsicContentSizeInvalidator: EpoxyIntrinsicContentSizeInvalidator {\n    get { self[EpoxyIntrinsicContentSizeInvalidatorKey.self] }\n    set { self[EpoxyIntrinsicContentSizeInvalidatorKey.self] = newValue }\n  }\n}\n\n// MARK: - EpoxyIntrinsicContentSizeInvalidatorKey\n\nprivate struct EpoxyIntrinsicContentSizeInvalidatorKey: EnvironmentKey {\n  static let defaultValue = EpoxyIntrinsicContentSizeInvalidator(invalidate: { })\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Epoxy/EpoxySwiftUIHostingController.swift",
    "content": "// Created by eric_horacek on 10/8/21.\n// Copyright © 2021 Airbnb Inc. All rights reserved.\n\nimport SwiftUI\n\n#if !os(macOS)\n// MARK: - EpoxySwiftUIUIHostingController\n\n/// A `UIHostingController` that hosts SwiftUI views within an Epoxy container, e.g. an Epoxy\n/// `CollectionView`.\n///\n/// Exposed publicly to allow consumers to reason about these view controllers, e.g. to opt\n/// collection view cells out of automated view controller impression tracking.\n///\n/// - SeeAlso: `EpoxySwiftUIHostingView`\nopen class EpoxySwiftUIHostingController<Content: View>: UIHostingController<Content> {\n\n  // MARK: Lifecycle\n\n  /// Creates a `UIHostingController` that optionally ignores the `safeAreaInsets` when laying out\n  /// its contained `RootView`.\n  public convenience init(rootView: Content, ignoreSafeArea: Bool) {\n    self.init(rootView: rootView)\n\n    // We unfortunately need to call a private API to disable the safe area. We can also accomplish\n    // this by dynamically subclassing this view controller's view at runtime and overriding its\n    // `safeAreaInsets` property and returning `.zero`. An implementation of that logic is\n    // available in this file in the `2d28b3181cca50b89618b54836f7a9b6e36ea78e` commit if this API\n    // no longer functions in future SwiftUI versions.\n    _disableSafeArea = ignoreSafeArea\n  }\n\n  // MARK: Open\n\n  open override func viewDidLoad() {\n    super.viewDidLoad()\n\n    // A `UIHostingController` has a system background color by default as it's typically used in\n    // full-screen use cases. Since we're using this view controller to place SwiftUI views within\n    // other view controllers we default the background color to clear so we can see the views\n    // below, e.g. to draw highlight states in a `CollectionView`.\n    view.backgroundColor = .clear\n  }\n}\n#endif\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Epoxy/EpoxySwiftUIHostingView.swift",
    "content": "// Created by eric_horacek on 9/16/21.\n// Copyright © 2021 Airbnb Inc. All rights reserved.\n\nimport Combine\nimport SwiftUI\n\n#if !os(macOS)\n\n// MARK: - SwiftUIHostingViewReuseBehavior\n\n/// The reuse behavior of an `EpoxySwiftUIHostingView`.\npublic enum SwiftUIHostingViewReuseBehavior: Hashable {\n  /// Instances of a `EpoxySwiftUIHostingView` with `RootView`s of same type can be reused within\n  /// the Epoxy container.\n  ///\n  /// This is the default reuse behavior.\n  case reusable\n  /// Instances of a `EpoxySwiftUIHostingView` with `RootView`s of same type can only reused within\n  /// the Epoxy container when they have identical `reuseID`s.\n  case unique(reuseID: AnyHashable)\n}\n\n// MARK: - CallbackContextEpoxyModeled\n\nextension CallbackContextEpoxyModeled\n  where\n  Self: WillDisplayProviding & DidEndDisplayingProviding,\n  CallbackContext: ViewProviding & AnimatedProviding\n{\n  /// Updates the appearance state of a `EpoxySwiftUIHostingView` in coordination with the\n  /// `willDisplay` and `didEndDisplaying` callbacks of this `EpoxyableModel`.\n  ///\n  /// - Note: You should only need to call then from the implementation of a concrete\n  ///   `EpoxyableModel` convenience vendor method, e.g. `SwiftUI.View.itemModel(…)`.\n  public func linkDisplayLifecycle<RootView: View>() -> Self\n    where\n    CallbackContext.View == EpoxySwiftUIHostingView<RootView>\n  {\n    willDisplay { context in\n      context.view.handleWillDisplay(animated: context.animated)\n    }\n    .didEndDisplaying { context in\n      context.view.handleDidEndDisplaying(animated: context.animated)\n    }\n  }\n}\n\n// MARK: - EpoxySwiftUIHostingView\n\n/// A `UIView` that hosts a SwiftUI view within an Epoxy container, e.g. an Epoxy `CollectionView`.\n///\n/// Wraps an `EpoxySwiftUIHostingController` and adds it as a child view controller to the next\n/// ancestor view controller in the hierarchy.\n///\n/// There's a private API that accomplishes this same behavior without needing a `UIViewController`:\n/// `_UIHostingView`, but we can't safely use it as 1) the behavior may change out from under us, 2)\n/// the API is private and 3) the `_UIHostingView` doesn't not accept setting a new `View` instance.\n///\n/// - SeeAlso: `EpoxySwiftUIHostingController`\npublic final class EpoxySwiftUIHostingView<RootView: View>: UIView, EpoxyableView {\n\n  // MARK: Lifecycle\n\n  public init(style: Style) {\n    // Ignore the safe area to ensure the view isn't laid out incorrectly when being sized while\n    // overlapping the safe area.\n    epoxyContent = EpoxyHostingContent(rootView: style.initialContent.rootView)\n    viewController = EpoxySwiftUIHostingController(\n      rootView: .init(content: epoxyContent, environment: epoxyEnvironment),\n      ignoreSafeArea: style.ignoreSafeArea)\n\n    dataID = style.initialContent.dataID ?? DefaultDataID.noneProvided as AnyHashable\n\n    super.init(frame: .zero)\n\n    epoxyEnvironment.intrinsicContentSizeInvalidator = .init(invalidate: { [weak self] in\n      self?.viewController.view.invalidateIntrinsicContentSize()\n\n      // Inform the enclosing collection view that the size has changed, if we're contained in one,\n      // allowing the cell to resize.\n      //\n      // On iOS 16+, we could call `invalidateIntrinsicContentSize()` on the enclosing collection\n      // view cell instead, but that currently causes visual artifacts with `MagazineLayout`. The\n      // better long term fix is likely to switch to `UIHostingConfiguration` on iOS 16+ anyways.\n      if let enclosingCollectionView = self?.superview?.superview?.superview as? UICollectionView {\n        enclosingCollectionView.collectionViewLayout.invalidateLayout()\n      }\n    })\n    layoutMargins = .zero\n  }\n\n  @available(*, unavailable)\n  required init?(coder _: NSCoder) {\n    fatalError(\"init(coder:) has not been implemented\")\n  }\n\n  // MARK: Public\n\n  public struct Style: Hashable {\n\n    // MARK: Lifecycle\n\n    public init(\n      reuseBehavior: SwiftUIHostingViewReuseBehavior,\n      initialContent: Content,\n      ignoreSafeArea: Bool = true)\n    {\n      self.reuseBehavior = reuseBehavior\n      self.initialContent = initialContent\n      self.ignoreSafeArea = ignoreSafeArea\n    }\n\n    // MARK: Public\n\n    public var reuseBehavior: SwiftUIHostingViewReuseBehavior\n    public var initialContent: Content\n    public var ignoreSafeArea: Bool\n\n    public static func == (lhs: Style, rhs: Style) -> Bool {\n      lhs.reuseBehavior == rhs.reuseBehavior\n    }\n\n    public func hash(into hasher: inout Hasher) {\n      hasher.combine(reuseBehavior)\n    }\n  }\n\n  public struct Content: Equatable {\n    public init(rootView: RootView, dataID: AnyHashable?) {\n      self.rootView = rootView\n      self.dataID = dataID\n    }\n\n    public var rootView: RootView\n    public var dataID: AnyHashable?\n\n    public static func == (_: Content, _: Content) -> Bool {\n      // The content should never be equal since we need the `rootView` to be updated on every\n      // content change.\n      false\n    }\n  }\n\n  public override func didMoveToWindow() {\n    super.didMoveToWindow()\n\n    // Having our window set is an indicator that we should try adding our `viewController` as a\n    // child. We try this from a few other places to cover all of our bases.\n    addViewControllerIfNeededAndReady()\n  }\n\n  public override func didMoveToSuperview() {\n    super.didMoveToSuperview()\n\n    // Having our superview set is an indicator that we should try adding our `viewController` as a\n    // child. We try this from a few other places to cover all of our bases.\n    //\n    // Previously, we did not implement this function, and instead relied on `didMoveToWindow` being\n    // called to know when to attempt adding our `viewController` as a child. This resulted in a\n    // cell sizing issue, where the cell would return an estimated size. This was due to a timing\n    // issue with adding our `viewController` as a child. The order of events that caused the bug is\n    // as follows:\n    // 1. `collectionView(_:cellForItemAt:)` is called\n    // 2. An `EpoxySwiftUIHostingView` is created via `makeView()`\n    // 3. The hosting view is added as a subview of, and constrained to, the cell's `contentView`\n    // via a call to `setViewIfNeeded(view:)`\n    // 4. The hosting view's `didMoveToSuperview` function is called, but prior to this change, we\n    //    did nothing in this function\n    // 5. We return from `collectionView(_:cellForItemAt:)`\n    // 6. `UICollectionView` calls the cell's `preferredLayoutAttributesFitting:` function, which\n    //    returns an estimated size\n    // 7. The hosting view's `didMoveToWindow` function is called, and we finally add our\n    //    `viewController` as a child\n    // 8. No additional sizing attempt is made by `UICollectionViewFlowLayout` or `MagazineLayout`\n    //    (for some reason compositional layout recovers)\n    //\n    // A reliable repro case for this bug is the following setup:\n    // 1. Have a tab bar controller with two tabs - the first containing an Epoxy collection view,\n    //    the second containing nothing\n    // 2. Have a reload function on the first view controller that sets one section with a few\n    //    SwiftUI items (`Color.red.frame(width: 300, height: 300`).itemModel(dataID: ...)`)\n    // 3. Switch away from the tab containing the collection view\n    // 4. Call the reload function on the collection view on the tab that's no longer visible\n    // 4. Upon returning to the first tab, the collection view will contain incorrectly sized cells\n    addViewControllerIfNeededAndReady()\n  }\n\n  public func setContent(_ content: Content, animated _: Bool) {\n    // This triggers a change in the observed `EpoxyHostingContent` object and allows the\n    // propagation of the SwiftUI transaction, instead of just replacing the `rootView`.\n    epoxyContent.rootView = content.rootView\n    dataID = content.dataID ?? DefaultDataID.noneProvided as AnyHashable\n\n    // The view controller must be added to the view controller hierarchy to measure its content.\n    addViewControllerIfNeededAndReady()\n\n    // We need to layout the view to ensure it gets resized properly when cells are re-used\n    viewController.view.setNeedsLayout()\n    viewController.view.layoutIfNeeded()\n\n    // This is required to ensure that views with new content are properly resized.\n    viewController.view.invalidateIntrinsicContentSize()\n  }\n\n  public override func layoutMarginsDidChange() {\n    super.layoutMarginsDidChange()\n\n    let margins = layoutMargins\n    switch effectiveUserInterfaceLayoutDirection {\n    case .rightToLeft:\n      epoxyEnvironment.layoutMargins = .init(\n        top: margins.top,\n        leading: margins.right,\n        bottom: margins.bottom,\n        trailing: margins.left)\n    case .leftToRight:\n      fallthrough\n    @unknown default:\n      epoxyEnvironment.layoutMargins = .init(\n        top: margins.top,\n        leading: margins.left,\n        bottom: margins.bottom,\n        trailing: margins.right)\n    }\n\n    // Allow the layout margins update to fully propagate through to the SwiftUI View before\n    // invalidating the layout.\n    DispatchQueue.main.async {\n      self.viewController.view.invalidateIntrinsicContentSize()\n    }\n  }\n\n  public func handleWillDisplay(animated: Bool) {\n    guard state != .appeared, window != nil else { return }\n    transition(to: .appearing(animated: animated))\n    transition(to: .appeared)\n  }\n\n  public func handleDidEndDisplaying(animated: Bool) {\n    guard state != .disappeared else { return }\n    transition(to: .disappearing(animated: animated))\n    transition(to: .disappeared)\n  }\n\n  // MARK: Private\n\n  private let viewController: EpoxySwiftUIHostingController<EpoxyHostingWrapper<RootView>>\n  private let epoxyContent: EpoxyHostingContent<RootView>\n  private let epoxyEnvironment = EpoxyHostingEnvironment()\n  private var dataID: AnyHashable\n  private var state: AppearanceState = .disappeared\n\n  /// Updates the appearance state of the `viewController`.\n  private func transition(to state: AppearanceState) {\n    guard state != self.state else { return }\n\n    // See \"Handling View-Related Notifications\" section for the state machine diagram.\n    // https://developer.apple.com/documentation/uikit/uiviewcontroller\n    switch (to: state, from: self.state) {\n    case (to: .appearing(let animated), from: .disappeared):\n      viewController.beginAppearanceTransition(true, animated: animated)\n      addViewControllerIfNeededAndReady()\n    case (to: .disappearing(let animated), from: .appeared):\n      viewController.beginAppearanceTransition(false, animated: animated)\n    case (to: .disappeared, from: .disappearing):\n      removeViewControllerIfNeeded()\n    case (to: .appeared, from: .appearing):\n      viewController.endAppearanceTransition()\n    case (to: .disappeared, from: .appeared):\n      viewController.beginAppearanceTransition(false, animated: true)\n      removeViewControllerIfNeeded()\n    case (to: .appeared, from: .disappearing(let animated)):\n      viewController.beginAppearanceTransition(true, animated: animated)\n      viewController.endAppearanceTransition()\n    case (to: .disappeared, from: .appearing(let animated)):\n      viewController.beginAppearanceTransition(false, animated: animated)\n      removeViewControllerIfNeeded()\n    case (to: .appeared, from: .disappeared):\n      viewController.beginAppearanceTransition(true, animated: false)\n      addViewControllerIfNeededAndReady()\n      viewController.endAppearanceTransition()\n    case (to: .appearing(let animated), from: .appeared):\n      viewController.beginAppearanceTransition(false, animated: animated)\n      viewController.beginAppearanceTransition(true, animated: animated)\n    case (to: .appearing(let animated), from: .disappearing):\n      viewController.beginAppearanceTransition(true, animated: animated)\n    case (to: .disappearing(let animated), from: .disappeared):\n      viewController.beginAppearanceTransition(true, animated: animated)\n      addViewControllerIfNeededAndReady()\n      viewController.beginAppearanceTransition(false, animated: animated)\n    case (to: .disappearing(let animated), from: .appearing):\n      viewController.beginAppearanceTransition(false, animated: animated)\n    case (to: .appearing, from: .appearing),\n         (to: .appeared, from: .appeared),\n         (to: .disappearing, from: .disappearing),\n         (to: .disappeared, from: .disappeared):\n      // This should never happen since we guard on identical states.\n      EpoxyLogger.shared.assertionFailure(\"Impossible state change from \\(self.state) to \\(state)\")\n    }\n\n    self.state = state\n  }\n\n  private func addViewControllerIfNeededAndReady() {\n    guard let superview = superview else {\n      // If our superview is nil, we're too early and have no chance of finding a view controller\n      // up the responder chain.\n      return\n    }\n\n    // This isn't great, and means that we're going to add this view controller as a child view\n    // controller of a view controller somewhere else in the hierarchy, which the author of that\n    // view controller may not be expecting. However there's not really a better pathway forward\n    // here without requiring a view controller instance to be passed all the way through, which is\n    // both burdensome and error-prone.\n    let nextViewController = superview.next(UIViewController.self)\n\n    if nextViewController == nil, window == nil {\n      // If the view controller is nil, but our window is also nil, we're a bit too early. It's\n      // possible to find a view controller up the responder chain without having a window, which is\n      // why we don't guard or assert on having a window.\n      return\n    }\n\n    guard let nextViewController = nextViewController else {\n      // One of the two previous early returns should have prevented us from getting here.\n      EpoxyLogger.shared.assertionFailure(\n        \"\"\"\n        Unable to add a UIHostingController view, could not locate a UIViewController in the \\\n        responder chain for view with ID \\(dataID) of type \\(RootView.self).\n        \"\"\")\n      return\n    }\n\n    guard viewController.parent !== nextViewController else { return }\n\n    // If in a different parent, we need to first remove from it before we add.\n    if viewController.parent != nil {\n      removeViewControllerIfNeeded()\n    }\n\n    addViewController(to: nextViewController)\n\n    state = .appeared\n  }\n\n  private func addViewController(to parent: UIViewController) {\n    viewController.willMove(toParent: parent)\n\n    parent.addChild(viewController)\n\n    addSubview(viewController.view)\n\n    viewController.view.translatesAutoresizingMaskIntoConstraints = false\n    NSLayoutConstraint.activate([\n      viewController.view.leadingAnchor.constraint(equalTo: leadingAnchor),\n      // Pining the hosting view controller to layoutMarginsGuide ensures the content respects the top safe area\n      // when installed inside a `TopBarContainer`\n      viewController.view.topAnchor.constraint(equalTo: topAnchor),\n      viewController.view.trailingAnchor.constraint(equalTo: trailingAnchor),\n      // Pining the hosting view controller to layoutMarginsGuide ensures the content respects the bottom safe area\n      // when installed inside a `BottomBarContainer`\n      viewController.view.bottomAnchor.constraint(equalTo: bottomAnchor),\n    ])\n\n    viewController.didMove(toParent: parent)\n  }\n\n  private func removeViewControllerIfNeeded() {\n    guard viewController.parent != nil else { return }\n\n    viewController.willMove(toParent: nil)\n    viewController.view.removeFromSuperview()\n    viewController.removeFromParent()\n    viewController.didMove(toParent: nil)\n  }\n}\n\n// MARK: - AppearanceState\n\n/// The appearance state of a `EpoxySwiftUIHostingController` contained within a\n/// `EpoxySwiftUIHostingView`.\nprivate enum AppearanceState: Equatable {\n  case appearing(animated: Bool)\n  case appeared\n  case disappearing(animated: Bool)\n  case disappeared\n}\n\n// MARK: - UIResponder\n\nextension UIResponder {\n  /// Recursively traverses the responder chain upwards from this responder to its next responder\n  /// until the a responder of the given type is located, else returns `nil`.\n  @nonobjc\n  fileprivate func next<ResponderType>(_ type: ResponderType.Type) -> ResponderType? {\n    self as? ResponderType ?? next?.next(type)\n  }\n}\n\n// MARK: - EpoxyHostingContent\n\n/// The object that is used to communicate changes in the root view to the\n/// `EpoxySwiftUIHostingController`.\nfinal class EpoxyHostingContent<RootView: View>: ObservableObject {\n\n  // MARK: Lifecycle\n\n  init(rootView: RootView) {\n    _rootView = .init(wrappedValue: rootView)\n  }\n\n  // MARK: Internal\n\n  @Published var rootView: RootView\n}\n\n// MARK: - EpoxyHostingEnvironment\n\n/// The object that is used to communicate values to SwiftUI views within an\n/// `EpoxySwiftUIHostingController`, e.g. layout margins.\nfinal class EpoxyHostingEnvironment: ObservableObject {\n  @Published var layoutMargins = EdgeInsets()\n  @Published var intrinsicContentSizeInvalidator = EpoxyIntrinsicContentSizeInvalidator(invalidate: { })\n}\n\n// MARK: - EpoxyHostingWrapper\n\n/// The wrapper view that is used to communicate values to SwiftUI views within an\n/// `EpoxySwiftUIHostingController`, e.g. layout margins.\nstruct EpoxyHostingWrapper<Content: View>: View {\n  @ObservedObject var content: EpoxyHostingContent<Content>\n  @ObservedObject var environment: EpoxyHostingEnvironment\n\n  var body: some View {\n    content.rootView\n      .environment(\\.epoxyLayoutMargins, environment.layoutMargins)\n      .environment(\\.epoxyIntrinsicContentSizeInvalidator, environment.intrinsicContentSizeInvalidator)\n  }\n}\n\n#endif\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Epoxy/EpoxySwiftUILayoutMargins.swift",
    "content": "// Created by eric_horacek on 10/8/21.\n// Copyright © 2021 Airbnb Inc. All rights reserved.\n\nimport SwiftUI\n\n// MARK: - View\n\nextension View {\n  /// Applies the layout margins from the parent `EpoxySwiftUIHostingView` to this `View`, if there\n  /// are any.\n  ///\n  /// Can be used to have a background in SwiftUI underlap the safe area within a bar installer, for\n  /// example.\n  ///\n  /// These margins are propagated via the `EnvironmentValues.epoxyLayoutMargins`.\n  public func epoxyLayoutMargins() -> some View {\n    modifier(EpoxyLayoutMarginsPadding())\n  }\n}\n\n// MARK: - EnvironmentValues\n\nextension EnvironmentValues {\n  /// The layout margins of the parent `EpoxySwiftUIHostingView`, else zero if there is none.\n  public var epoxyLayoutMargins: EdgeInsets {\n    get { self[EpoxyLayoutMarginsKey.self] }\n    set { self[EpoxyLayoutMarginsKey.self] = newValue }\n  }\n}\n\n// MARK: - EpoxyLayoutMarginsKey\n\nprivate struct EpoxyLayoutMarginsKey: EnvironmentKey {\n  static let defaultValue = EdgeInsets()\n}\n\n// MARK: - EpoxyLayoutMarginsPadding\n\n/// A view modifier that applies the layout margins from an enclosing `EpoxySwiftUIHostingView` to\n/// the modified `View`.\nprivate struct EpoxyLayoutMarginsPadding: ViewModifier {\n  @Environment(\\.epoxyLayoutMargins) var epoxyLayoutMargins\n\n  func body(content: Content) -> some View {\n    content.padding(epoxyLayoutMargins)\n  }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Epoxy/README.md",
    "content": "# Epoxy-ios Fork\n\nThis repository contains selected files from the Epoxy iOS project, a suite of Swift libraries for building complex and reactive user interfaces on iOS.\n\n## Source\n\nThe files in this directory were copied from the official Epoxy iOS project by Airbnb. The specific commit used for this fork can be found here: [Epoxy iOS Commit](https://github.com/airbnb/epoxy-ios/blob/ecee1ace58d58e3cc918a2dea28095de713b1112).\n\n## License\n\nEpoxy is released under the Apache License 2.0. For the full license text, see [LICENSE](https://github.com/airbnb/epoxy-ios/blob/ecee1ace58d58e3cc918a2dea28095de713b1112/LICENSE).\n\n## Usage\n\nThis fork includes select components from the Epoxy iOS project. It is intended for specific use cases where only certain functionalities are required, rather than the full library.\n\n## Acknowledgements\n\nSpecial thanks to Airbnb and the contributors of the Epoxy iOS project for providing a robust and flexible foundation for iOS UI development.\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Epoxy/_Compatibility.swift",
    "content": "//\n//  Compatibility.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-18.\n//\n\nimport VLogging\nimport Logging\n\nstruct EpoxyLogger {\n    static let shared = EpoxyLogger()\n\n    func warn(_ message: @autoclosure () -> Logger.Message) {\n        logger.warning(message())\n    }\n\n    @inlinable public func assertionFailure(_ message: @autoclosure () -> String = String(), file: StaticString = #file, line: UInt = #line) {\n        Swift.assertionFailure(message(), file: file, line: line)\n    }\n}\n\npublic protocol EpoxyModeled {\n    subscript<Property>(property: EpoxyModelProperty<Property>) -> Property { get set }\n    func copy<Value>(updating property: EpoxyModelProperty<Value>, to value: Value) -> Self\n}\n\npublic struct EpoxyModelProperty<Value> {\n    enum UpdateStrategy {\n        case replace\n    }\n\n    init<Model>(\n        keyPath: KeyPath<Model, Value>,\n        defaultValue: @escaping @autoclosure () -> Value,\n        updateStrategy: UpdateStrategy)\n    {\n    }\n}\n\nprotocol EpoxyableView {}\n\npublic protocol CallbackContextEpoxyModeled {\n    associatedtype CallbackContext: ViewProviding\n}\n\npublic protocol WillDisplayProviding: CallbackContextEpoxyModeled {\n    func willDisplay(_ value: (CallbackContext) -> Void) -> Self\n}\n\npublic protocol DidEndDisplayingProviding: CallbackContextEpoxyModeled {\n    func didEndDisplaying(_ value: (CallbackContext) -> Void) -> Self\n}\n\npublic protocol ViewProviding {\n    associatedtype View\n    var view: View { get }\n}\n\npublic protocol AnimatedProviding {\n    var animated: Bool { get }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Miscellaneous/AsyncAction.swift",
    "content": "//\n//  AsyncAction.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-06-22.\n//\n\nimport SwiftUI\n\npublic typealias AsyncAction = @MainActor @Sendable () async -> Void\n\npublic typealias ItemAction<Item> = @MainActor @Sendable (Item) -> Void\npublic typealias AsyncItemAction<Item> = @MainActor @Sendable (Item) async -> Void\n\npublic struct AsyncButton<Label: View>: View {\n    // MARK: Lifecycle\n\n    public init(action: @escaping AsyncAction, label: () -> Label) {\n        self.action = action\n        self.label = label()\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        Button {\n            // Cancel the previous task\n            currentTask?.cancel()\n\n            // Start a new task\n            currentTask = Task {\n                await action()\n            }\n        } label: {\n            label\n        }\n    }\n\n    // MARK: Private\n\n    private let action: AsyncAction\n    private let label: Label\n\n    @State private var currentTask: Task<Void, Never>? = nil\n}\n\nextension View {\n    public func onAsyncTapGesture(count: Int = 1, asyncAction action: @escaping AsyncAction) -> some View {\n        modifier(AsyncTapGestureModifier(count: count, action: action))\n    }\n}\n\nprivate struct AsyncTapGestureModifier: ViewModifier {\n    // MARK: Internal\n\n    let count: Int\n    let action: AsyncAction\n\n    func body(content: Content) -> some View {\n        content.onTapGesture(count: count, perform: {\n            // Cancel the previous task\n            currentTask?.cancel()\n\n            // Start a new task\n            currentTask = Task {\n                await action()\n            }\n        })\n    }\n\n    // MARK: Private\n\n    @State private var currentTask: Task<Void, Never>? = nil\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Miscellaneous/BackgroundHighlightingStyle.swift",
    "content": "//\n//  BackgroundHighlightingStyle.swift\n//\n//\n//  Created by Afifi, Mohamed on 8/1/21.\n//\n\nimport SwiftUI\n\npublic struct BackgroundHighlightingStyle: ButtonStyle {\n    // MARK: Lifecycle\n\n    public init(highlightingColor: Color = .systemFill) {\n        self.highlightingColor = highlightingColor\n    }\n\n    // MARK: Public\n\n    public func makeBody(configuration: Configuration) -> some View {\n        configuration\n            .label\n            .background(configuration.isPressed ? highlightingColor : Color.clear)\n    }\n\n    // MARK: Internal\n\n    let highlightingColor: Color\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Miscellaneous/CustomButtonStyle.swift",
    "content": "//\n//  CustomButtonStyle.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-09-22.\n//\n\nimport SwiftUI\n\npublic struct CustomButtonStyle<Content: View>: ButtonStyle {\n    private let customize: (Configuration) -> Content\n\n    public init(@ViewBuilder customize: @escaping (Configuration) -> Content) {\n        self.customize = customize\n    }\n\n    public func makeBody(configuration: Configuration) -> some View {\n        customize(configuration)\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Miscellaneous/EdgeInsets++.swift",
    "content": "//\n//  EdgeInsets++.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-04.\n//\n\nimport SwiftUI\n\nextension EdgeInsets {\n    public static var zero: Self {\n        .init()\n    }\n}\n\nextension EdgeInsets: @retroactive Hashable {\n    public func hash(into hasher: inout Hasher) {\n        hasher.combine(leading)\n        hasher.combine(trailing)\n        hasher.combine(top)\n        hasher.combine(bottom)\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Miscellaneous/EditController.swift",
    "content": "//\n//  EditController.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-07-07.\n//\n\nimport Combine\nimport SwiftUI\n\n@MainActor\npublic final class EditController {\n    // MARK: Lifecycle\n\n    public init(\n        navigationItem: UINavigationItem,\n        reload: AnyPublisher<Void, Never>,\n        editMode: Binding<EditMode?>,\n        customItems: [UIBarButtonItem] = []\n    ) {\n        self.navigationItem = navigationItem\n        self.customItems = customItems\n        _editMode = editMode\n\n        reload\n            .receive(on: DispatchQueue.main)\n            .sink { [weak self] in\n                self?.updateEditButtonStateIfNeeded()\n            }\n            .store(in: &cancellables)\n    }\n\n    // MARK: Private\n\n    private let navigationItem: UINavigationItem\n    private var customItems: [UIBarButtonItem]\n    @Binding private var editMode: EditMode?\n    private var cancellables: Set<AnyCancellable> = []\n\n    private var buttonEditModeState: EditMode? {\n        didSet {\n            if oldValue != buttonEditModeState {\n                updateEditButton()\n            }\n        }\n    }\n\n    private var editButton: UIBarButtonItem? {\n        switch buttonEditModeState {\n        case .none:\n            return nil\n        case .some(let editMode):\n            if editMode.isEditing {\n                return UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(endEditing))\n            } else {\n                return UIBarButtonItem(barButtonSystemItem: .edit, target: self, action: #selector(startEditing))\n            }\n        }\n    }\n\n    private func updateEditButtonStateIfNeeded() {\n        buttonEditModeState = editMode\n    }\n\n    private func updateEditButton() {\n        if let editButton {\n            navigationItem.setRightBarButtonItems(customItems + [editButton], animated: true)\n        } else {\n            navigationItem.setRightBarButtonItems(customItems, animated: true)\n        }\n    }\n\n    @objc\n    private func startEditing() {\n        withAnimation {\n            editMode = .active\n        }\n    }\n\n    @objc\n    private func endEditing() {\n        withAnimation {\n            editMode = .inactive\n        }\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Miscellaneous/SwiftUIColor+extension.swift",
    "content": "//\n//  SwiftUIColor+extension.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 7/10/21.\n//  Copyright © 2021 Quran.com. All rights reserved.\n//\n\nimport SwiftUI\n\nextension Color {\n    public static var systemRed: Color {\n        .init(.systemRed)\n    }\n\n    public static var systemGreen: Color {\n        .init(.systemGreen)\n    }\n\n    public static var systemBlue: Color {\n        .init(.systemBlue)\n    }\n\n    public static var systemOrange: Color {\n        .init(.systemOrange)\n    }\n\n    public static var systemYellow: Color {\n        .init(.systemYellow)\n    }\n\n    public static var systemPink: Color {\n        .init(.systemPink)\n    }\n\n    public static var systemPurple: Color {\n        .init(.systemPurple)\n    }\n\n    public static var systemTeal: Color {\n        .init(.systemTeal)\n    }\n\n    public static var systemIndigo: Color {\n        .init(.systemIndigo)\n    }\n\n    public static var systemGray: Color {\n        .init(.systemGray)\n    }\n\n    public static var systemGray2: Color {\n        .init(.systemGray2)\n    }\n\n    public static var systemGray3: Color {\n        .init(.systemGray3)\n    }\n\n    public static var systemGray4: Color {\n        .init(.systemGray4)\n    }\n\n    public static var systemGray5: Color {\n        .init(.systemGray5)\n    }\n\n    public static var systemGray6: Color {\n        .init(.systemGray6)\n    }\n}\n\n/// Foreground colors for static text and related elements.\nextension Color {\n    /// The color for text labels that contain primary content.\n    public static var label: Color {\n        .init(.label)\n    }\n\n    /// The color for text labels that contain secondary content.\n    public static var secondaryLabel: Color {\n        .init(.secondaryLabel)\n    }\n\n    /// The color for text labels that contain tertiary content.\n    public static var tertiaryLabel: Color {\n        .init(.tertiaryLabel)\n    }\n\n    /// The color for text labels that contain quaternary content.\n    public static var quaternaryLabel: Color {\n        .init(.quaternaryLabel)\n    }\n}\n\nextension Color {\n    /// A foreground color for standard system links.\n    public static var link: Color {\n        .init(.link)\n    }\n\n    /// A forground color for separators (thin border or divider lines).\n    public static var separator: Color {\n        .init(.separator)\n    }\n\n    /// A forground color intended to look similar to `Color.separated`, but is guaranteed to be opaque, so it will.\n    public static var opaqueSeparator: Color {\n        .init(.opaqueSeparator)\n    }\n}\n\nextension Color {\n    /// The color for the main background of your interface.\n    public static var systemBackground: Color {\n        .init(.systemBackground)\n    }\n\n    /// The color for content layered on top of the main background.\n    public static var secondarySystemBackground: Color {\n        .init(.secondarySystemBackground)\n    }\n\n    /// The color for content layered on top of secondary backgrounds.\n    public static var tertiarySystemBackground: Color {\n        .init(.tertiarySystemBackground)\n    }\n\n    /// The color for the main background of your grouped interface.\n    public static var systemGroupedBackground: Color {\n        .init(.systemGroupedBackground)\n    }\n\n    /// The color for content layered on top of the main background of your grouped interface.\n    public static var secondarySystemGroupedBackground: Color {\n        .init(.secondarySystemGroupedBackground)\n    }\n\n    /// The color for content layered on top of secondary backgrounds of your grouped interface.\n    public static var tertiarySystemGroupedBackground: Color {\n        .init(.tertiarySystemGroupedBackground)\n    }\n}\n\n/// Fill colors for UI elements.\n/// These are meant to be used over the background colors, since their alpha component is less than 1.\nextension Color {\n    /// A color  appropriate for filling thin and small shapes.\n    ///\n    /// Example: The track of a slider.\n    public static var systemFill: Color {\n        .init(.systemFill)\n    }\n\n    /// A color appropriate for filling medium-size shapes.\n    ///\n    /// Example: The background of a switch.\n    public static var secondarySystemFill: Color {\n        .init(.secondarySystemFill)\n    }\n\n    /// A color appropriate for filling large shapes.\n    ///\n    /// Examples: Input fields, search bars, buttons.\n    public static var tertiarySystemFill: Color {\n        .init(.tertiarySystemFill)\n    }\n\n    /// A color appropriate for filling large areas containing complex content.\n    ///\n    /// Example: Expanded table cells.\n    public static var quaternarySystemFill: Color {\n        .init(.quaternarySystemFill)\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Miscellaneous/UIKitNavigator.swift",
    "content": "//\n//  UIKitNavigator.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-09-27.\n//\n\nimport SwiftUI\n\npublic final class UIKitNavigator {\n    public weak var viewController: UIViewController?\n    var navigationController: UINavigationController? {\n        if let navController = viewController as? UINavigationController {\n            navController\n        } else {\n            viewController?.navigationController\n        }\n    }\n}\n\nstruct UINavigatorKey: EnvironmentKey {\n    static var defaultValue: UIKitNavigator? = nil\n}\n\nextension EnvironmentValues {\n    public var uikitNavigator: UIKitNavigator? {\n        get { self[UINavigatorKey.self] }\n        set { self[UINavigatorKey.self] = newValue }\n    }\n}\n\nextension View {\n    public func enableUIKitNavigator() -> some View {\n        modifier(EnableUIKitNavigator())\n    }\n}\n\nprivate struct EnableUIKitNavigator: ViewModifier {\n    @State var navigator = UIKitNavigator()\n\n    func body(content: Content) -> some View {\n        content\n            .background(UIViewControllerParentReader(navigator: navigator))\n            .environment(\\.uikitNavigator, navigator)\n    }\n}\n\nprivate struct UIViewControllerParentReader: UIViewControllerRepresentable {\n    let navigator: UIKitNavigator\n\n    func makeUIViewController(context: Context) -> UIViewController {\n        ViewControllerReader(navigator: navigator)\n    }\n\n    func updateUIViewController(_ viewController: UIViewController, context: Context) {\n    }\n\n    private class ViewControllerReader: UIViewController {\n        let navigator: UIKitNavigator\n\n        init(navigator: UIKitNavigator) {\n            self.navigator = navigator\n            super.init(nibName: nil, bundle: nil)\n        }\n\n        @available(*, unavailable)\n        required init?(coder: NSCoder) {\n            fatalError(\"init(coder:) has not been implemented\")\n        }\n\n        override func didMove(toParent parent: UIViewController?) {\n            super.didMove(toParent: parent)\n            navigator.viewController = parent\n        }\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Miscellaneous/View+Task.swift",
    "content": "//\n//  View+Task.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-09-27.\n//\n\nimport SwiftUI\n\npublic struct TaskOnceModifier: ViewModifier {\n    @State private var started = false\n    private let priority: TaskPriority\n    private let action: @Sendable () async -> Void\n\n    public init(priority: TaskPriority, _ action: @escaping @Sendable () async -> Void) {\n        self.priority = priority\n        self.action = action\n    }\n\n    public func body(content: Content) -> some View {\n        content\n            .task(priority: priority) {\n                guard !started else {\n                    return\n                }\n                started = true\n                await action()\n            }\n    }\n}\n\nextension View {\n    @inlinable\n    public func taskOnce(\n        priority: TaskPriority = .userInitiated,\n        _ action: @escaping @Sendable () async -> Void\n    ) -> some View {\n        modifier(TaskOnceModifier(priority: priority, action))\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Miscellaneous/View+URL.swift",
    "content": "//\n//  View+URL.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-02-02.\n//\n\nimport SwiftUI\n\nextension View {\n    public func tryOpenURL(_ handler: @escaping (URL) -> OpenURLAction.Result) -> some View {\n        environment(\\.openURL, OpenURLAction(handler: handler))\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Miscellaneous/View+onSizeChange.swift",
    "content": "//\n//  View+onSizeChange.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-02-10.\n//\n\nimport SwiftUI\n\nextension View {\n    public func onSizeChange(_ body: @escaping (CGSize) -> Void) -> some View {\n        background {\n            GeometryReader { geometry in\n                Color.clear.preference(key: SizePreferenceKey.self, value: geometry.size)\n            }\n        }\n        .onPreferenceChange(SizePreferenceKey.self, perform: body)\n    }\n\n    public func onGlobalFrameChanged(_ body: @escaping (CGRect) -> Void) -> some View {\n        background {\n            GeometryReader { geometry in\n                Color.clear.preference(key: GlobalFramePreferenceKey.self, value: geometry.frame(in: .global))\n            }\n        }\n        .onPreferenceChange(GlobalFramePreferenceKey.self, perform: body)\n    }\n\n    public func onChangeWithInitial<V>(of value: V, perform: @escaping (_ newValue: V) -> Void) -> some View where V: Equatable {\n        onAppear {\n            perform(value)\n        }\n        .onChange(of: value, perform: perform)\n    }\n}\n\nprivate struct SizePreferenceKey: PreferenceKey {\n    static var defaultValue: CGSize = .zero\n    static func reduce(value: inout CGSize, nextValue: () -> CGSize) {}\n}\n\nprivate struct GlobalFramePreferenceKey: PreferenceKey {\n    static var defaultValue: CGRect = .zero\n    static func reduce(value: inout CGRect, nextValue: () -> CGRect) {}\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Miscellaneous/WrappingHStack.swift",
    "content": "//\n//  WrappingHStack.swift\n//  LayoutPlayground\n//\n//  Created by Konstantin Semianov on 11/30/22.\n//\n\n// From: https://github.com/ksemianov/WrappingHStack/blob/main/Sources/WrappingHStack/WrappingHStack.swift\n\nimport SwiftUI\n\n/// A view that arranges its subviews in horizontal line and wraps them to the next lines if necessary.\n@available(iOS 16.0, *)\npublic struct WrappingHStack: Layout {\n    /// A shared computation between `sizeThatFits` and `placeSubviews`.\n    public struct Cache {\n        /// The minimal size of the view.\n        var minSize: CGSize\n\n        /// The cached rows.\n        var rows: (Int, [Row])?\n    }\n\n    // MARK: Lifecycle\n\n    /// Creates a wrapping horizontal stack with the given spacings and alignment.\n    ///\n    /// - Parameters:\n    ///   - alignment: The guide for aligning the subviews in this stack. This guide has the same screen coordinate for every subview.\n    ///   - horizontalSpacing: The distance between adjacent subviews in a row or `nil` if you want the stack to choose a default distance.\n    ///   - verticalSpacing: The distance between consequtive rows or`nil` if you want the stack to choose a default distance.\n    ///   - fitContentWidth: Determines if the width of the stack should adjust to fit its content.\n    ///   - content: A view builder that creates the content of this stack.\n    @inlinable\n    public init(\n        alignment: Alignment = .center,\n        horizontalSpacing: CGFloat? = nil,\n        verticalSpacing: CGFloat? = nil,\n        fitContentWidth: Bool = false\n    ) {\n        self.alignment = alignment\n        self.horizontalSpacing = horizontalSpacing\n        self.verticalSpacing = verticalSpacing\n        self.fitContentWidth = fitContentWidth\n    }\n\n    // MARK: Public\n\n    public static var layoutProperties: LayoutProperties {\n        var properties = LayoutProperties()\n        properties.stackOrientation = .horizontal\n\n        return properties\n    }\n\n    /// The guide for aligning the subviews in this stack. This guide has the same screen coordinate for every subview.\n    public var alignment: Alignment\n\n    /// The distance between adjacent subviews in a row or `nil` if you want the stack to choose a default distance.\n    public var horizontalSpacing: CGFloat?\n\n    /// The distance between consequtive rows or`nil` if you want the stack to choose a default distance.\n    public var verticalSpacing: CGFloat?\n\n    /// Determines if the width of the stack should adjust to fit its content.\n    ///\n    /// If set to `true`, the stack's width will be based on its content rather than filling the available width.\n    /// If set to `false` (default), it will occupy the full available width.\n    public var fitContentWidth: Bool\n\n    public func makeCache(subviews: Subviews) -> Cache {\n        Cache(minSize: minSize(subviews: subviews))\n    }\n\n    public func updateCache(_ cache: inout Cache, subviews: Subviews) {\n        cache.minSize = minSize(subviews: subviews)\n    }\n\n    public func sizeThatFits(\n        proposal: ProposedViewSize,\n        subviews: Subviews,\n        cache: inout Cache\n    ) -> CGSize {\n        let rows = arrangeRows(proposal: proposal, subviews: subviews, cache: &cache)\n\n        if rows.isEmpty { return cache.minSize }\n\n        var width: CGFloat = rows.map(\\.width).reduce(.zero) { max($0, $1) }\n\n        if !fitContentWidth, let proposalWidth = proposal.width {\n            width = max(width, proposalWidth)\n        }\n\n        var height: CGFloat = .zero\n        if let lastRow = rows.last {\n            height = lastRow.yOffset + lastRow.height\n        }\n\n        return CGSize(width: width, height: height)\n    }\n\n    public func placeSubviews(\n        in bounds: CGRect,\n        proposal: ProposedViewSize,\n        subviews: Subviews,\n        cache: inout Cache\n    ) {\n        let rows = arrangeRows(proposal: proposal, subviews: subviews, cache: &cache)\n\n        let anchor = UnitPoint(alignment)\n\n        for row in rows {\n            for element in row.elements {\n                let x: CGFloat = element.xOffset + anchor.x * (bounds.width - row.width)\n                let y: CGFloat = row.yOffset + anchor.y * (row.height - element.size.height)\n                let point = CGPoint(x: x + bounds.minX, y: y + bounds.minY)\n\n                subviews[element.index].place(at: point, anchor: .topLeading, proposal: proposal)\n            }\n        }\n    }\n}\n\n@available(iOS 16.0, *)\nextension WrappingHStack {\n    struct Row {\n        var elements: [(index: Int, size: CGSize, xOffset: CGFloat)] = []\n        var yOffset: CGFloat = .zero\n        var width: CGFloat = .zero\n        var height: CGFloat = .zero\n    }\n\n    private func arrangeRows(\n        proposal: ProposedViewSize,\n        subviews: Subviews,\n        cache: inout Cache\n    ) -> [Row] {\n        if subviews.isEmpty {\n            return []\n        }\n\n        if cache.minSize.width > proposal.width ?? .infinity,\n           cache.minSize.height > proposal.height ?? .infinity\n        {\n            return []\n        }\n\n        let sizes = subviews.map { $0.sizeThatFits(proposal) }\n\n        let hash = computeHash(proposal: proposal, sizes: sizes)\n        if let (oldHash, oldRows) = cache.rows,\n           oldHash == hash\n        {\n            return oldRows\n        }\n\n        var currentX = CGFloat.zero\n        var currentRow = Row()\n        var rows = [Row]()\n\n        for index in subviews.indices {\n            var spacing = CGFloat.zero\n            if let previousIndex = currentRow.elements.last?.index {\n                spacing = horizontalSpacing(subviews[previousIndex], subviews[index])\n            }\n\n            let size = sizes[index]\n\n            if currentX + size.width + spacing > proposal.width ?? .infinity,\n               !currentRow.elements.isEmpty\n            {\n                currentRow.width = currentX\n                rows.append(currentRow)\n                currentRow = Row()\n                spacing = .zero\n                currentX = .zero\n            }\n\n            currentRow.elements.append((index, sizes[index], currentX + spacing))\n            currentX += size.width + spacing\n        }\n\n        if !currentRow.elements.isEmpty {\n            currentRow.width = currentX\n            rows.append(currentRow)\n        }\n\n        var currentY = CGFloat.zero\n        var previousMaxHeightIndex: Int?\n\n        for index in rows.indices {\n            let maxHeightIndex = rows[index].elements\n                .max { $0.size.height < $1.size.height }!\n                .index\n\n            let size = sizes[maxHeightIndex]\n\n            var spacing = CGFloat.zero\n            if let previousMaxHeightIndex {\n                spacing = verticalSpacing(subviews[previousMaxHeightIndex], subviews[maxHeightIndex])\n            }\n\n            rows[index].yOffset = currentY + spacing\n            currentY += size.height + spacing\n            rows[index].height = size.height\n            previousMaxHeightIndex = maxHeightIndex\n        }\n\n        cache.rows = (hash, rows)\n\n        return rows\n    }\n\n    private func computeHash(proposal: ProposedViewSize, sizes: [CGSize]) -> Int {\n        let proposal = proposal.replacingUnspecifiedDimensions(by: .infinity)\n\n        var hasher = Hasher()\n\n        for size in [proposal] + sizes {\n            hasher.combine(size.width)\n            hasher.combine(size.height)\n        }\n\n        return hasher.finalize()\n    }\n\n    private func minSize(subviews: Subviews) -> CGSize {\n        subviews\n            .map { $0.sizeThatFits(.zero) }\n            .reduce(CGSize.zero) { CGSize(width: max($0.width, $1.width), height: max($0.height, $1.height)) }\n    }\n\n    private func horizontalSpacing(_ lhs: LayoutSubview, _ rhs: LayoutSubview) -> CGFloat {\n        if let horizontalSpacing { return horizontalSpacing }\n\n        return lhs.spacing.distance(to: rhs.spacing, along: .horizontal)\n    }\n\n    private func verticalSpacing(_ lhs: LayoutSubview, _ rhs: LayoutSubview) -> CGFloat {\n        if let verticalSpacing { return verticalSpacing }\n\n        return lhs.spacing.distance(to: rhs.spacing, along: .vertical)\n    }\n}\n\nprivate extension CGSize {\n    static var infinity: Self {\n        .init(width: CGFloat.infinity, height: CGFloat.infinity)\n    }\n}\n\nprivate extension UnitPoint {\n    init(_ alignment: Alignment) {\n        switch alignment {\n        case .leading:\n            self = .leading\n        case .topLeading:\n            self = .topLeading\n        case .top:\n            self = .top\n        case .topTrailing:\n            self = .topTrailing\n        case .trailing:\n            self = .trailing\n        case .bottomTrailing:\n            self = .bottomTrailing\n        case .bottom:\n            self = .bottom\n        case .bottomLeading:\n            self = .bottomLeading\n        default:\n            self = .center\n        }\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Mutate.swift",
    "content": "//\n//  Mutate.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-13.\n//\n\nimport SwiftUI\n\nextension View {\n    public func mutateSelf(_ body: (inout Self) -> Void) -> Self {\n        var copy = self\n        body(&copy)\n        return copy\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/SingleChoice/SingleChoiceRow.swift",
    "content": "//\n//  SingleChoiceRow.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-04-16.\n//\n\nimport SwiftUI\n\npublic struct SingleChoiceRow: View {\n    // MARK: Public\n\n    public var body: some View {\n        HStack {\n            Text(text)\n            Spacer()\n            if selected {\n                Image(systemName: \"checkmark\")\n                    .foregroundColor(Color.accentColor)\n            }\n        }\n        .padding()\n    }\n\n    // MARK: Internal\n\n    let text: String\n    let selected: Bool\n}\n\nstruct SingleChoiceRow_Previews: PreviewProvider {\n    static var previews: some View {\n        List {\n            SingleChoiceRow(text: \"translation\", selected: false)\n            SingleChoiceRow(text: \"transliteration\", selected: true)\n        }\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/SingleChoice/SingleChoiceSelector.swift",
    "content": "//\n//  SingleChoiceSelector.swift\n//\n//\n//  Created by Afifi, Mohamed on 9/6/21.\n//\n\nimport SwiftUI\nimport UIKit\n\npublic struct SingleChoiceSection<Item: Equatable> {\n    // MARK: Lifecycle\n\n    public init(header: String? = nil, items: [Item]) {\n        self.header = header\n        self.items = items\n    }\n\n    // MARK: Internal\n\n    let header: String?\n    let items: [Item]\n}\n\npublic class SingleChoiceSelector<Item: Equatable, Content: View>: UITableViewController {\n    private typealias Cell = HostingTableViewCell<Content>\n\n    // MARK: Lifecycle\n\n    public init(\n        style: UITableView.Style,\n        sections: [SingleChoiceSection<Item>],\n        selected: Item?,\n        configure: @escaping (Item, Item?) -> Content,\n        onSelection: @escaping (Item) -> Void\n    ) {\n        self.sections = sections\n        self.selected = selected\n        self.configure = configure\n        self.onSelection = onSelection\n        super.init(style: style)\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Public\n\n    override public func viewDidLayoutSubviews() {\n        super.viewDidLayoutSubviews()\n        preferredContentSize = tableView.contentSize\n    }\n\n    override public func viewDidLoad() {\n        super.viewDidLoad()\n        tableView?.register(Cell.self, forCellReuseIdentifier: cellReuseId)\n    }\n\n    override public func numberOfSections(in tableView: UITableView) -> Int {\n        sections.count\n    }\n\n    override public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        sections[section].items.count\n    }\n\n    override public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        guard let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseId, for: indexPath) as? Cell else {\n            fatalError(\"Cell not of type \\(Cell.self)\")\n        }\n        let view = configure(sections[indexPath.section].items[indexPath.item], selected)\n        cell.set(rootView: view, parentController: self)\n        return cell\n    }\n\n    override public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        let item = sections[indexPath.section].items[indexPath.item]\n        onSelection(item)\n    }\n\n    override public func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {\n        sections[section].header\n    }\n\n    // MARK: Private\n\n    private let sections: [SingleChoiceSection<Item>]\n    private let selected: Item?\n    private let onSelection: (Item) -> Void\n    private let configure: (Item, Item?) -> Content\n\n    private var cellReuseId: String {\n        String(describing: Cell.self)\n    }\n}\n\n// Adding default factory method\npublic func singleChoiceSelector<Item: Hashable>(\n    style: UITableView.Style = .insetGrouped,\n    sections: [SingleChoiceSection<Item>],\n    selected: Item?,\n    itemText: @escaping (Item) -> String,\n    onSelection: @escaping (Item) -> Void\n) -> SingleChoiceSelector<Item, SingleChoiceRow> {\n    SingleChoiceSelector(\n        style: style,\n        sections: sections,\n        selected: selected,\n        configure: { item, selected in\n            SingleChoiceRow(text: itemText(item), selected: selected == item)\n        },\n        onSelection: onSelection\n    )\n}\n\npublic struct SingleChoiceSelectorView<Item: Hashable>: View {\n    // MARK: Lifecycle\n\n    public init(sections: [SingleChoiceSection<Item>], selected: Binding<Item?>, itemText: @escaping (Item) -> String) {\n        self.sections = sections\n        _selected = selected\n        self.itemText = itemText\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        PreferredContentSizeMatchesScrollView {\n            List {\n                ForEach(sections, id: \\.header) { section in\n                    if let header = section.header {\n                        Section(header: Text(header)) {\n                            itemsView(section.items)\n                        }\n                    } else {\n                        itemsView(section.items)\n                    }\n                }\n            }\n            .listStyle(.plain)\n        }\n    }\n\n    // MARK: Private\n\n    private let sections: [SingleChoiceSection<Item>]\n    @Binding private var selected: Item?\n    private let itemText: (Item) -> String\n\n    private func itemsView(_ items: [Item]) -> some View {\n        ForEach(items, id: \\.self) { item in\n            Button {\n                selected = item\n            } label: {\n                SingleChoiceRow(text: itemText(item), selected: item == selected)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Toast/Toast.swift",
    "content": "//\n//  Toast.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-09-22.\n//\n\n// MARK: - Toast\n\nimport Foundation\nimport SwiftUI\nimport UIKit\n\npublic struct ToastAction {\n    public let title: String\n    public let handler: () -> Void\n\n    public init(title: String, handler: @escaping () -> Void) {\n        self.title = title\n        self.handler = handler\n    }\n}\n\npublic struct Toast {\n    public let message: String\n    public let action: ToastAction?\n    public let duration: TimeInterval\n    public let bottomOffset: CGFloat\n\n    public init(\n        _ message: String,\n        action: ToastAction? = nil,\n        duration: TimeInterval = 4.0,\n        bottomOffset: CGFloat = 40\n    ) {\n        self.message = message\n        self.action = action\n        self.duration = duration\n        self.bottomOffset = bottomOffset\n    }\n}\n\nprivate struct ToastView: View {\n    let message: String\n    let action: ToastAction?\n    let dismiss: () -> Void\n    @ScaledMetric var shadowRadius = 5\n\n    var body: some View {\n        HStack {\n            Text(message)\n                .foregroundColor(.systemBackground)\n            Spacer()\n            if let action {\n                Button(action.title) {\n                    action.handler()\n                    dismiss()\n                }\n                .foregroundColor(.systemBackground)\n            }\n        }\n        .padding()\n        .background(\n            RoundedRectangle(cornerRadius: 12)\n                .fill(Color.label.opacity(0.8))\n                .shadow(color: .label.opacity(0.33), radius: shadowRadius)\n        )\n        .padding(.horizontal)\n    }\n}\n\nprivate class ToastHostingController: UIHostingController<ToastView> {\n    init(toast: Toast, dismiss: @escaping () -> Void) {\n        let rootView = ToastView(\n            message: toast.message,\n            action: toast.action,\n            dismiss: dismiss\n        )\n        super.init(rootView: rootView)\n        view.backgroundColor = .clear\n    }\n\n    @available(*, unavailable)\n    @objc\n    dynamic required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n}\n\nprivate class ToastContainerViewController: UIViewController {\n    // MARK: Lifecycle\n\n    init(toastViewController: UIViewController, bottomOffset: CGFloat) {\n        self.toastViewController = toastViewController\n        self.bottomOffset = bottomOffset\n        super.init(nibName: nil, bundle: nil)\n        modalPresentationStyle = .overFullScreen\n        modalTransitionStyle = .crossDissolve\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Internal\n\n    class PassThroughView: UIView {\n        // Allow touches to pass through except for the ToastView\n        override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {\n            let hitView = super.hitTest(point, with: event)\n            if hitView === self || hitView == nil {\n                return nil\n            }\n            return hitView\n        }\n    }\n\n    var dismissCompletion: (() -> Void)?\n\n    override func loadView() {\n        view = PassThroughView()\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        // Allow touches outside the toast to pass through\n        view.backgroundColor = .clear\n\n        // Add the toast view controller as a child\n        addChild(toastViewController)\n        view.addAutoLayoutSubview(toastViewController.view)\n\n        // Setup constraints\n        toastViewController.view.vc.horizontalEdges()\n        setUpHideToastConstraints()\n\n        toastViewController.didMove(toParent: self)\n\n        // Add a swipe down gesture recognizer for manual dismissal\n        let swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipeDown))\n        swipeGesture.direction = .down\n        toastViewController.view.addGestureRecognizer(swipeGesture)\n\n        let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePanPanGesture(_:)))\n        toastViewController.view.addGestureRecognizer(panGesture)\n    }\n\n    override func viewDidAppear(_ animated: Bool) {\n        super.viewDidAppear(animated)\n        showToast()\n    }\n\n    func showToast() {\n        toastViewController.view.layoutIfNeeded()\n        setUpShowToastConstraints()\n\n        // Animate the toast into view\n        UIView.animate(withDuration: animationDuration, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 0) {\n            self.view.layoutIfNeeded()\n        }\n    }\n\n    func dismissToast(completion: (() -> Void)? = nil) {\n        setUpHideToastConstraints()\n\n        // Animate the toast into view\n        UIView.animate(withDuration: animationDuration, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 0, animations: {\n            self.view.layoutIfNeeded()\n        }, completion: { _ in\n            self.toastViewController.willMove(toParent: nil)\n            self.toastViewController.view.removeFromSuperview()\n            self.toastViewController.removeFromParent()\n            self.dismiss(animated: false) {\n                self.dismissCompletion?()\n                completion?()\n            }\n        })\n    }\n\n    // MARK: Private\n\n    private let toastViewController: UIViewController\n    private let bottomOffset: CGFloat\n    private let animationDuration: CGFloat = 0.3\n\n    private var activeConstraint: NSLayoutConstraint? {\n        didSet {\n            oldValue?.isActive = false\n            activeConstraint?.isActive = true\n        }\n    }\n\n    private func setUpShowToastConstraints() {\n        activeConstraint = view.bottomAnchor.constraint(equalTo: toastViewController.view.bottomAnchor, constant: bottomOffset)\n    }\n\n    private func setUpHideToastConstraints() {\n        activeConstraint = view.bottomAnchor.constraint(equalTo: toastViewController.view.topAnchor)\n    }\n\n    @objc\n    private func handleSwipeDown() {\n        dismissToast()\n    }\n\n    @objc\n    private func handlePanPanGesture(_ gesture: UIPanGestureRecognizer) {\n        let translation = gesture.translation(in: gesture.view)\n\n        switch gesture.state {\n        case .changed:\n            // Move the view with the pan gesture\n            if translation.y > 0 { // Allow dragging only downward\n                activeConstraint?.constant = bottomOffset - translation.y\n            }\n        case .ended:\n            if translation.y > bottomOffset {\n                dismissToast()\n            } else {\n                showToast()\n            }\n        default:\n            break\n        }\n    }\n}\n\nprivate class ToastWindow: UIWindow {\n    override init(windowScene: UIWindowScene) {\n        super.init(windowScene: windowScene)\n        windowLevel = UIWindow.Level.statusBar + 1\n        backgroundColor = .clear\n        isHidden = false\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // Allow touches to pass through except for the ToastView\n    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {\n        let hitView = super.hitTest(point, with: event)\n        if hitView === self || hitView == nil {\n            return nil\n        }\n        return hitView\n    }\n}\n\n@MainActor\npublic class ToastPresenter {\n    // MARK: Lifecycle\n\n    private init() {}\n\n    // MARK: Public\n\n    public static let shared = ToastPresenter()\n\n    public func showToast(_ toast: Toast, in windowScene: UIWindowScene) {\n        DispatchQueue.main.async {\n            self.queue.append((toast: toast, windowScene: windowScene))\n            self.displayNextToast()\n        }\n    }\n\n    public func dismissCurrentToast() {\n        guard let id = currentToastID else { return }\n        dismissToast(id: id)\n    }\n\n    // MARK: Private\n\n    private var queue: [(toast: Toast, windowScene: UIWindowScene)] = []\n    private var isShowing = false\n    private var currentToastWindow: ToastWindow?\n    private var currentContainerVC: ToastContainerViewController?\n    private var currentToastID: UUID?\n\n    private func displayNextToast() {\n        guard !isShowing, let nextToast = queue.first else { return }\n        isShowing = true\n        present(toast: nextToast.toast, in: nextToast.windowScene)\n    }\n\n    private func present(toast: Toast, in windowScene: UIWindowScene) {\n        let toastID = UUID()\n        currentToastID = toastID\n\n        let toastVC = ToastHostingController(toast: toast, dismiss: { [weak self] in\n            self?.dismissToast(id: toastID)\n        })\n\n        let containerVC = ToastContainerViewController(\n            toastViewController: toastVC,\n            bottomOffset: toast.bottomOffset\n        )\n\n        containerVC.dismissCompletion = { [weak self] in\n            self?.toastDidDismiss(id: toastID)\n        }\n\n        let toastWindow = ToastWindow(windowScene: windowScene)\n        toastWindow.rootViewController = containerVC\n        toastWindow.makeKeyAndVisible()\n\n        currentToastWindow = toastWindow\n        currentContainerVC = containerVC\n\n        // Schedule automatic dismissal\n        DispatchQueue.main.asyncAfter(deadline: .now() + toast.duration) { [weak self] in\n            self?.dismissToast(id: toastID)\n        }\n    }\n\n    private func toastDidDismiss(id: UUID) {\n        guard currentToastID == id else { return }\n        currentToastWindow?.isHidden = true\n        currentToastWindow = nil\n        currentContainerVC = nil\n        currentToastID = nil\n        isShowing = false\n        queue.removeFirst()\n        displayNextToast()\n    }\n\n    private func dismissToast(id: UUID) {\n        DispatchQueue.main.async {\n            guard self.currentToastID == id else { return }\n            self.currentContainerVC?.dismissToast()\n        }\n    }\n}\n\n#Preview {\n    VStack {\n        Spacer()\n        ToastView(\n            message: \"This is a toast message\",\n            action: ToastAction(title: \"Dismiss\", handler: {}),\n            dismiss: {}\n        )\n        .padding(.bottom, 40)\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Toast/ToastEnvironmentKey.swift",
    "content": "//\n//  ToastEnvironmentKey.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-09-22.\n//\n\nimport SwiftUI\nimport VLogging\n\nextension EnvironmentValues {\n    public var showToast: ((Toast) -> Void)? {\n        get { self[ToastPresenterKey.self] }\n        set { self[ToastPresenterKey.self] = newValue }\n    }\n}\n\nextension View {\n    public func enableToastPresenter() -> some View {\n        modifier(ToastPresenterModifier())\n    }\n}\n\nprivate struct ToastPresenterKey: EnvironmentKey {\n    static let defaultValue: ((Toast) -> Void)? = nil\n}\n\nprivate struct ToastPresenterModifier: ViewModifier {\n    @State private var windowScene: UIWindowScene?\n\n    func body(content: Content) -> some View {\n        content\n            .background(\n                WindowSceneReader(windowScene: $windowScene)\n            )\n            .onPreferenceChange(WindowScenePreferenceKey.self) { windowScene in\n                self.windowScene = windowScene\n            }\n            .environment(\\.showToast) { toast in\n                if let windowScene {\n                    ToastPresenter.shared.showToast(toast, in: windowScene)\n                } else {\n                    logger.error(\"Failed to obtain windowScene\")\n                }\n            }\n    }\n}\n\nprivate struct WindowScenePreferenceKey: PreferenceKey {\n    static var defaultValue: UIWindowScene? = nil\n\n    static func reduce(value: inout UIWindowScene?, nextValue: () -> UIWindowScene?) {\n        value = value ?? nextValue()\n    }\n}\n\nprivate struct WindowSceneReader: UIViewRepresentable {\n    @Binding var windowScene: UIWindowScene?\n\n    func makeUIView(context: Context) -> UIView {\n        let view = UIView()\n        DispatchQueue.main.async {\n            windowScene = view.window?.windowScene\n        }\n        return view\n    }\n\n    func updateUIView(_ uiView: UIView, context: Context) {\n        DispatchQueue.main.async {\n            windowScene = uiView.window?.windowScene\n        }\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/AttributedString++.swift",
    "content": "//\n//  AttributedString++.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-20.\n//\n\nimport Foundation\n\nextension AttributedString {\n    public func range(\n        from range: Range<String.Index>,\n        overallRange: Range<String.Index>,\n        overallText: String\n    ) -> Range<AttributedString.Index>? {\n        let clampedRange = range.clamped(to: overallRange)\n        if clampedRange.lowerBound >= clampedRange.upperBound {\n            return nil\n        }\n\n        let startDistance = overallText.distance(from: overallRange.lowerBound, to: clampedRange.lowerBound)\n        let endDistance = overallText.distance(from: overallRange.lowerBound, to: clampedRange.upperBound)\n\n        let start = index(startIndex, offsetByCharacters: startDistance)\n        let end = index(startIndex, offsetByCharacters: endDistance)\n        return start ..< end\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/AutoSizingHostingController.swift",
    "content": "//\n//  AutoSizingHostingController.swift\n//\n//\n//  Created by Afifi, Mohamed on 8/1/21.\n//\n\nimport SwiftUI\n\npublic class AutoSizingHostingController<Content: View>: UIHostingController<Content> {\n    // MARK: Public\n\n    public var maxPreferredContentSize = CGSize(width: .max, height: .max)\n\n    override public func viewDidLayoutSubviews() {\n        super.viewDidLayoutSubviews()\n        updatePreferredContentSize()\n    }\n\n    // MARK: Private\n\n    private func setPreferredContentSize(_ newSize: CGSize) {\n        // animate the transition only if it is an update to a non-zero size\n        if preferredContentSize == .zero || newSize == preferredContentSize {\n            preferredContentSize = newSize\n        } else {\n            UIView.animate(withDuration: 0.1, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 0) {\n                self.preferredContentSize = newSize\n            }\n        }\n    }\n\n    private func updatePreferredContentSize() {\n        let newSize = sizeThatFits(in: .zero)\n        setPreferredContentSize(CGSize(\n            width: min(maxPreferredContentSize.width, newSize.width),\n            height: min(maxPreferredContentSize.height, newSize.height)\n        ))\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/AutoUpdatingPreferredContentSizeHostingController.swift",
    "content": "//\n//  AutoUpdatingPreferredContentSizeHostingController.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-01-29.\n//\n\nimport SwiftUI\n\npublic class AutoUpdatingPreferredContentSizeHostingController<Content: View>: UIHostingController<Content> {\n    override public func viewDidLoad() {\n        super.viewDidLoad()\n        view.backgroundColor = nil\n    }\n\n    override public func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        view.backgroundColor = nil\n    }\n\n    override public func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {\n        super.preferredContentSizeDidChange(forChildContentContainer: container)\n\n        // animate the transition only if it is an update to a non-zero size\n        if preferredContentSize == .zero || container.preferredContentSize == preferredContentSize {\n            preferredContentSize = container.preferredContentSize\n        } else {\n            UIView.animate(withDuration: 0.1, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 0) {\n                self.preferredContentSize = container.preferredContentSize\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/CloseButton.swift",
    "content": "//\n//  CloseButton.swift\n//  QuranEngine\n//\n//  Created by Mohamed Afifi on 2025-03-26.\n//\n\nimport SwiftUI\n\npublic struct CloseButton: View {\n    @Environment(\\.dismiss) private var dismiss\n\n    public init() { }\n\n    public var body: some View {\n        Button {\n            dismiss()\n        } label: {\n            Image(systemName: \"xmark.circle.fill\")\n                .symbolRenderingMode(.palette)\n                .font(.title)\n                .foregroundStyle(Color.systemGray, Color.systemGray5)\n        }\n        .accessibilityLabel(\"Close\")\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/CocoaNavigationBar.swift",
    "content": "//\n//  CocoaNavigationBar.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-09-29.\n//\n\nimport SwiftUI\n\npublic struct BarButton {\n    public enum Content: Equatable {\n        case image(UIImage?, style: UIBarButtonItem.Style)\n        case system(UIBarButtonItem.SystemItem)\n    }\n\n    let content: Content\n    let action: @MainActor () -> Void\n\n    public init(_ content: Content, action: @escaping @MainActor () -> Void) {\n        self.content = content\n        self.action = action\n    }\n}\n\npublic struct CocoaNavigationBar: View {\n    let title: String\n    let leftButtons: [BarButton]\n    let rightButtons: [BarButton]\n    var prefersLargeTitles: Bool = false\n    var standardAppearance: UINavigationBarAppearance?\n    var scrollEdgeAppearance: UINavigationBarAppearance?\n\n    public init(title: String, leftButtons: [BarButton], rightButtons: [BarButton]) {\n        self.title = title\n        self.leftButtons = leftButtons\n        self.rightButtons = rightButtons\n    }\n\n    public var body: some View {\n        NavigationBarRepresentable(\n            title: title,\n            leftButtons: leftButtons,\n            rightButtons: rightButtons,\n            prefersLargeTitles: prefersLargeTitles,\n            standardAppearance: standardAppearance,\n            scrollEdgeAppearance: scrollEdgeAppearance\n        )\n        // show the separator\n        .padding(.bottom, 1)\n    }\n\n    public func prefersLargeTitles(_ prefersLargeTitles: Bool) -> Self {\n        mutateSelf {\n            $0.prefersLargeTitles = prefersLargeTitles\n        }\n    }\n\n    public func standardAppearance(_ standardAppearance: UINavigationBarAppearance?) -> Self {\n        mutateSelf {\n            $0.standardAppearance = standardAppearance\n        }\n    }\n\n    public func scrollEdgeAppearance(_ scrollEdgeAppearance: UINavigationBarAppearance?) -> Self {\n        mutateSelf {\n            $0.scrollEdgeAppearance = scrollEdgeAppearance\n        }\n    }\n}\n\nprivate struct NavigationBarRepresentable: UIViewRepresentable {\n    let title: String\n    let leftButtons: [BarButton]\n    let rightButtons: [BarButton]\n    var prefersLargeTitles: Bool\n    var standardAppearance: UINavigationBarAppearance?\n    var scrollEdgeAppearance: UINavigationBarAppearance?\n\n    func makeUIView(context: Context) -> NavigationBarView {\n        NavigationBarView()\n    }\n\n    func updateUIView(_ view: NavigationBarView, context: Context) {\n        view.configure(title: title, leftButtons: leftButtons, rightButtons: rightButtons)\n    }\n\n    class NavigationBarView: UINavigationBar {\n        private let item = UINavigationItem()\n        private var leftButtons: [BarButton] = []\n        private var rightButtons: [BarButton] = []\n        private var buttonActions: [UIBarButtonItem: @MainActor () -> Void] = [:]\n\n        func configure(\n            title: String,\n            leftButtons: [BarButton],\n            rightButtons: [BarButton]\n        ) {\n            item.title = title\n\n            let leftButtonsEquals = self.leftButtons.map(\\.content) == leftButtons.map(\\.content)\n            let rightButtonsEquals = self.rightButtons.map(\\.content) == rightButtons.map(\\.content)\n\n            buttonActions.removeAll()\n\n            let leftBarButtonItems = leftButtons.map { barButtonItem(of: $0) }\n            item.setLeftBarButtonItems(leftBarButtonItems, animated: !leftButtonsEquals && topItem === item)\n            let rightBarButtonItems = rightButtons.map { barButtonItem(of: $0) }\n            item.setRightBarButtonItems(rightBarButtonItems, animated: !rightButtonsEquals && topItem === item)\n\n            self.leftButtons = leftButtons\n            self.rightButtons = rightButtons\n\n            if topItem == nil {\n                setItems([item], animated: false)\n            }\n        }\n\n        private func barButtonItem(of button: BarButton) -> UIBarButtonItem {\n            let buttonItem = switch button.content {\n            case .image(let image, let style):\n                UIBarButtonItem(image: image, style: style, target: self, action: #selector(buttonTapped))\n            case .system(let systemItem):\n                UIBarButtonItem(barButtonSystemItem: systemItem, target: self, action: #selector(buttonTapped))\n            }\n            buttonActions[buttonItem] = button.action\n            return buttonItem\n        }\n\n        @objc\n        private func buttonTapped(_ buttonItem: UIBarButtonItem) {\n            let action = buttonActions[buttonItem]\n            action?()\n        }\n    }\n}\n\npublic extension UINavigationBarAppearance {\n    static func defaultBackground() -> UINavigationBarAppearance {\n        let appearance = UINavigationBarAppearance()\n        appearance.configureWithDefaultBackground()\n        return appearance\n    }\n\n    static func opaqueBackground() -> UINavigationBarAppearance {\n        let appearance = UINavigationBarAppearance()\n        appearance.configureWithOpaqueBackground()\n        return appearance\n    }\n\n    static func transparentBackground() -> UINavigationBarAppearance {\n        let appearance = UINavigationBarAppearance()\n        appearance.configureWithTransparentBackground()\n        return appearance\n    }\n\n    func backgroundColor(_ backgroundColor: UIColor?) -> Self {\n        self.backgroundColor = backgroundColor\n        return self\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/CocoaNavigationView.swift",
    "content": "//\n//  CocoaNavigationView.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-12-25.\n//\n\nimport SwiftUI\n\n// Inspired by https://github.com/SwiftUIX/SwiftUIX/tree/master/Sources/Intramodular/Navigation\n// but can size itself inside a popover.\n\npublic protocol StackableViewController: UIViewController { }\n\npublic struct CocoaNavigationView<Root: View>: View {\n    // MARK: Lifecycle\n\n    public init(rootConfiguration: NavigationConfiguration? = nil, @ViewBuilder root: () -> Root) {\n        self.root = root()\n        self.rootConfiguration = rootConfiguration\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        NavigationViewBody(\n            root: root,\n            rootConfiguration: rootConfiguration,\n            prefersLargeTitles: prefersLargeTitles,\n            standardAppearance: standardAppearance,\n            scrollEdgeAppearance: scrollEdgeAppearance\n        )\n        .edgesIgnoringSafeArea(.all)\n    }\n\n    // MARK: Private\n\n    private let root: Root\n    private var rootConfiguration: NavigationConfiguration?\n    private var standardAppearance: UINavigationBarAppearance?\n    private var scrollEdgeAppearance: UINavigationBarAppearance?\n    private var prefersLargeTitles = false\n\n    public func standardAppearance(_ standardAppearance: UINavigationBarAppearance) -> Self {\n        mutateSelf {\n            $0.standardAppearance = standardAppearance\n        }\n    }\n\n    public func scrollEdgeAppearance(_ scrollEdgeAppearance: UINavigationBarAppearance) -> Self {\n        mutateSelf {\n            $0.scrollEdgeAppearance = scrollEdgeAppearance\n        }\n    }\n}\n\npublic struct Navigator {\n    // MARK: Public\n\n    public func push(\n        configuration: NavigationConfiguration? = nil,\n        animated: Bool = true,\n        @ViewBuilder _ view: () -> some View\n    ) {\n        let view = view()\n            .environment(\\.navigator, Navigator(navigationController: navigationController))\n        let viewController = ElementController(rootView: view, configuration: configuration)\n        navigationController.pushViewController(viewController, animated: animated)\n    }\n\n    public func pop(animated: Bool = true) {\n        navigationController.popViewController(animated: animated)\n    }\n\n    public func popToRoot(animated: Bool = true) {\n        navigationController.popToRootViewController(animated: animated)\n    }\n\n    public func present(\n        configuration: NavigationConfiguration? = nil,\n        animated: Bool = true,\n        @ViewBuilder _ view: () -> some View\n    ) {\n        let view = view()\n            .environment(\\.navigator, Navigator(navigationController: navigationController))\n        let viewController = ElementController(rootView: view, configuration: configuration)\n        navigationController.present(viewController, animated: animated)\n    }\n\n    public func dismiss(animated: Bool = true, completion: (() -> Void)? = nil) {\n        navigationController.dismiss(animated: animated, completion: completion)\n    }\n\n    // MARK: Internal\n\n    let navigationController: UINavigationController\n}\n\nextension EnvironmentValues {\n    private struct NavigatorEnvironmentKey: EnvironmentKey {\n        static var defaultValue: Navigator? { nil }\n    }\n\n    public var navigator: Navigator? {\n        get { self[NavigatorEnvironmentKey.self] }\n        set { self[NavigatorEnvironmentKey.self] = newValue }\n    }\n}\n\npublic struct NavigationConfiguration {\n    // MARK: Lifecycle\n\n    public init(\n        navigationBarHidden: Bool = false,\n        title: String? = nil,\n        backgroundColor: UIColor? = nil,\n        leftBarButtons: [BarButton] = [],\n        rightBarButtons: [BarButton] = []\n    ) {\n        self.navigationBarHidden = navigationBarHidden\n        self.title = title\n        self.backgroundColor = backgroundColor\n        self.leftBarButtons = leftBarButtons\n        self.rightBarButtons = rightBarButtons\n    }\n\n    // MARK: Public\n\n    public var navigationBarHidden: Bool\n    public var title: String?\n    public var backgroundColor: UIColor?\n    public var leftBarButtons: [BarButton]\n    public var rightBarButtons: [BarButton]\n}\n\nprivate struct NavigationViewBody<Root: View>: UIViewControllerRepresentable {\n    class Coordinator: NSObject, UINavigationControllerDelegate {\n        func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {\n            navigationController.preferredContentSize = viewController.preferredContentSize\n        }\n    }\n\n    let root: Root\n    let rootConfiguration: NavigationConfiguration?\n    let prefersLargeTitles: Bool\n    let standardAppearance: UINavigationBarAppearance?\n    let scrollEdgeAppearance: UINavigationBarAppearance?\n\n    func makeUIViewController(context: Context) -> CocoaNavigationController {\n        let navigationController = CocoaNavigationController()\n        let navigatorRoot = root\n            .environment(\\.navigator, Navigator(navigationController: navigationController))\n        let controller = ElementController(rootView: AnyView(navigatorRoot), configuration: rootConfiguration)\n        navigationController.setViewControllers([controller], animated: false)\n        navigationController.delegate = context.coordinator\n        navigationController.configuration = rootConfiguration\n        return navigationController\n    }\n\n    func updateUIViewController(_ navigationController: CocoaNavigationController, context: Context) {\n        if let rootViewController = navigationController.viewControllers.first as? ElementController<AnyView> {\n            let navigatorRoot = root\n                .environment(\\.navigator, Navigator(navigationController: navigationController))\n            rootViewController.rootView = AnyView(navigatorRoot)\n            rootViewController.configuration = rootConfiguration\n        }\n        navigationController.navigationBar.prefersLargeTitles = prefersLargeTitles\n        if let standardAppearance {\n            navigationController.navigationBar.standardAppearance = standardAppearance\n        }\n        if let scrollEdgeAppearance {\n            navigationController.navigationBar.scrollEdgeAppearance = scrollEdgeAppearance\n        }\n    }\n\n    func makeCoordinator() -> Coordinator {\n        Coordinator()\n    }\n}\n\nprivate class CocoaNavigationController: UINavigationController {\n    var configuration: NavigationConfiguration? {\n        didSet {\n            guard let configuration else { return }\n            if configuration.navigationBarHidden != oldValue?.navigationBarHidden {\n                if configuration.navigationBarHidden != isNavigationBarHidden {\n                    setNavigationBarHidden(configuration.navigationBarHidden, animated: true)\n                }\n            }\n        }\n    }\n\n    override var isNavigationBarHidden: Bool {\n        get {\n            super.isNavigationBarHidden\n        } set {\n            guard !((configuration?.navigationBarHidden ?? false) && !newValue) else {\n                return\n            }\n\n            super.isNavigationBarHidden = newValue\n            DispatchQueue.main.async {\n                self.preferredContentSize = self.preferredContentSize\n            }\n        }\n    }\n\n    override func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {\n        preferredContentSize = container.preferredContentSize\n    }\n\n    override func setNavigationBarHidden(_ hidden: Bool, animated: Bool) {\n        guard hidden != isNavigationBarHidden else {\n            return\n        }\n        super.setNavigationBarHidden(configuration?.navigationBarHidden ?? hidden, animated: animated)\n        DispatchQueue.main.async {\n            self.preferredContentSize = self.preferredContentSize\n        }\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        view.backgroundColor = nil\n        super.viewWillAppear(animated)\n        setNavigationBarHidden(configuration?.navigationBarHidden ?? false, animated: false)\n    }\n}\n\nprivate class ElementController<Content: View>: UIHostingController<Content> {\n    // MARK: Lifecycle\n\n    init(rootView: Content, configuration: NavigationConfiguration?) {\n        self.configuration = configuration\n        super.init(rootView: rootView)\n        configure()\n    }\n\n    @available(*, unavailable) @MainActor\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Internal\n\n    var configuration: NavigationConfiguration? {\n        didSet {\n            cocoaNavigation?.configuration = configuration\n            configure()\n        }\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        configure()\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        cocoaNavigation?.configuration = configuration\n    }\n\n    override func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {\n        preferredContentSize = container.preferredContentSize\n    }\n\n    override func addChild(_ childController: UIViewController) {\n        super.addChild(childController)\n        if let mainElementVC = childController as? StackableViewController {\n            observeNavigationItem(of: mainElementVC)\n        }\n    }\n\n    // MARK: Private\n\n    private var childNavigationItemObservations: [NSKeyValueObservation]?\n    private var buttonActions: [UIBarButtonItem: @MainActor () -> Void] = [:]\n\n    private var cocoaNavigation: CocoaNavigationController? {\n        navigationController as? CocoaNavigationController\n    }\n\n    private func observeNavigationItem(of child: some StackableViewController) {\n        let options: NSKeyValueObservingOptions = [.new, .initial]\n        let action: (UIViewController) -> Void = { [weak self] childController in\n            self?.syncNavigationItem(with: childController.navigationItem)\n        }\n        childNavigationItemObservations = [\n            observe(\\.navigationItem.title, on: child, options: options, action: action),\n            observe(\\.navigationItem.rightBarButtonItem, on: child, options: options, action: action),\n            observe(\\.navigationItem.rightBarButtonItems, on: child, options: options, action: action),\n            observe(\\.navigationItem.leftBarButtonItem, on: child, options: options, action: action),\n            observe(\\.navigationItem.leftBarButtonItems, on: child, options: options, action: action),\n        ]\n\n        if #available(iOS 16.0, *) {\n            childNavigationItemObservations?.append(contentsOf: [\n                observe(\\.navigationItem.leadingItemGroups, on: child, options: options, action: action),\n                observe(\\.navigationItem.trailingItemGroups, on: child, options: options, action: action),\n            ])\n        }\n    }\n\n    private func observe(\n        _ keyPath: KeyPath<UIViewController, some Any>,\n        on viewController: UIViewController,\n        options: NSKeyValueObservingOptions,\n        action: @escaping (UIViewController) -> Void\n    ) -> NSKeyValueObservation {\n        viewController.observe(keyPath, options: options) { viewController, _ in\n            action(viewController)\n        }\n    }\n\n    private func syncNavigationItem(with navigationItem: UINavigationItem) {\n        self.navigationItem.title = navigationItem.title\n        self.navigationItem.leftBarButtonItems = navigationItem.leftBarButtonItems\n        self.navigationItem.rightBarButtonItems = navigationItem.rightBarButtonItems\n\n        if #available(iOS 16.0, *) {\n            self.navigationItem.leadingItemGroups = navigationItem.leadingItemGroups\n            self.navigationItem.trailingItemGroups = navigationItem.trailingItemGroups\n        }\n    }\n\n    private func configure() {\n        guard let configuration else {\n            return\n        }\n        title = configuration.title\n        viewIfLoaded?.backgroundColor = configuration.backgroundColor\n\n        buttonActions.removeAll()\n        let leftBarButtonItems = configuration.leftBarButtons.map { barButtonItem(of: $0) }\n        navigationItem.leftBarButtonItems = leftBarButtonItems\n        let rightBarButtonItems = configuration.rightBarButtons.map { barButtonItem(of: $0) }\n        navigationItem.rightBarButtonItems = rightBarButtonItems\n    }\n\n    private func barButtonItem(of button: BarButton) -> UIBarButtonItem {\n        let buttonItem = switch button.content {\n        case .image(let image, let style):\n            UIBarButtonItem(image: image, style: style, target: self, action: #selector(barButtonTapped))\n        case .system(let systemItem):\n            UIBarButtonItem(barButtonSystemItem: systemItem, target: self, action: #selector(barButtonTapped))\n        }\n        buttonActions[buttonItem] = button.action\n        return buttonItem\n    }\n\n    @objc\n    private func barButtonTapped(_ buttonItem: UIBarButtonItem) {\n        let action = buttonActions[buttonItem]\n        action?()\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/CollectionTracker.swift",
    "content": "//\n//  CollectionTracker.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-27.\n//\n\nimport SwiftUI\n\n// MARK: - TrackingView\n\nprivate class TrackingTargetView<Item: Hashable>: UIView {\n    var item: Item\n\n    init(item: Item) {\n        self.item = item\n        super.init(frame: .zero)\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n}\n\nprivate struct TrackingTargetViewRepresentable<Item: Hashable>: UIViewRepresentable {\n    let item: Item\n\n    func makeUIView(context: Context) -> TrackingTargetView<Item> {\n        TrackingTargetView(item: item)\n    }\n\n    func updateUIView(_ view: TrackingTargetView<Item>, context: Context) {\n        view.item = item\n    }\n}\n\nprivate struct TrackingTargetModifier<Item: Hashable>: ViewModifier {\n    let item: Item\n\n    func body(content: Content) -> some View {\n        content\n            .background(TrackingTargetViewRepresentable(item: item))\n    }\n}\n\n// MARK: - TrackingContainer\n\nprivate class CollectionTrackerView: UIView {}\n\nprivate struct CollectionTrackerViewRepresentable<Item: Hashable>: UIViewRepresentable {\n    let tracker: CollectionTracker<Item>\n\n    func makeUIView(context: Context) -> CollectionTrackerView {\n        let view = CollectionTrackerView()\n        updateUIView(view, context: context)\n        return view\n    }\n\n    func updateUIView(_ view: CollectionTrackerView, context: Context) {\n        tracker.view = view\n    }\n}\n\npublic final class CollectionTracker<Item: Hashable> {\n    fileprivate weak var view: CollectionTrackerView?\n\n    public init() {}\n\n    private var visibleViews: [TrackingTargetView<Item>] {\n        for viewToTry in [view, view?.superview, view?.superview?.superview] {\n            if let visibleViews = viewToTry?.findVisibleSubviews(ofType: TrackingTargetView<Item>.self), !visibleViews.isEmpty {\n                return visibleViews\n            }\n        }\n        return []\n    }\n\n    public func itemAtPoint(_ point: CGPoint) -> Item? {\n        for visibleView in visibleViews {\n            let localPoint = visibleView.convert(point, from: nil)\n            if visibleView.point(inside: localPoint, with: nil) {\n                return visibleView.item\n            }\n        }\n        return nil\n    }\n}\n\nprivate struct CollectionTrackerModifier<Item: Hashable>: ViewModifier {\n    let tracker: CollectionTracker<Item>\n\n    func body(content: Content) -> some View {\n        content\n            .background(CollectionTrackerViewRepresentable(tracker: tracker))\n    }\n}\n\nextension View {\n    public func trackingTarget(item: some Hashable) -> some View {\n        modifier(TrackingTargetModifier(item: item))\n    }\n\n    public func trackCollection(with tracker: CollectionTracker<some Hashable>) -> some View {\n        modifier(CollectionTrackerModifier(tracker: tracker))\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/HostingCell.swift",
    "content": "//\n//  HostingCell.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 11/26/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport SwiftUI\n\nprivate class NoNavigationHostingController<C: View>: UIHostingController<C> {\n    override var navigationController: UINavigationController? {\n        nil\n    }\n}\n\nprivate final class ViewHostingController<Content: View> {\n    // MARK: Lifecycle\n\n    init(view: UIView, contentView: UIView?) {\n        self.view = view\n        self.contentView = contentView ?? view\n        hostingController.view.backgroundColor = .clear\n    }\n\n    deinit {\n        // remove parent\n        hostingController.parent?.removeChild(hostingController)\n    }\n\n    // MARK: Internal\n\n    func set(rootView: Content, parentController: UIViewController) {\n        guard let contentView else {\n            return\n        }\n        hostingController.rootView = rootView\n        hostingController.view.invalidateIntrinsicContentSize()\n\n        let requiresControllerMove = hostingController.parent != parentController\n        if requiresControllerMove {\n            // remove old parent if exists\n            hostingController.parent?.removeChild(hostingController)\n            parentController.addChild(hostingController)\n        }\n\n        if !contentView.subviews.contains(hostingController.view) {\n            contentView.addAutoLayoutSubview(hostingController.view)\n            hostingController.view.vc.edges()\n        }\n\n        if requiresControllerMove {\n            hostingController.didMove(toParent: parentController)\n        }\n    }\n\n    // MARK: Private\n\n    private let hostingController = NoNavigationHostingController<Content?>(rootView: nil)\n\n    private weak var view: UIView?\n    private weak var contentView: UIView?\n}\n\npublic final class HostingTableViewCell<Content: View>: UITableViewCell {\n    // MARK: Public\n\n    public func set(rootView: Content, parentController: UIViewController) {\n        hostingController.set(rootView: rootView, parentController: parentController)\n    }\n\n    // MARK: Private\n\n    private lazy var hostingController = ViewHostingController<Content?>(view: self, contentView: contentView)\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/InvertInDarkModeModifier.swift",
    "content": "//\n//  InvertInDarkModeModifier.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-20.\n//\n\nimport SwiftUI\n\nprivate struct InvertInDarkModeModifier: ViewModifier {\n    @Environment(\\.colorScheme) var colorScheme\n\n    func body(content: Content) -> some View {\n        if colorScheme == .dark {\n            content.colorInvert()\n        } else {\n            content\n        }\n    }\n}\n\nextension View {\n    public func invertInDarkMode() -> some View {\n        modifier(InvertInDarkModeModifier())\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/PopoverNavigationController.swift",
    "content": "//\n//  PopoverNavigationController.swift\n//\n//\n//  Created by Afifi, Mohamed on 9/6/21.\n//\n\nimport UIKit\n\nprivate class ContentSizeUpdatableNavigationController: UINavigationController {\n    override func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {\n        preferredContentSize = container.preferredContentSize\n    }\n}\n\npublic class PopoverNavigationController: UIViewController, UINavigationControllerDelegate {\n    // MARK: Lifecycle\n\n    public init(rootViewController: UIViewController) {\n        wrapped = ContentSizeUpdatableNavigationController(rootViewController: rootViewController)\n        super.init(nibName: nil, bundle: nil)\n        wrapped.delegate = self\n    }\n\n    @available(*, unavailable)\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Public\n\n    public let wrapped: UINavigationController\n\n    override public func viewDidLoad() {\n        super.viewDidLoad()\n        addFullScreenChild(wrapped)\n    }\n\n    override public func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {\n        super.preferredContentSizeDidChange(forChildContentContainer: container)\n        preferredContentSize = container.preferredContentSize\n    }\n\n    public func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {\n        navigationController.preferredContentSize = viewController.preferredContentSize\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/PreferredContentSizeMatchesScrollView.swift",
    "content": "//\n//  PreferredContentSizeMatchesScrollView.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-12-27.\n//\n\nimport SwiftUI\n\npublic struct PreferredContentSizeMatchesScrollView<ScrollViewContent: View>: View {\n    // MARK: Lifecycle\n\n    public init(@ViewBuilder content: () -> ScrollViewContent) {\n        self.content = content()\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        PreferredContentSizeMatchesScrollViewBody(content: content)\n    }\n\n    // MARK: Private\n\n    private let content: ScrollViewContent\n}\n\npublic extension ScrollView {\n    func preferredContentSizeMatchesScrollView() -> some View {\n        PreferredContentSizeMatchesScrollView {\n            self\n        }\n    }\n}\n\nprivate struct PreferredContentSizeMatchesScrollViewBody<ScrollViewContent: View>: UIViewControllerRepresentable {\n    class PreferredContentSizeMatchesScrollViewController: UIHostingController<ScrollViewContent> {\n        override func viewWillAppear(_ animated: Bool) {\n            super.viewWillAppear(animated)\n            view.backgroundColor = nil\n        }\n\n        override func viewDidLayoutSubviews() {\n            super.viewDidLayoutSubviews()\n\n            // Update preferredContentSize in the next run loop to prevent a recursion.\n            DispatchQueue.main.async {\n                if let scrollView = self.view.firstScrollView() {\n                    if scrollView.contentSize.height > self.preferredContentSize.height {\n                        self.preferredContentSize = scrollView.contentSize\n                    }\n                }\n            }\n        }\n    }\n\n    let content: ScrollViewContent\n\n    func makeUIViewController(context: Context) -> PreferredContentSizeMatchesScrollViewController {\n        PreferredContentSizeMatchesScrollViewController(rootView: content)\n    }\n\n    func updateUIViewController(_ view: PreferredContentSizeMatchesScrollViewController, context: Context) {\n        view.rootView = content\n    }\n}\n\nprivate extension UIView {\n    func firstScrollView() -> UIScrollView? {\n        if let scrollView = self as? UIScrollView {\n            return scrollView\n        }\n        for s in subviews {\n            if let scrollView = s.firstScrollView() {\n                return scrollView\n            }\n        }\n        return nil\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/SheetPresentationDetents.swift",
    "content": "//\n//  SheetPresentationDetents.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-20.\n//\n\nimport SwiftUI\n\npublic enum SheetPresentationDetent {\n    case large\n    case medium\n    case height(CGFloat)\n\n    @available(iOS 16.0, *)\n    var presentationDetent: PresentationDetent {\n        switch self {\n        case .large: .large\n        case .medium: .medium\n        case .height(let height): .height(height)\n        }\n    }\n}\n\npublic enum SheetPresentationAdaptation {\n    case none\n\n    @available(iOS 16.4, *)\n    var presentationAdaptation: PresentationAdaptation {\n        switch self {\n        case .none: .none\n        }\n    }\n}\n\nprivate struct SheetPresentationBackground<S: ShapeStyle>: ViewModifier {\n    let style: S\n\n    func body(content: Content) -> some View {\n        if #available(iOS 16.4, *) {\n            content\n                .presentationBackground(style)\n        } else {\n            content\n        }\n    }\n}\n\nprivate struct SheetPresentationDetents: ViewModifier {\n    let detents: [SheetPresentationDetent]\n\n    func body(content: Content) -> some View {\n        if #available(iOS 16.0, *) {\n            content\n                .presentationDetents(presentationDetents)\n        } else {\n            content\n        }\n    }\n\n    @available(iOS 16.0, *)\n    private var presentationDetents: Set<PresentationDetent> {\n        let presentationDetents = detents.map { detent in\n            detent.presentationDetent\n        }\n        return Set(presentationDetents)\n    }\n}\n\nprivate struct SheetPresentationAdaptationModifier: ViewModifier {\n    let presentationAdaptation: SheetPresentationAdaptation\n\n    func body(content: Content) -> some View {\n        if #available(iOS 16.4, *) {\n            content\n                .presentationCompactAdaptation(presentationAdaptation.presentationAdaptation)\n        } else {\n            content\n        }\n    }\n}\n\nextension View {\n    public func sheetPresentationDetents(_ detents: [SheetPresentationDetent]) -> some View {\n        modifier(SheetPresentationDetents(detents: detents))\n    }\n\n    public func sheetPresentationCompactAdaptation(_ adaptation: SheetPresentationAdaptation) -> some View {\n        modifier(SheetPresentationAdaptationModifier(presentationAdaptation: adaptation))\n    }\n\n    public func sheetPresentationBackground(_ style: some ShapeStyle) -> some View {\n        modifier(SheetPresentationBackground(style: style))\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/SingleAxisGeometryReader.swift",
    "content": "//\n//  SingleAxisGeometryReader.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-02-13.\n//\n\nimport SwiftUI\n\n// Author: https://www.wooji-juice.com/blog/stupid-swiftui-tricks-single-axis-geometry-reader.html\n\npublic struct SingleAxisGeometryReader<Content: View>: View {\n    private struct SizeKey: PreferenceKey {\n        static var defaultValue: CGFloat { 10 }\n\n        static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {\n            value = max(value, nextValue())\n        }\n    }\n\n    // MARK: Lifecycle\n\n    public init(\n        axis: Axis = .horizontal,\n        alignment: Alignment = .center,\n        content: @escaping (CGFloat) -> Content\n    ) {\n        self.axis = axis\n        self.alignment = alignment\n        self.content = content\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        content(size)\n            .frame(\n                maxWidth: axis == .horizontal ? .infinity : nil,\n                maxHeight: axis == .vertical ? .infinity : nil,\n                alignment: alignment\n            )\n            .background(GeometryReader { proxy in\n                Color.clear.preference(key: SizeKey.self, value: axis == .horizontal ? proxy.size.width : proxy.size.height)\n            })\n            .onPreferenceChange(SizeKey.self) { size = $0 }\n    }\n\n    // MARK: Private\n\n    @State private var size: CGFloat = SizeKey.defaultValue\n\n    private let axis: Axis\n    private let alignment: Alignment\n    private let content: (CGFloat) -> Content\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/StaticViewControllerRepresentable.swift",
    "content": "//\n//  StaticViewControllerRepresentable.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-25.\n//\n\nimport SwiftUI\n\npublic struct StaticViewControllerRepresentable: UIViewControllerRepresentable {\n    // MARK: Lifecycle\n\n    public init(viewController: UIViewController) {\n        self.viewController = viewController\n    }\n\n    // MARK: Public\n\n    public let viewController: UIViewController\n\n    public func makeUIViewController(context: Context) -> UIViewController {\n        viewController\n    }\n\n    public func updateUIViewController(_ uiViewController: UIViewController, context: Context) { }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/TextAlignmentModifier.swift",
    "content": "//\n//  TextAlignmentModifier.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-20.\n//\n\nimport Foundation\nimport SwiftUI\n\nextension View {\n    public func textAlignment(follows characterDirection: Locale.LanguageDirection) -> some View {\n        multilineTextAlignment(characterDirection.textAlignment)\n            .frame(maxWidth: .infinity, alignment: characterDirection.alignment)\n            .environment(\\.layoutDirection, .leftToRight)\n    }\n}\n\nprivate extension Locale.LanguageDirection {\n    var alignment: Alignment {\n        self == .rightToLeft ? .trailing : .leading\n    }\n\n    var textAlignment: TextAlignment {\n        self == .rightToLeft ? .trailing : .leading\n    }\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/TextView.swift",
    "content": "// Copied from https://gist.github.com/shaps80/8a3170160f80cfdc6e8179fa0f5e1621\n\nimport SwiftUI\n\n// TODO: Use SwiftUI.TextEditor\npublic struct TextView: View {\n    // MARK: Lifecycle\n\n    public init(_ text: Binding<String>, editing: Binding<Bool>) {\n        _text = text\n        _editing = editing\n    }\n\n    // MARK: Public\n\n    public var body: some View {\n        SwiftUITextView(\n            text: $text,\n            editing: $editing,\n            font: font\n        )\n    }\n\n    // MARK: Internal\n\n    @Binding var text: String\n    @Binding var editing: Bool\n\n    // MARK: Private\n\n    private var font: UIFont = UIFont.preferredFont(forTextStyle: .body)\n}\n\nextension TextView {\n    func font(_ textStyle: UIFont.TextStyle) -> Self {\n        font(UIFont.preferredFont(forTextStyle: textStyle))\n    }\n\n    func font(_ font: UIFont) -> Self {\n        var view = self\n        view.font = font\n        return view\n    }\n}\n\nprivate struct SwiftUITextView: UIViewRepresentable {\n    class Coordinator: NSObject, UITextViewDelegate {\n        // MARK: Lifecycle\n\n        init(_ textView: SwiftUITextView) {\n            parent = textView\n        }\n\n        // MARK: Internal\n\n        var parent: SwiftUITextView\n\n        func textViewDidChange(_ textView: UITextView) {\n            parent.text = textView.text\n        }\n\n        func textViewDidBeginEditing(_ textView: UITextView) {\n            parent.editing = true\n        }\n\n        func textViewDidEndEditing(_ textView: UITextView) {\n            parent.editing = false\n        }\n    }\n\n    @Binding var text: String\n    @Binding var editing: Bool\n    let font: UIFont\n\n    func makeCoordinator() -> Coordinator {\n        Coordinator(self)\n    }\n\n    func makeUIView(context: Context) -> UITextView {\n        let textView = UITextView()\n        textView.delegate = context.coordinator\n        textView.font = font\n        textView.adjustsFontForContentSizeCategory = true\n        textView.backgroundColor = .clear\n        return textView\n    }\n\n    func updateUIView(_ textView: UITextView, context: Context) {\n        textView.text = text\n        // move it to the next run loop to fix an iOS 13 issue\n        DispatchQueue.main.async {\n            if editing {\n                textView.becomeFirstResponder()\n            } else {\n                textView.resignFirstResponder()\n            }\n        }\n    }\n}\n\n// swiftlint:disable line_length\nstruct TextView_Previews: PreviewProvider {\n    @State static var editing: Bool = true\n\n    static var previews: some View {\n        VStack {\n            TextView(\n                .constant(\"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.\"),\n                editing: $editing\n            )\n            .font(UIFont.TextStyle.body)\n            .border(Color.red, width: 1)\n            .padding()\n        }\n        .previewLayout(.sizeThatFits)\n    }\n}\n\n// swiftlint:enable line_length\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/UIViewControllerReader.swift",
    "content": "//\n//  UIViewControllerReader.swift\n//  QuranEngine\n//\n//  Created by Mohamed Afifi on 2025-03-28.\n//\n\nimport SwiftUI\n\npublic struct UIViewControllerReader: UIViewControllerRepresentable {\n    @Binding private var viewController: UIViewController?\n    public init(viewController: Binding<UIViewController?>) {\n        _viewController = viewController\n    }\n\n    public func makeUIViewController(context: Context) -> some UIViewController {\n        let dummy = UIViewController()\n        DispatchQueue.main.async {\n            viewController = dummy\n        }\n        return dummy\n    }\n\n    public func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {}\n}\n"
  },
  {
    "path": "UI/UIx/SwiftUI/Views/WindowSafeAreaInsetsReaderViewModifier.swift",
    "content": "//\n//  WindowSafeAreaInsetsReaderViewModifier.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-12-29.\n//\n\nimport SwiftUI\n\nextension View {\n    public func readWindowSafeAreaInsets(_ safeAreaInsets: Binding<EdgeInsets>) -> some View {\n        modifier(WindowSafeAreaInsetsReaderViewModifier(safeAreaInsets: safeAreaInsets))\n    }\n}\n\nprivate struct WindowSafeAreaInsetsReaderViewModifier: ViewModifier {\n    @Binding var safeAreaInsets: EdgeInsets\n\n    func body(content: Content) -> some View {\n        content\n            .background(\n                WindowSafeAreaInsetsReader(safeAreaInsets: $safeAreaInsets)\n                    .frame(maxWidth: .infinity)\n                    .frame(height: 0.5)\n                    .accessibility(hidden: true)\n                    .allowsHitTesting(false)\n            )\n    }\n}\n\nprivate struct WindowSafeAreaInsetsReader: UIViewRepresentable {\n    class WindowSafeAreaInsetsReaderView: UIView {\n        // MARK: Lifecycle\n\n        init(safeAreaInsets: Binding<EdgeInsets>) {\n            _safeAreaInsetsBinding = safeAreaInsets\n            super.init(frame: .zero)\n            backgroundColor = UIColor.clear\n        }\n\n        @available(*, unavailable)\n        required init?(coder: NSCoder) {\n            fatalError(\"init(coder:) has not been implemented\")\n        }\n\n        // MARK: Internal\n\n        @Binding var safeAreaInsetsBinding: EdgeInsets\n\n        override func layoutSubviews() {\n            super.layoutSubviews()\n            updateWindowSafeAreaInsetsIfNeeded()\n        }\n\n        private func updateWindowSafeAreaInsetsIfNeeded() {\n            if let window {\n                let insets = window.safeAreaInsets\n                let newInsets = EdgeInsets(\n                    top: insets.top,\n                    leading: insets.left,\n                    bottom: insets.bottom,\n                    trailing: insets.right\n                )\n                if safeAreaInsetsBinding != newInsets {\n                    safeAreaInsetsBinding = newInsets\n                }\n            }\n        }\n\n        override func systemLayoutSizeFitting(_ targetSize: CGSize) -> CGSize {\n            .zero\n        }\n\n        override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize {\n            .zero\n        }\n    }\n\n    @Binding var safeAreaInsets: EdgeInsets\n\n    func makeUIView(context: Context) -> UIView {\n        let view = WindowSafeAreaInsetsReaderView(safeAreaInsets: $safeAreaInsets)\n        view.isAccessibilityElement = false\n        view.isHidden = true\n        view.isOpaque = true\n        view.isUserInteractionEnabled = false\n        return view\n    }\n\n    func updateUIView(_ view: UIView, context: Context) {}\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/DataSources/DefaultSection.swift",
    "content": "//\n//  DefaultSection.swift\n//\n//\n//  Created by Afifi, Mohamed on 9/6/21.\n//\n\npublic enum DefaultSection: Sendable {\n    case `default`\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/DataSources/NSDiffableDataSourceSnapshot++.swift",
    "content": "//\n//  NSDiffableDataSourceSnapshot++.swift\n//\n//\n//  Created by Afifi, Mohamed on 9/6/21.\n//\n\nimport UIKit\n\nextension NSDiffableDataSourceSnapshot {\n    public mutating func appendSections(_ identifiers: SectionIdentifierType...) {\n        appendSections(identifiers)\n    }\n\n    public mutating func appendItems(_ identifiers: ItemIdentifierType...) {\n        appendItems(identifiers)\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Extensions/CALayer+Extension.swift",
    "content": "//\n//  CALayer+Extension.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/1/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport QuartzCore\n\nextension CALayer {\n    public class func withoutAnimation(_ block: () -> Void) {\n        CATransaction.begin()\n        CATransaction.setValue(true, forKey: kCATransactionDisableActions)\n        block()\n        CATransaction.commit()\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Extensions/SegmentedControl+Extension.swift",
    "content": "//\n//  SegmentedControl+Extension.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 7/19/21.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport UIKit\n\nextension UISegmentedControl {\n    public func addAttributes(_ attributes: [NSAttributedString.Key: Any], for state: UIControl.State) {\n        let originalAttributes = titleTextAttributes(for: state) ?? [:]\n        let allAttributes = attributes.reduce(into: originalAttributes) { $0[$1.key] = $1.value }\n        setTitleTextAttributes(allAttributes, for: state)\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Extensions/String+Size.swift",
    "content": "//\n//  String+Size.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/1/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\nextension String {\n    public func size(withFont font: UIFont, constrainedToWidth width: CGFloat = .greatestFiniteMagnitude) -> CGSize {\n        let size = CGSize(width: width, height: .greatestFiniteMagnitude)\n        let box = (self as NSString).boundingRect(with: size, options: .usesLineFragmentOrigin, attributes: [.font: font], context: nil)\n        return CGSize(width: ceil(box.width), height: ceil(box.height))\n    }\n}\n\nextension NSAttributedString {\n    public func stringSize(constrainedToWidth width: CGFloat = .greatestFiniteMagnitude, maxNumberOfLines: Int = 0) -> CGSize {\n        var context: NSStringDrawingContext?\n        if maxNumberOfLines != 0 {\n            context = NSStringDrawingContext()\n            context?.setValue(maxNumberOfLines, forKey: \"maximumNumberOfLines\")\n        }\n        let size = CGSize(width: width, height: .greatestFiniteMagnitude)\n        let box = boundingRect(with: size, options: [.usesLineFragmentOrigin, .truncatesLastVisibleLine], context: context)\n        return CGSize(width: ceil(box.width), height: ceil(box.height))\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Extensions/UIBezierPath+Extension.swift",
    "content": "//\n//  UIBezierPath+Extension.swift\n//\n//\n//  Created by Afifi, Mohamed on 12/6/20.\n//\n\nimport UIKit\n\nextension UIBezierPath {\n    /// Returns an image of the path drawn using a stroke\n    public func image(strokeColor: UIColor?, fillColor: UIColor?) -> UIImage? {\n        let size = CGSize(\n            width: bounds.size.width + lineWidth,\n            height: bounds.size.width + lineWidth\n        )\n        UIGraphicsBeginImageContextWithOptions(size, false, 0)\n        let context = UIGraphicsGetCurrentContext()\n\n        // translate matrix so that path will be centered in bounds\n        context?.translateBy(x: lineWidth / 2, y: lineWidth / 2)\n\n        // draw\n        if let fillColor {\n            fillColor.setFill()\n            fill()\n        }\n\n        if let strokeColor {\n            strokeColor.setStroke()\n            stroke()\n        }\n\n        // grab an image of the context\n        let image = UIGraphicsGetImageFromCurrentImageContext()\n        UIGraphicsEndImageContext()\n        return image\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Extensions/UIColor+Extension.swift",
    "content": "//\n//  UIColor+Extension.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/20/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\nextension UIColor {\n    public convenience init(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat = 1) {\n        self.init(red: r / 255, green: g / 255, blue: b / 255, alpha: a)\n    }\n\n    public convenience init(gray: CGFloat, a: CGFloat = 1) {\n        self.init(r: gray, g: gray, b: gray, a: a)\n    }\n\n    public convenience init(rgb: Int) {\n        self.init(\n            r: CGFloat((rgb >> 16) & 0xFF),\n            g: CGFloat((rgb >> 08) & 0xFF),\n            b: CGFloat((rgb >> 00) & 0xFF)\n        )\n    }\n\n    public func toHexString() -> String {\n        var r: CGFloat = 0\n        var g: CGFloat = 0\n        var b: CGFloat = 0\n        var a: CGFloat = 0\n\n        getRed(&r, green: &g, blue: &b, alpha: &a)\n\n        let rgb: Int = Int(r * 255) << 16 | Int(g * 255) << 8 | Int(b * 255) << 0\n\n        return String(format: \"#%06x\", rgb)\n    }\n\n    public func rgba() -> [CGFloat] {\n        var r: CGFloat = 0, g: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0\n        getRed(&r, green: &g, blue: &b, alpha: &a)\n        return [r * 255, g * 255, b * 255, a]\n    }\n\n    public func image(size: CGSize = CGSize(width: 1, height: 1)) -> UIImage? {\n        let rect = CGRect(origin: .zero, size: size)\n        UIGraphicsBeginImageContext(rect.size)\n        setFill()\n        UIRectFill(rect)\n        let image = UIGraphicsGetImageFromCurrentImageContext()\n        UIGraphicsEndImageContext()\n        return image\n    }\n\n    // Hypothetical helper that returns a luminance value (0 for black, 1 for white)\n    private var luminance: CGFloat {\n        var r: CGFloat = 0, g: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0\n        getRed(&r, green: &g, blue: &b, alpha: &a)\n        // This is a rough approximation\n        return 0.2126 * r + 0.7152 * g + 0.0722 * b\n    }\n\n    // Blends two colors using a given factor.\n    // factor = 0 returns self, factor = 1 returns the other color.\n    private func blended(with color: UIColor, factor: CGFloat) -> UIColor {\n        var r1: CGFloat = 0, g1: CGFloat = 0, b1: CGFloat = 0, a1: CGFloat = 0\n        var r2: CGFloat = 0, g2: CGFloat = 0, b2: CGFloat = 0, a2: CGFloat = 0\n        getRed(&r1, green: &g1, blue: &b1, alpha: &a1)\n        color.getRed(&r2, green: &g2, blue: &b2, alpha: &a2)\n        return UIColor(\n            red: r1 * (1 - factor) + r2 * factor,\n            green: g1 * (1 - factor) + g2 * factor,\n            blue: b1 * (1 - factor) + b2 * factor,\n            alpha: 1.0\n        ) // We'll apply alpha separately.\n    }\n\n    // Creates a secondary label color based on the receiver (the label color).\n    private func secondaryLabelVariantDefaultTraits() -> UIColor {\n        // Use a blend factor of about 0.31 (derived from default system values)\n        let blendFactor: CGFloat = 0.31\n        // Choose a reference color depending on whether the label color is light or dark.\n        // For light label colors (high luminance), we use the dark-mode reference.\n        let lightReference = UIColor(red: 193 / 255.0, green: 193 / 255.0, blue: 216 / 255.0, alpha: 1.0)\n        let darkReference = UIColor(red: 190 / 255.0, green: 190 / 255.0, blue: 222 / 255.0, alpha: 1.0)\n        let reference = luminance < 0.5 ? lightReference : darkReference\n        // Blend the label color with the chosen reference.\n        let blendedColor = blended(with: reference, factor: blendFactor)\n        // Return the blended color with an effective alpha of 0.6.\n        return blendedColor.withAlphaComponent(0.6)\n    }\n\n    // Generates a secondary background color from the primary background color.\n    // For light backgrounds (high luminance), we blend with a dark reference.\n    // For dark backgrounds (low luminance), we blend with a light reference.\n    private func secondaryBackgroundVariantDefaultTraits() -> UIColor {\n        let blendFactor: CGFloat = 0.31\n        // For a light primary background (e.g., white), secondary should be slightly darker.\n        let darkReference = UIColor(red: 171 / 255.0, green: 171 / 255.0, blue: 187 / 255.0, alpha: 1.0)\n        // For a dark primary background (e.g., black), secondary should be slightly lighter.\n        let lightReference = UIColor(red: 142 / 255.0, green: 142 / 255.0, blue: 149 / 255.0, alpha: 1.0)\n\n        // Reverse the test: if the primary is light, use the dark reference; if dark, use the light reference.\n        let reference = luminance > 0.5 ? darkReference : lightReference\n        return blended(with: reference, factor: blendFactor).withAlphaComponent(0.5)\n    }\n\n    public func secondaryLabelVariant() -> UIColor {\n        UIColor { trait in\n            return self.resolvedColor(with: trait).secondaryLabelVariantDefaultTraits()\n        }\n    }\n\n    public func secondaryBackgroundVariant() -> UIColor {\n        UIColor { trait in\n            return self.resolvedColor(with: trait).secondaryBackgroundVariantDefaultTraits()\n        }\n    }\n\n    /// Computes a page separator line variant relative to the label color.\n    /// - For dark label colors (luminance < 0.5), blends with white using f ≈ 0.788.\n    /// - For light label colors, blends with black using f ≈ 0.212.\n    private func pageSeparatorLineVariantDefaultTraits() -> UIColor {\n        let blendFactor: CGFloat = 1 - (201 / 255.0) // ~0.212\n        if luminance < 0.5 {\n            // Dark label (like black) → blend with white\n            return blended(with: .white, factor: blendFactor)\n        } else {\n            // Light label (like white) → blend with black\n            return blended(with: .black, factor: blendFactor)\n        }\n    }\n\n    /// Computes a page separator background variant relative to the label color.\n    /// - For dark label colors, blends with white using f ≈ 0.882.\n    /// - For light label colors, blends with black using f ≈ 0.118.\n    private func pageSeparatorBackgroundVariantDefaultTraits() -> UIColor {\n        let blendFactor: CGFloat = 1 - (225 / 255.0) // ~0.118\n        if luminance < 0.5 {\n            // Dark label → blend with white\n            return blended(with: .white, factor: blendFactor)\n        } else {\n            // Light label → blend with black\n            return blended(with: .black, factor: blendFactor)\n        }\n    }\n\n    public func pageSeparatorLineVariant() -> UIColor {\n        UIColor { trait in\n            return self.resolvedColor(with: trait).pageSeparatorLineVariantDefaultTraits()\n        }\n    }\n\n    public func pageSeparatorBackgroundVariant() -> UIColor {\n        UIColor { trait in\n            return self.resolvedColor(with: trait).pageSeparatorBackgroundVariantDefaultTraits()\n        }\n    }\n\n    /// Returns a new color with its brightness multiplied by the given factor.\n    public func adjustedBrightness(by factor: CGFloat) -> UIColor {\n        var hue: CGFloat = 0, saturation: CGFloat = 0, brightness: CGFloat = 0, alpha: CGFloat = 0\n        // If the color can’t be converted to HSB, return self.\n        guard getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha) else {\n            return self\n        }\n        // Multiply brightness (clamped between 0 and 1).\n        let newBrightness = min(max(brightness * factor, 0), 1)\n        return UIColor(hue: hue, saturation: saturation, brightness: newBrightness, alpha: alpha)\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Extensions/UIImage+Extension.swift",
    "content": "//\n//  UIImage+Extension.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/4/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\nextension UIImage {\n    public func tintedImage(withColor color: UIColor) -> UIImage? {\n        guard let cgImage else { return nil }\n\n        UIGraphicsBeginImageContextWithOptions(size, false, scale)\n        let context = UIGraphicsGetCurrentContext()\n        context?.translateBy(x: 0, y: size.height)\n        context?.scaleBy(x: 1, y: -1)\n        context?.setBlendMode(.normal)\n        let rect = CGRect(origin: .zero, size: size)\n        context?.clip(to: rect, mask: cgImage)\n        color.setFill()\n        context?.fill(rect)\n        let newImage = UIGraphicsGetImageFromCurrentImageContext()\n        UIGraphicsEndImageContext()\n        return newImage\n    }\n\n    public func rounded(by cornerRadius: CGFloat) -> UIImage? {\n        let rect = CGRect(origin: .zero, size: size)\n        UIGraphicsBeginImageContextWithOptions(size, false, scale)\n        let path = UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius)\n        path.addClip()\n        draw(in: rect)\n        let newImage = UIGraphicsGetImageFromCurrentImageContext()\n        UIGraphicsEndImageContext()\n        return newImage\n    }\n\n    public func rotate(by radians: Float) -> UIImage? {\n        var newSize = CGRect(origin: CGPoint.zero, size: size).applying(CGAffineTransform(rotationAngle: CGFloat(radians))).size\n        // Trim off the extremely small float value to prevent core graphics from rounding it up\n        newSize.width = floor(newSize.width)\n        newSize.height = floor(newSize.height)\n\n        UIGraphicsBeginImageContext(newSize)\n        let context = UIGraphicsGetCurrentContext()\n\n        // Move origin to middle\n        context?.translateBy(x: newSize.width / 2, y: newSize.height / 2)\n        // Rotate around middle\n        context?.rotate(by: CGFloat(radians))\n\n        draw(in: CGRect(x: -size.width / 2, y: -size.height / 2, width: size.width, height: size.height))\n\n        let newImage = UIGraphicsGetImageFromCurrentImageContext()\n        UIGraphicsEndImageContext()\n\n        return newImage\n    }\n\n    public func scaled(toHeight height: CGFloat) -> UIImage? {\n        let width = height / size.height * size.width\n        UIGraphicsBeginImageContextWithOptions(CGSize(width: width, height: height), false, scale)\n        draw(in: CGRect(origin: CGPoint.zero, size: CGSize(width: width, height: height)))\n        let newImage = UIGraphicsGetImageFromCurrentImageContext()\n        UIGraphicsEndImageContext()\n        return newImage\n    }\n\n    public func inverted() -> UIImage {\n        guard let filter = CIFilter(name: \"CIColorInvert\") else {\n            return self\n        }\n        filter.setDefaults()\n        filter.setValue(CIImage(image: self), forKey: kCIInputImageKey)\n        guard let outputImage = filter.outputImage else {\n            return self\n        }\n        let context = CIContext(options: nil)\n        guard let cgImage = context.createCGImage(outputImage, from: outputImage.extent) else {\n            return self\n        }\n        return UIImage(cgImage: cgImage)\n    }\n\n    public static func canavas(size: CGSize, drawing images: [(image: UIImage, origin: CGPoint)]) -> UIImage? {\n        UIGraphicsBeginImageContextWithOptions(size, false, 0)\n\n        for (image, origin) in images {\n            image.draw(at: origin)\n        }\n\n        let newImage = UIGraphicsGetImageFromCurrentImageContext()\n        UIGraphicsEndImageContext()\n        return newImage\n    }\n\n    public static func symbol(_ name: String) -> UIImage {\n        UIImage(systemName: name)!\n    }\n\n    public static func symbol(_ name: String, withConfiguration configuration: UIImage.Configuration?) -> UIImage {\n        UIImage(systemName: name, withConfiguration: configuration)!\n    }\n\n    public static func filledImage(fillColor: UIColor, radius: CGFloat, lineColor: UIColor, lineWidth: CGFloat) -> UIImage? {\n        UIGraphicsBeginImageContextWithOptions(CGSize(width: radius * 2, height: radius * 2), false, 0)\n\n        let bezierPath = UIBezierPath(\n            roundedRect: CGRect(\n                x: lineWidth,\n                y: lineWidth,\n                width: (radius - lineWidth) * 2,\n                height: (radius - lineWidth) * 2\n            ),\n            cornerRadius: radius\n        )\n        bezierPath.lineWidth = lineWidth\n\n        lineColor.setStroke()\n        fillColor.setFill()\n\n        bezierPath.stroke()\n        bezierPath.fill()\n\n        let image = UIGraphicsGetImageFromCurrentImageContext()\n\n        UIGraphicsEndImageContext()\n\n        return image?.resizableImage(withCapInsets: UIEdgeInsets(top: radius, left: radius, bottom: radius, right: radius))\n    }\n\n    /// Returns a tinted version of the image where all colors are remapped to shades of the provided tintColor.\n    ///\n    /// - Parameter tintColor: The primary color you want to use (for example, UIColor.red).\n    /// - Returns: A new UIImage tinted with the provided color.\n    public func tintedImageUsingFalseColorFilter(with tintColor: UIColor) -> UIImage? {\n        // Create a CIImage from the UIImage.\n        guard let ciImage = CIImage(image: self),\n              let falseColorFilter = CIFilter(name: \"CIFalseColor\")\n        else {\n            return nil\n        }\n\n        falseColorFilter.setValue(ciImage, forKey: kCIInputImageKey)\n\n        // Define two colors very close to each other based on your tint color.\n        // The \"shadow\" color is a slightly darker version.\n        let shadowColor = tintColor.adjustedBrightness(by: 0.95)\n\n        // Set the filter’s colors. The filter maps black to inputColor0 and white to inputColor1.\n        falseColorFilter.setValue(CIColor(color: shadowColor), forKey: \"inputColor0\")\n        falseColorFilter.setValue(CIColor(color: tintColor), forKey: \"inputColor1\")\n\n        // Get the output image from the filter.\n        guard let outputCIImage = falseColorFilter.outputImage else { return nil }\n\n        // Create a context and generate a CGImage.\n        let context = CIContext(options: nil)\n        guard let cgImage = context.createCGImage(outputCIImage, from: outputCIImage.extent) else { return nil }\n\n        // Return a new UIImage.\n        return UIImage(cgImage: cgImage, scale: scale, orientation: imageOrientation)\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Extensions/UITableView+Extension.swift",
    "content": "//\n//  UITableView+Extension.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/22/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\nextension UITableView {\n    public func scrollToTop(animated: Bool) {\n        scrollRectToVisible(CGRect(x: 0, y: 0, width: 1, height: 1), animated: true)\n    }\n}\n\npublic extension UITableViewCell {\n    static var reuseId: String {\n        String(describing: self)\n    }\n}\n\npublic extension UICollectionViewCell {\n    static var reuseId: String {\n        String(describing: self)\n    }\n}\n\npublic extension UICollectionView {\n    func dequeueReusableCell<CellType: UICollectionViewCell>(_ cellType: CellType.Type, for indexPath: IndexPath) -> CellType {\n        let cell = dequeueReusableCell(withReuseIdentifier: CellType.reuseId, for: indexPath)\n        guard let typedCell = cell as? CellType else {\n            fatalError(\"Cannot cast cell \\(cell) to type \\(CellType.self)\")\n        }\n        return typedCell\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Extensions/UIView+AutoLayout.swift",
    "content": "//\n//  UIView+AutoLayout.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/29/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\nextension UIView {\n    public func addAutoLayoutSubview(_ subview: UIView) {\n        subview.translatesAutoresizingMaskIntoConstraints = false\n        addSubview(subview)\n    }\n\n    @discardableResult\n    public func addParentLeadingConstraint(_ view: UIView, value: CGFloat = 0) -> NSLayoutConstraint {\n        let constraint = NSLayoutConstraint(\n            item: view,\n            attribute: NSLayoutConstraint.Attribute.leading,\n            relatedBy: NSLayoutConstraint.Relation.equal,\n            toItem: self,\n            attribute: NSLayoutConstraint.Attribute.leading,\n            multiplier: 1,\n            constant: value\n        )\n        addConstraint(constraint)\n        return constraint\n    }\n\n    @discardableResult\n    public func addParentTrailingConstraint(_ view: UIView, value: CGFloat = 0) -> NSLayoutConstraint {\n        let constraint = NSLayoutConstraint(\n            item: self,\n            attribute: NSLayoutConstraint.Attribute.trailing,\n            relatedBy: NSLayoutConstraint.Relation.equal,\n            toItem: view,\n            attribute: NSLayoutConstraint.Attribute.trailing,\n            multiplier: 1,\n            constant: value\n        )\n        addConstraint(constraint)\n        return constraint\n    }\n\n    @discardableResult\n    public func addParentTopConstraint(_ view: UIView, value: CGFloat = 0) -> NSLayoutConstraint {\n        let constraint = NSLayoutConstraint(\n            item: view,\n            attribute: NSLayoutConstraint.Attribute.top,\n            relatedBy: NSLayoutConstraint.Relation.equal,\n            toItem: self,\n            attribute: NSLayoutConstraint.Attribute.top,\n            multiplier: 1,\n            constant: value\n        )\n        addConstraint(constraint)\n        return constraint\n    }\n\n    @discardableResult\n    public func addParentBottomConstraint(_ view: UIView, value: CGFloat = 0) -> NSLayoutConstraint {\n        let constraint = NSLayoutConstraint(\n            item: self,\n            attribute: NSLayoutConstraint.Attribute.bottom,\n            relatedBy: NSLayoutConstraint.Relation.equal,\n            toItem: view,\n            attribute: NSLayoutConstraint.Attribute.bottom,\n            multiplier: 1,\n            constant: value\n        )\n        addConstraint(constraint)\n        return constraint\n    }\n\n    @discardableResult\n    public func addParentCenterXConstraint(_ view: UIView, value: CGFloat = 0) -> NSLayoutConstraint {\n        let constraint = NSLayoutConstraint(\n            item: view,\n            attribute: NSLayoutConstraint.Attribute.centerX,\n            relatedBy: NSLayoutConstraint.Relation.equal,\n            toItem: self,\n            attribute: NSLayoutConstraint.Attribute.centerX,\n            multiplier: 1,\n            constant: value\n        )\n        addConstraint(constraint)\n        return constraint\n    }\n\n    @discardableResult\n    public func addParentCenterYConstraint(_ view: UIView, value: CGFloat = 0) -> NSLayoutConstraint {\n        let constraint = NSLayoutConstraint(\n            item: view,\n            attribute: NSLayoutConstraint.Attribute.centerY,\n            relatedBy: NSLayoutConstraint.Relation.equal,\n            toItem: self,\n            attribute: NSLayoutConstraint.Attribute.centerY,\n            multiplier: 1,\n            constant: value\n        )\n        addConstraint(constraint)\n        return constraint\n    }\n\n    @discardableResult\n    public func addHeightConstraint(_ value: CGFloat) -> NSLayoutConstraint {\n        let constraint = NSLayoutConstraint(\n            item: self,\n            attribute: NSLayoutConstraint.Attribute.height,\n            relatedBy: NSLayoutConstraint.Relation.equal,\n            toItem: nil,\n            attribute: NSLayoutConstraint.Attribute.notAnAttribute,\n            multiplier: 1,\n            constant: value\n        )\n        addConstraint(constraint)\n        return constraint\n    }\n\n    @discardableResult\n    public func addWidthConstraint(_ value: CGFloat) -> NSLayoutConstraint {\n        let constraint = NSLayoutConstraint(\n            item: self,\n            attribute: NSLayoutConstraint.Attribute.width,\n            relatedBy: NSLayoutConstraint.Relation.equal,\n            toItem: nil,\n            attribute: NSLayoutConstraint.Attribute.notAnAttribute,\n            multiplier: 1,\n            constant: value\n        )\n        addConstraint(constraint)\n        return constraint\n    }\n\n    @discardableResult\n    public func pinParentHorizontal(_ view: UIView, leadingValue: CGFloat = 0, trailingValue: CGFloat = 0) -> [NSLayoutConstraint] {\n        var array: [NSLayoutConstraint] = []\n        array.append(addParentLeadingConstraint(view, value: leadingValue))\n        array.append(addParentTrailingConstraint(view, value: trailingValue))\n        return array\n    }\n\n    @discardableResult\n    public func pinParentVertical(_ view: UIView, topValue: CGFloat = 0, bottomValue: CGFloat = 0) -> [NSLayoutConstraint] {\n        var array: [NSLayoutConstraint] = []\n        array.append(addParentTopConstraint(view, value: topValue))\n        array.append(addParentBottomConstraint(view, value: bottomValue))\n        return array\n    }\n\n    @discardableResult\n    public func pinParentAllDirections(\n        _ view: UIView,\n        leadingValue: CGFloat = 0,\n        trailingValue: CGFloat = 0,\n        topValue: CGFloat = 0,\n        bottomValue: CGFloat = 0\n    ) -> [NSLayoutConstraint] {\n        var array: [NSLayoutConstraint] = []\n        array += pinParentHorizontal(view, leadingValue: leadingValue, trailingValue: trailingValue)\n        array += pinParentVertical(view, topValue: topValue, bottomValue: bottomValue)\n        return array\n    }\n\n    @discardableResult\n    public func addParentCenter(_ view: UIView, centerX: CGFloat = 0, centerY: CGFloat = 0) -> [NSLayoutConstraint] {\n        var array: [NSLayoutConstraint] = []\n        array.append(addParentCenterXConstraint(view, value: centerX))\n        array.append(addParentCenterYConstraint(view, value: centerY))\n        return array\n    }\n\n    @discardableResult\n    public func addSiblingHorizontalContiguous(left: UIView, right: UIView, value: CGFloat = 0) -> NSLayoutConstraint {\n        let constraint = NSLayoutConstraint(\n            item: right,\n            attribute: NSLayoutConstraint.Attribute.leading,\n            relatedBy: NSLayoutConstraint.Relation.equal,\n            toItem: left,\n            attribute: NSLayoutConstraint.Attribute.trailing,\n            multiplier: 1,\n            constant: value\n        )\n        addConstraint(constraint)\n        return constraint\n    }\n\n    @discardableResult\n    public func addSiblingVerticalContiguous(top: UIView, bottom: UIView, value: CGFloat = 0) -> NSLayoutConstraint {\n        let constraint = NSLayoutConstraint(\n            item: bottom,\n            attribute: NSLayoutConstraint.Attribute.top,\n            relatedBy: NSLayoutConstraint.Relation.equal,\n            toItem: top,\n            attribute: NSLayoutConstraint.Attribute.bottom,\n            multiplier: 1,\n            constant: value\n        )\n        addConstraint(constraint)\n        return constraint\n    }\n\n    @discardableResult\n    public func alignSiblingTop(first: UIView, second: UIView, value: CGFloat = 0) -> NSLayoutConstraint {\n        let constraint = NSLayoutConstraint(\n            item: first,\n            attribute: NSLayoutConstraint.Attribute.top,\n            relatedBy: NSLayoutConstraint.Relation.equal,\n            toItem: second,\n            attribute: NSLayoutConstraint.Attribute.top,\n            multiplier: 1,\n            constant: value\n        )\n        addConstraint(constraint)\n        return constraint\n    }\n\n    @discardableResult\n    public func alignSiblingBottom(first: UIView, second: UIView, value: CGFloat = 0) -> NSLayoutConstraint {\n        let constraint = NSLayoutConstraint(\n            item: first,\n            attribute: NSLayoutConstraint.Attribute.bottom,\n            relatedBy: NSLayoutConstraint.Relation.equal,\n            toItem: second,\n            attribute: NSLayoutConstraint.Attribute.bottom,\n            multiplier: 1,\n            constant: value\n        )\n        addConstraint(constraint)\n        return constraint\n    }\n\n    @discardableResult\n    public func alignSiblingLeading(first: UIView, second: UIView, value: CGFloat = 0) -> NSLayoutConstraint {\n        let constraint = NSLayoutConstraint(\n            item: first,\n            attribute: NSLayoutConstraint.Attribute.leading,\n            relatedBy: NSLayoutConstraint.Relation.equal,\n            toItem: second,\n            attribute: NSLayoutConstraint.Attribute.leading,\n            multiplier: 1,\n            constant: value\n        )\n        addConstraint(constraint)\n        return constraint\n    }\n\n    @discardableResult\n    public func alignSiblingTrailing(first: UIView, second: UIView, value: CGFloat = 0) -> NSLayoutConstraint {\n        let constraint = NSLayoutConstraint(\n            item: first,\n            attribute: NSLayoutConstraint.Attribute.trailing,\n            relatedBy: NSLayoutConstraint.Relation.equal,\n            toItem: second,\n            attribute: NSLayoutConstraint.Attribute.trailing,\n            multiplier: 1,\n            constant: value\n        )\n        addConstraint(constraint)\n        return constraint\n    }\n\n    @discardableResult\n    public func addEqualWidth(views: [UIView], value: CGFloat = 0) -> [NSLayoutConstraint] {\n        assert(views.count > 1, \"should have at least 2 views\")\n\n        let view1 = views[0]\n        var constraints = [NSLayoutConstraint]()\n        for i in 1 ..< views.count {\n            let view2 = views[i]\n            let constraint = NSLayoutConstraint(\n                item: view1,\n                attribute: NSLayoutConstraint.Attribute.width,\n                relatedBy: NSLayoutConstraint.Relation.equal,\n                toItem: view2,\n                attribute: NSLayoutConstraint.Attribute.width,\n                multiplier: 1,\n                constant: value\n            )\n            constraints.append(constraint)\n            addConstraint(constraint)\n        }\n\n        return constraints\n    }\n\n    @discardableResult\n    public func addEqualHeight(views: [UIView], value: CGFloat = 0) -> [NSLayoutConstraint] {\n        assert(views.count > 1, \"should have at least 2 views\")\n\n        let view1 = views[0]\n        var constraints = [NSLayoutConstraint]()\n        for i in 1 ..< views.count {\n            let view2 = views[i]\n            let constraint = NSLayoutConstraint(\n                item: view1,\n                attribute: NSLayoutConstraint.Attribute.height,\n                relatedBy: NSLayoutConstraint.Relation.equal,\n                toItem: view2,\n                attribute: NSLayoutConstraint.Attribute.height,\n                multiplier: 1,\n                constant: value\n            )\n            constraints.append(constraint)\n            addConstraint(constraint)\n        }\n\n        return constraints\n    }\n\n    @discardableResult\n    public func addEqualSize(views: [UIView], width: CGFloat = 0, height: CGFloat = 0) -> [NSLayoutConstraint] {\n        var array: [NSLayoutConstraint] = []\n        array.append(contentsOf: addEqualHeight(views: views, value: height))\n        array.append(contentsOf: addEqualWidth(views: views, value: width))\n        return array\n    }\n\n    @discardableResult\n    public func addSizeConstraints(width: CGFloat, height: CGFloat) -> [NSLayoutConstraint] {\n        var array: [NSLayoutConstraint] = []\n        array.append(addWidthConstraint(width))\n        array.append(addHeightConstraint(height))\n        return array\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Extensions/UIView+Extension.swift",
    "content": "//\n//  UIView+Extension.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 10/30/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\nextension UIView {\n    public func findFirstResponder() -> UIView? {\n        if isFirstResponder { return self }\n        for subView in subviews {\n            if let responder = subView.findFirstResponder() {\n                return responder\n            }\n        }\n        return nil\n    }\n\n    @discardableResult\n    public func loadViewFrom(nibClass: UIView.Type) -> UIView {\n        loadViewFrom(nibName: String(describing: nibClass))\n    }\n\n    @discardableResult\n    public func loadViewFrom(nibName: String, bundle: Bundle? = nil) -> UIView {\n        let nib = UINib(nibName: nibName, bundle: bundle)\n        guard let contentView = nib.instantiate(withOwner: self, options: nil).first as? UIView else {\n            fatalError(\"Couldn't load '\\(nibName).xib' as the first item should be a UIView subclass.\")\n        }\n        contentView.translatesAutoresizingMaskIntoConstraints = false\n        addSubview(contentView)\n        addConstraints(NSLayoutConstraint.constraints(\n            withVisualFormat: \"V:|[view]|\",\n            options: [],\n            metrics: nil,\n            views: [\"view\": contentView]\n        ))\n        addConstraints(NSLayoutConstraint.constraints(\n            withVisualFormat: \"H:|[view]|\",\n            options: [],\n            metrics: nil,\n            views: [\"view\": contentView]\n        ))\n        return contentView\n    }\n\n    public class func loadFromNib(owner: AnyObject? = nil) -> Self {\n        let nibName = String(describing: self)\n        let nib = UINib(nibName: nibName, bundle: nil)\n        let views = nib.instantiate(withOwner: owner, options: nil)\n        precondition(views.count == 1, \"\\(nibName).xib should have only 1 top level object\")\n        guard let view = views[0] as? Self else {\n            fatalError(\"Couldn't load '\\(nibName).xib' as the first item should be a UIView subclass.\")\n        }\n        return view\n    }\n\n    public func findSubview<T: UIView>(ofType type: T.Type) -> T? {\n        // breadth-first search\n        var queue = subviews\n        while !queue.isEmpty {\n            let subview = queue.removeFirst()\n            if let subview = subview as? T {\n                return subview\n            }\n            queue.append(contentsOf: subview.subviews)\n        }\n        return nil\n    }\n\n    public func findSubviews<T: UIView>(ofType type: T.Type) -> [T] {\n        // breadth-first search\n        var queue = subviews\n        var result: [T] = []\n        while !queue.isEmpty {\n            let subview = queue.removeFirst()\n            if let subview = subview as? T {\n                result.append(subview)\n            }\n            queue.append(contentsOf: subview.subviews)\n        }\n        return result\n    }\n\n    /// Finds all visible subviews of a specific type in the view hierarchy.\n    /// - Parameter type: The type of subviews to find.\n    /// - Returns: An array of visible subviews of the specified type.\n    public func findVisibleSubviews<T: UIView>(ofType type: T.Type) -> [T] {\n        findSubviews(ofType: T.self) { subview in\n            subview.isHidden == false && subview.alpha > 0 && subview.frame.size != .zero\n        }\n    }\n\n    private func findSubviews<T: UIView>(ofType type: T.Type, include: (UIView) -> Bool) -> [T] {\n        var filteredSubviews: [T] = []\n\n        // Function to recursively search for subviews of the specified type.\n        func findInView(_ view: UIView) {\n            for subview in view.subviews where include(subview) {\n                if let typedSubview = subview as? T {\n                    filteredSubviews.append(typedSubview)\n                }\n                findInView(subview) // Recursively search in the subview.\n            }\n        }\n\n        findInView(self) // Start the search from the current view.\n        return filteredSubviews\n    }\n}\n\nextension UIView {\n    public var circularRadius: CGFloat {\n        min(bounds.width, bounds.height) / 2\n    }\n}\n\nextension UIView {\n    public var readableContentInsets: NSDirectionalEdgeInsets {\n        let readbleContentFrame = readableContentGuide.layoutFrame\n        return NSDirectionalEdgeInsets(\n            top: readbleContentFrame.minY,\n            leading: readbleContentFrame.minX,\n            bottom: bounds.height - readbleContentFrame.maxY,\n            trailing: bounds.width - readbleContentFrame.maxX\n        )\n    }\n}\n\nextension UIView {\n    public func snapshot(of area: CGRect? = nil) -> UIImage {\n        let rect = area ?? bounds\n        let renderer = UIGraphicsImageRenderer(size: rect.size)\n        return renderer.image { _ in\n            drawHierarchy(in: CGRect(origin: CGPoint(x: -rect.origin.x, y: -rect.origin.y), size: bounds.size), afterScreenUpdates: true)\n        }\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Extensions/UIViewController+Extensions.swift",
    "content": "//\n//  UIViewController+Extensions.swift\n//  Bday\n//\n//  Created by Mohamed Afifi on 1/15/19.\n//  Copyright © 2019 Varaw. All rights reserved.\n//\nimport UIKit\n\npublic extension UIViewController {\n    func addFullScreenChild(_ viewController: UIViewController) {\n        addChild(viewController)\n        view.addAutoLayoutSubview(viewController.view)\n        viewController.view.vc.edges()\n        viewController.didMove(toParent: self)\n    }\n\n    func removeSelfFromParentIfNeeded() {\n        if parent == nil {\n            return\n        }\n        willMove(toParent: nil)\n        view.removeFromSuperview()\n        removeFromParent()\n        didMove(toParent: nil)\n    }\n\n    func removeChild(_ viewController: UIViewController) {\n        viewController.removeSelfFromParentIfNeeded()\n    }\n\n    func rotateToPortraitIfPhone() {\n        if traitCollection.userInterfaceIdiom == .phone {\n            UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: \"orientation\")\n        }\n    }\n\n    func setPreferredContentSize(to controller: UIViewController, min minSize: CGSize, max maxSize: CGSize) {\n        let size = controller.view.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)\n        let width = min(maxSize.width, max(minSize.width, size.width))\n        let height = min(maxSize.height, max(minSize.height, size.height))\n        preferredContentSize = CGSize(width: width, height: height)\n    }\n\n    func deepPresentedViewController() -> UIViewController {\n        var deepPresented: UIViewController = self\n        while let presented = deepPresented.presentedViewController {\n            deepPresented = presented\n        }\n        return deepPresented\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Extensions/UIWIndow+Extensions.swift",
    "content": "//\n//  UIWindowExtensions.swift\n//  SwifterSwift\n//\n//  Created by Omar Albeik on 6/2/18.\n//  Copyright © 2018 SwifterSwift\n//\n#if canImport(UIKit) && os(iOS)\n    import UIKit\n\n    // MARK: - Methods\n\n    public extension UIWindow {\n        /// SwifterSwift: Switch current root view controller with a new view controller.\n        ///\n        /// - Parameters:\n        ///   - viewController: new view controller.\n        ///   - animated: set to true to animate view controller change (default is true).\n        ///   - duration: animation duration in seconds (default is 0.5).\n        ///   - options: animation options (default is .transitionFlipFromRight).\n        ///   - completion: optional completion handler called after view controller is changed.\n        func switchRootViewController(\n            to viewController: UIViewController,\n            animated: Bool = true,\n            duration: TimeInterval = 0.5,\n            options: UIView.AnimationOptions = .transitionFlipFromRight,\n            _ completion: (() -> Void)? = nil\n        ) {\n            guard animated else {\n                rootViewController = viewController\n                completion?()\n                return\n            }\n\n            UIView.transition(with: self, duration: duration, options: options, animations: {\n                let oldState = UIView.areAnimationsEnabled\n                UIView.setAnimationsEnabled(false)\n                self.rootViewController = viewController\n                UIView.setAnimationsEnabled(oldState)\n            }, completion: { _ in\n                completion?()\n            })\n        }\n    }\n\n#endif\n"
  },
  {
    "path": "UI/UIx/UIKit/Miscellaneous/NSDirectionalEdgeInsets++.swift",
    "content": "//\n//  NSDirectionalEdgeInsets++.swift\n//\n//\n//  Created by Mohamed Afifi on 2024-01-20.\n//\n\nimport UIKit\n\nextension UIView {\n    public var directionalSafeAreaInsets: NSDirectionalEdgeInsets {\n        NSDirectionalEdgeInsets(safeAreaInsets, within: self)\n    }\n}\n\nextension NSDirectionalEdgeInsets {\n    public init(_ insets: UIEdgeInsets, within view: UIView) {\n        let top = insets.top\n        let bottom = insets.bottom\n\n        let leading: CGFloat\n        let trailing: CGFloat\n        switch view.effectiveUserInterfaceLayoutDirection {\n        case .leftToRight:\n            leading = insets.left\n            trailing = insets.right\n        case .rightToLeft:\n            leading = insets.right\n            trailing = insets.left\n        @unknown default:\n            fatalError(\"Unimplemented case\")\n        }\n\n        self.init(top: top, leading: leading, bottom: bottom, trailing: trailing)\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Miscellaneous/PresentationsMonitor.swift",
    "content": "//\n//  PresentationsMonitor.swift\n//\n//\n//  Created by Mohamed Afifi on 2022-12-24.\n//\n\nimport UIKit\n\npublic class PresentationsMonitor {\n    public struct Actions {\n        // MARK: Lifecycle\n\n        public init(didDismiss: @escaping (UIPresentationController) -> Void) {\n            self.didDismiss = didDismiss\n        }\n\n        // MARK: Public\n\n        public var didDismiss: (UIPresentationController) -> Void\n    }\n\n    // MARK: Lifecycle\n\n    public init() {\n    }\n\n    // MARK: Public\n\n    public func monitor(_ viewControllerToPresent: UIViewController, actions: Actions) {\n        var updatedActions = actions\n        updatedActions.didDismiss = { [weak self] presentation in\n            actions.didDismiss(presentation)\n            self?.cleanup(presentation.presentedViewController)\n        }\n        let presentation = Presentation(actions: updatedActions)\n        viewControllerToPresent.presentationController?.delegate = presentation\n        presentations[viewControllerToPresent] = presentation\n    }\n\n    public func dismiss(_ viewController: UIViewController) {\n        if let presentationController = viewController.presentationController {\n            presentations[viewController]?.actions.didDismiss(presentationController)\n        }\n    }\n\n    // MARK: Private\n\n    private var presentations: [UIViewController: Presentation] = [:]\n\n    private func cleanup(_ viewController: UIViewController) {\n        presentations[viewController] = nil\n    }\n}\n\nprivate class Presentation: NSObject, UIAdaptivePresentationControllerDelegate {\n    // MARK: Lifecycle\n\n    init(actions: PresentationsMonitor.Actions) {\n        self.actions = actions\n        super.init()\n    }\n\n    // MARK: Internal\n\n    let actions: PresentationsMonitor.Actions\n\n    func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {\n        actions.didDismiss(presentationController)\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Miscellaneous/ScrollViewPageBehavior.swift",
    "content": "//\n//  ScrollViewPageBehavior.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/5/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\nopen class ScrollViewDelegateNotifier: NSObject, UIScrollViewDelegate {\n    open var onScrollViewWillBeginDragging: (() -> Void)?\n\n    open func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {\n        onScrollViewWillBeginDragging?()\n    }\n}\n\nopen class ScrollViewPageBehavior: ScrollViewDelegateNotifier {\n    @objc open private(set) dynamic var currentPage: Int = 0\n\n    open func scrollViewDidScroll(_ scrollView: UIScrollView) {\n        let width = scrollView.frame.size.width\n        currentPage = Int(round((scrollView.contentOffset.x + (0.5 * width)) / width))\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Popover/PhonePopoverPresenter.swift",
    "content": "//\n//  PhonePopoverPresenter.swift\n//  Quran\n//\n//  Created by Afifi, Mohamed on 4/7/19.\n//  Copyright © 2019 Quran.com. All rights reserved.\n//\n\nimport UIKit\n\npublic class PhonePopoverPresenter: PopoverPresenter {\n    func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {\n        .none\n    }\n}\n\npublic class PhoneAdapativeController: NSObject, UIAdaptivePresentationControllerDelegate, UISheetPresentationControllerDelegate {\n    public static let shared = PhoneAdapativeController()\n\n    public func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {\n        .none\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Popover/PopoverPresenter.swift",
    "content": "//\n//  PopoverPresenter.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 6/19/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\n@MainActor\npublic protocol PopoverPresenterDelegate: AnyObject {\n    func didDismissPopover()\n}\n\npublic class PopoverPresenter: NSObject, UIPopoverPresentationControllerDelegate {\n    // MARK: Lifecycle\n\n    public init(delegate: PopoverPresenterDelegate?) {\n        self.delegate = delegate\n    }\n\n    // MARK: Public\n\n    public func popoverPresentationControllerDidDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) {\n        delegate?.didDismissPopover()\n    }\n\n    public func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {\n        delegate?.didDismissPopover()\n    }\n\n    // MARK: Internal\n\n    weak var delegate: PopoverPresenterDelegate?\n}\n\nextension PopoverPresenter {\n    public func present(\n        presenting: UIViewController,\n        presented: UIViewController,\n        pointingTo sourceView: UIView,\n        at sourceRect: CGRect,\n        permittedArrowDirections: UIPopoverArrowDirection = .any,\n        animated: Bool = true,\n        completion: (() -> Void)? = nil\n    ) {\n        presented.modalPresentationStyle = .popover\n        presented.popoverPresentationController?.delegate = self\n        presented.popoverPresentationController?.sourceView = sourceView\n        presented.popoverPresentationController?.sourceRect = sourceRect\n        presented.popoverPresentationController?.permittedArrowDirections = permittedArrowDirections\n        presenting.present(presented, animated: animated, completion: completion)\n    }\n}\n\nextension UIViewController {\n    public func presentPopover(\n        _ presented: UIViewController,\n        pointingTo barButtonItem: UIBarButtonItem,\n        permittedArrowDirections: UIPopoverArrowDirection = .any,\n        animated: Bool = true,\n        completion: (() -> Void)? = nil\n    ) {\n        presented.modalPresentationStyle = .popover\n        presented.presentationController?.delegate = PhoneAdapativeController.shared\n        presented.popoverPresentationController?.barButtonItem = barButtonItem\n        presented.popoverPresentationController?.permittedArrowDirections = permittedArrowDirections\n        present(presented, animated: animated, completion: completion)\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Views/BackgroundColorButton.swift",
    "content": "//\n//  BackgroundColorButton.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/8/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\nopen class BackgroundColorButton: UIButton {\n    // MARK: Lifecycle\n\n    public required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        setUp()\n    }\n\n    override public init(frame: CGRect) {\n        super.init(frame: frame)\n        setUp()\n    }\n\n    // MARK: Open\n\n    @IBInspectable open var normalBackground: UIColor = UIColor.lightGray {\n        didSet {\n            updateBackgroundColor()\n        }\n    }\n\n    @IBInspectable open var selectedBackground: UIColor = UIColor.blue {\n        didSet {\n            updateBackgroundColor()\n        }\n    }\n\n    @IBInspectable open var highlightedBackground: UIColor = UIColor.red {\n        didSet {\n            updateBackgroundColor()\n        }\n    }\n\n    @IBInspectable open var disabledBackground: UIColor = UIColor.darkGray {\n        didSet {\n            updateBackgroundColor()\n        }\n    }\n\n    override open var isSelected: Bool {\n        didSet {\n            updateBackgroundColor()\n        }\n    }\n\n    override open var isEnabled: Bool {\n        didSet {\n            updateBackgroundColor()\n        }\n    }\n\n    override open var isHighlighted: Bool {\n        didSet {\n            updateBackgroundColor()\n        }\n    }\n\n    // MARK: Private\n\n    private func setUp() {\n        updateBackgroundColor()\n    }\n\n    private func updateBackgroundColor() {\n        let background: UIColor = if !isEnabled {\n            disabledBackground\n        } else if isHighlighted {\n            highlightedBackground\n        } else if isSelected {\n            selectedBackground\n        } else {\n            normalBackground\n        }\n\n        backgroundColor = background\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Views/ByPassTouchesView.swift",
    "content": "//\n//  ByPassTouchesView.swift\n//  UIKitExtension\n//\n//  Created by Afifi, Mohamed on 3/14/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport UIKit\n\npublic class ByPassTouchesView: UIView {\n    public var catchTouchesView: UIView?\n\n    override public func point(inside point: CGPoint, with event: UIEvent?) -> Bool {\n        if catchTouchesView?.frame.contains(point) ?? false {\n            return true\n        }\n        return false\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Views/CircleView.swift",
    "content": "//\n//  CircleView.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/22/16.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\nopen class CircleView: UIView {\n    // MARK: Lifecycle\n\n    public required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        setUp()\n    }\n\n    override public init(frame: CGRect) {\n        super.init(frame: frame)\n        setUp()\n    }\n\n    // MARK: Open\n\n    @IBInspectable open var progress: CGFloat = 0.8 {\n        didSet {\n            updateLayers()\n        }\n    }\n\n    @IBInspectable open var emptyColor: UIColor = UIColor.red {\n        didSet {\n            updateLayers()\n        }\n    }\n\n    @IBInspectable open var fillColor: UIColor = UIColor.green {\n        didSet {\n            updateLayers()\n        }\n    }\n\n    override open func layoutSubviews() {\n        super.layoutSubviews()\n        updateLayers()\n    }\n\n    // MARK: Private\n\n    private let emptyCircle = CAShapeLayer()\n    private let fillCircle = CAShapeLayer()\n\n    private func setUp() {\n        layer.addSublayer(emptyCircle)\n        layer.addSublayer(fillCircle)\n        fillCircle.fillColor = nil\n        fillCircle.transform = CATransform3DMakeRotation(-.pi / 2, 0, 0, 1)\n    }\n\n    private func updateLayers() {\n        emptyCircle.frame = bounds\n        fillCircle.frame = bounds\n\n        // emtpy circle\n        //        var circleBounds = bounds\n        emptyCircle.path = UIBezierPath(ovalIn: bounds).cgPath\n        emptyCircle.fillColor = emptyColor.cgColor\n\n        // fill circle\n        fillCircle.path = UIBezierPath(ovalIn: bounds.insetBy(dx: bounds.width / 4, dy: bounds.height / 4)).cgPath\n        fillCircle.strokeColor = fillColor.cgColor\n        fillCircle.lineWidth = bounds.width / 2\n\n        CALayer.withoutAnimation {\n            fillCircle.strokeEnd = progress\n        }\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Views/CircularView.swift",
    "content": "//\n//  CircularView.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 4/2/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\nopen class CircularView: UIView {\n    override open func layoutSubviews() {\n        super.layoutSubviews()\n        layer.cornerRadius = circularRadius\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Views/GradientView.swift",
    "content": "//\n//  GradientView.swift\n//  UIKitExtension\n//\n//  Created by Afifi, Mohamed on 3/15/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport UIKit\n\npublic class GradientView: UIView {\n    // MARK: Lifecycle\n\n    public init(type: CAGradientLayerType) {\n        super.init(frame: .zero)\n        setUp(type: type)\n    }\n\n    public required init?(coder: NSCoder) {\n        super.init(coder: coder)\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Public\n\n    override public class var layerClass: AnyClass {\n        CAGradientLayer.self\n    }\n\n    public var colors: [UIColor] = [] {\n        didSet {\n            updateColors()\n        }\n    }\n\n    public var locations: [Double] {\n        get { gradientLayer.locations?.map(\\.doubleValue) ?? [] }\n        set { gradientLayer.locations = newValue.map { NSNumber(value: $0) } }\n    }\n\n    public var type: CAGradientLayerType {\n        get { gradientLayer.type }\n        set { gradientLayer.type = newValue }\n    }\n\n    public var startPoint: CGPoint {\n        get { gradientLayer.startPoint }\n        set { gradientLayer.startPoint = newValue }\n    }\n\n    public var endPoint: CGPoint {\n        get { gradientLayer.endPoint }\n        set { gradientLayer.endPoint = newValue }\n    }\n\n    override public func layoutSubviews() {\n        super.layoutSubviews()\n        if type == .radial {\n            layer.cornerRadius = min(bounds.width, bounds.height) / 2\n        }\n    }\n\n    override public func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {\n        super.traitCollectionDidChange(previousTraitCollection)\n        updateColors()\n    }\n\n    // MARK: Private\n\n    private var gradientLayer: CAGradientLayer {\n        layer as! CAGradientLayer // swiftlint:disable:this force_cast\n    }\n\n    private func setUp(type: CAGradientLayerType) {\n        if type == .radial {\n            startPoint = CGPoint(x: 0.5, y: 0.5)\n            endPoint = CGPoint(x: 1, y: 1)\n        } else {\n            startPoint = CGPoint(x: 0, y: 0.5)\n            endPoint = CGPoint(x: 1, y: 0.5)\n        }\n        gradientLayer.type = type\n        layer.masksToBounds = true\n        colors = [.green, .purple]\n    }\n\n    private func updateColors() {\n        if UIView.userInterfaceLayoutDirection(for: semanticContentAttribute) == .leftToRight {\n            gradientLayer.colors = colors.map(\\.cgColor)\n        } else {\n            gradientLayer.colors = colors.reversed().map(\\.cgColor)\n        }\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Views/MagnifyingGlass.swift",
    "content": "//\n//  MagnifyingGlass.swift\n//  UIKitExtension\n//\n//  Created by Afifi, Mohamed on 3/15/20.\n//  Copyright © 2020 Quran.com. All rights reserved.\n//\n\nimport UIKit\nimport ViewConstrainer\n\npublic class MagnifyingGlass: UIView {\n    // MARK: Lifecycle\n\n    @available(*, unavailable)\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    public init() {\n        magnifyingArea = MagnifyingAreaView()\n        super.init(frame: .zero)\n\n        // drop shadow\n        layer.shadowOpacity = 1\n        layer.shadowOffset = .zero\n        layer.shadowColor = UIColor.lightGray.cgColor\n\n        // magnify\n        magnifyingArea.layer.borderColor = UIColor.lightGray.cgColor\n        magnifyingArea.layer.borderWidth = 0.5\n        magnifyingArea.layer.masksToBounds = true\n        addAutoLayoutSubview(magnifyingArea)\n        magnifyingArea.vc.edges()\n\n        // gradient inner shadow\n        let gradient = GradientView(type: .radial)\n        gradient.colors = [UIColor.lightGray.withAlphaComponent(0),\n                           UIColor.lightGray.withAlphaComponent(0.2)]\n        addAutoLayoutSubview(gradient)\n        gradient.vc.edges()\n    }\n\n    // MARK: Public\n\n    public var touchPoint: CGPoint {\n        get { magnifyingArea.touchPoint }\n        set { magnifyingArea.touchPoint = newValue }\n    }\n\n    public var viewToMagnify: UIView? {\n        get { magnifyingArea.viewToMagnify }\n        set { magnifyingArea.viewToMagnify = newValue }\n    }\n\n    override public func layoutSubviews() {\n        super.layoutSubviews()\n        magnifyingArea.layer.cornerRadius = min(bounds.width, bounds.height) / 2\n    }\n\n    // MARK: Private\n\n    private let magnifyingArea: MagnifyingAreaView\n}\n\nprivate class MagnifyingAreaView: UIView {\n    private var scale: CGFloat = 1.5\n\n    private let imageView = UIImageView()\n    private var snapshotImage: UIImage? {\n        didSet {\n            imageView.image = snapshotImage\n            if imageView.superview == nil {\n                imageView.contentMode = .center\n                imageView.transform = CGAffineTransform(scaleX: scale, y: scale)\n                addAutoLayoutSubview(imageView)\n                imageView.vc.edges()\n            }\n        }\n    }\n\n    var viewToMagnify: UIView?\n\n    var touchPoint: CGPoint = .zero {\n        didSet {\n            refreshSnapshot() // Update the snapshot when the touch point changes\n        }\n    }\n\n    private func refreshSnapshot() {\n        guard let viewToMagnify else {\n            snapshotImage = nil\n            return\n        }\n\n        // Define the area to capture around the touch point\n        let snapshotSize = CGSize(width: bounds.width / scale, height: bounds.height / scale)\n        let snapshotOrigin = CGPoint(\n            x: touchPoint.x - snapshotSize.width / 2,\n            y: touchPoint.y - snapshotSize.height / 2\n        )\n        let snapshotRect = CGRect(origin: snapshotOrigin, size: snapshotSize)\n\n        // Capture the snapshot of the target area\n        snapshotImage = viewToMagnify.snapshot(of: snapshotRect)\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Views/RoundedShadowView.swift",
    "content": "//\n//  RoundedShadowView.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 2022-02-26.\n//  Copyright © 2022 Quran.com. All rights reserved.\n//\n\nimport UIKit\n\npublic class RoundedShadowView: UIView {\n    // MARK: Lifecycle\n\n    override init(frame: CGRect) {\n        super.init(frame: frame)\n        setUpLayer()\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Public\n\n    public var fillColor: UIColor? = .red {\n        didSet {\n            updateLayerUI()\n        }\n    }\n\n    public var cornerRadius: CGFloat = 100.0 {\n        didSet {\n            layoutLayer()\n        }\n    }\n\n    public var shadowColor: UIColor? = .black {\n        didSet {\n            updateLayerUI()\n        }\n    }\n\n    public var shadowOpacity: Float = 0.5 {\n        didSet {\n            updateLayerUI()\n        }\n    }\n\n    public var shadowRadius: CGFloat = 5 {\n        didSet {\n            updateLayerUI()\n        }\n    }\n\n    public var shadowOffset: CGSize = CGSize(width: 0, height: 3) {\n        didSet {\n            updateLayerUI()\n        }\n    }\n\n    override public func layoutSubviews() {\n        super.layoutSubviews()\n        if shadowLayer.frame != bounds {\n            layoutLayer()\n        }\n    }\n\n    override public func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {\n        super.traitCollectionDidChange(previousTraitCollection)\n        updateLayerUI()\n    }\n\n    // MARK: Private\n\n    private let shadowLayer = CAShapeLayer()\n\n    private func setUpLayer() {\n        layer.insertSublayer(shadowLayer, at: 0)\n\n        updateLayerUI()\n        layoutLayer()\n    }\n\n    private func updateLayerUI() {\n        shadowLayer.fillColor = fillColor?.resolvedColor(with: traitCollection).cgColor\n        shadowLayer.shadowOpacity = shadowOpacity\n        shadowLayer.shadowRadius = shadowRadius\n        shadowLayer.shadowColor = shadowColor?.resolvedColor(with: traitCollection).cgColor\n        shadowLayer.shadowOffset = shadowOffset\n    }\n\n    private func layoutLayer() {\n        shadowLayer.frame = bounds\n        shadowLayer.path = UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).cgPath\n        shadowLayer.shadowPath = shadowLayer.path\n    }\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Views/ScrollViewController.swift",
    "content": "//\n//  ScrollViewController.swift\n//\n//\n//  Created by Afifi, Mohamed on 7/25/21.\n//\n\nimport UIKit\n\npublic class ScrollViewController: UIViewController {\n    // MARK: Lifecycle\n\n    public init(content: UIViewController) {\n        self.content = content\n        super.init(nibName: nil, bundle: nil)\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Public\n\n    public private(set) lazy var scrollView: UIScrollView = UIScrollView()\n\n    override public func loadView() {\n        scrollView.backgroundColor = .clear\n        scrollView.alwaysBounceVertical = true\n\n        addChild(content)\n        scrollView.addAutoLayoutSubview(content.view)\n\n        content.view.vc.edges()\n        content.view.vc.height(to: scrollView)\n\n        content.didMove(toParent: self)\n        view = scrollView\n    }\n\n    override public func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {\n        super.preferredContentSizeDidChange(forChildContentContainer: container)\n        preferredContentSize = container.preferredContentSize\n    }\n\n    // MARK: Private\n\n    private let content: UIViewController\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Views/SearchControllerWithNoCancelButton.swift",
    "content": "//\n//  SearchControllerWithNoCancelButton.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 5/14/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\nopen class SearchBarWithNoCancelButton: UISearchBar {\n    override open func setShowsCancelButton(_ showsCancelButton: Bool, animated: Bool) {\n        // does nothing\n    }\n}\n\nopen class SearchControllerWithNoCancelButton: UISearchController {\n    // MARK: Open\n\n    override open var searchBar: UISearchBar {\n        _searchBar\n    }\n\n    // MARK: Private\n\n    private lazy var _searchBar: SearchBarWithNoCancelButton = SearchBarWithNoCancelButton()\n}\n"
  },
  {
    "path": "UI/UIx/UIKit/Views/TwoLineNavigationTitleView.swift",
    "content": "//\n//  TwoLineNavigationTitleView.swift\n//\n//\n//  Created by Mohamed Afifi on 2023-01-02.\n//\n\nimport UIKit\n\npublic class TwoLineNavigationTitleView: UIView {\n    // MARK: Lifecycle\n\n    public init(firstLineFont: UIFont, secondLineFont: UIFont) {\n        self.firstLineFont = firstLineFont\n        self.secondLineFont = secondLineFont\n        super.init(frame: .zero)\n        setUp()\n    }\n\n    @available(*, unavailable)\n    required init?(coder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    // MARK: Public\n\n    public var firstLine: String = \"\" {\n        didSet { updateAttributedText() }\n    }\n\n    public var secondLine: String = \"\" {\n        didSet { updateAttributedText() }\n    }\n\n    override public var intrinsicContentSize: CGSize {\n        label.attributedText?.size() ?? .zero\n    }\n\n    override public func layoutSubviews() {\n        super.layoutSubviews()\n        updateIsCompressed()\n    }\n\n    // MARK: Private\n\n    private let label = UILabel()\n\n    private let firstLineFont: UIFont\n    private let secondLineFont: UIFont\n\n    private var isCompressed = false {\n        didSet { updateAttributedText() }\n    }\n\n    private func setUp() {\n        label.numberOfLines = 0\n        label.textAlignment = .center\n\n        label.translatesAutoresizingMaskIntoConstraints = false\n        addAutoLayoutSubview(label)\n        label.vc.center()\n    }\n\n    private func updateIsCompressed(_ size: CGSize? = nil) {\n        if let containerHeight = navigationBar?.bounds.height ?? size?.height {\n            isCompressed = containerHeight < 34\n        }\n    }\n\n    private func updateAttributedText() {\n        let string = NSMutableAttributedString(string: firstLine, attributes: [\n            .font: firstLineFont,\n        ])\n        if !isCompressed {\n            string.append(NSAttributedString(string: \"\\n\"))\n        } else {\n            string.append(NSAttributedString(string: \"  \"))\n        }\n        string.append(NSAttributedString(string: secondLine, attributes: [\n            .font: secondLineFont,\n        ]))\n        label.attributedText = string\n    }\n}\n\nprivate extension UIView {\n    var navigationBar: UINavigationBar? {\n        if let navigationBar = self as? UINavigationBar {\n            return navigationBar\n        } else {\n            return superview?.navigationBar\n        }\n    }\n}\n"
  },
  {
    "path": "UI/ViewConstrainer/GroupConstrainer.swift",
    "content": "//\n//  GroupConstrainer.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 10/21/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\npublic class GroupConstrainer: ViewConstrainer {\n    // MARK: Lifecycle\n\n    init(view: UIView, constraints: [NSLayoutConstraint], chain: [NSLayoutConstraint]) {\n        self.constraints = constraints\n        super.init(view: view, chain: chain)\n    }\n\n    convenience init(constrainer: ViewConstrainer, group: [SingleConstrainer]) {\n        let chain = constrainer.chain + group.flatMap(\\.chain)\n        self.init(view: constrainer.view, constraints: group.map(\\.constraint), chain: chain)\n    }\n\n    convenience init(constrainer: ViewConstrainer, group: [GroupConstrainer]) {\n        let chain = constrainer.chain + group.flatMap(\\.chain)\n        self.init(view: constrainer.view, constraints: group.flatMap(\\.constraints), chain: chain)\n    }\n\n    // MARK: Public\n\n    public let constraints: [NSLayoutConstraint]\n}\n"
  },
  {
    "path": "UI/ViewConstrainer/SingleConstrainer.swift",
    "content": "//\n//  SingleConstrainer.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 10/21/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\npublic class SingleConstrainer: ViewConstrainer {\n    // MARK: Lifecycle\n\n    init(view: UIView, constraint: NSLayoutConstraint, chain: [NSLayoutConstraint]) {\n        self.constraint = constraint\n        super.init(view: view, chain: chain)\n    }\n\n    convenience init(constrainer: ViewConstrainer, group: GroupConstrainer) {\n        let chain = constrainer.chain + group.chain\n        self.init(view: constrainer.view, constraint: group.constraints[0], chain: chain)\n    }\n\n    // MARK: Public\n\n    public let constraint: NSLayoutConstraint\n}\n"
  },
  {
    "path": "UI/ViewConstrainer/UIView+Const.swift",
    "content": "//\n//  UIView+Const.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 10/21/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\nextension UIView {\n    public var vc: ViewConstrainer {\n        ViewConstrainer(view: self, chain: [])\n    }\n}\n"
  },
  {
    "path": "UI/ViewConstrainer/ViewConstrainer.swift",
    "content": "//\n//  ViewConstrainer.swift\n//  Quran\n//\n//  Created by Mohamed Afifi on 10/21/17.\n//\n//  Quran for iOS is a Quran reading application for iOS.\n//  Copyright (C) 2017  Quran.com\n//\n//  This program is free software: you can redistribute it and/or modify\n//  it under the terms of the GNU General Public License as published by\n//  the Free Software Foundation, either version 3 of the License, or\n//  (at your option) any later version.\n//\n//  This program is distributed in the hope that it will be useful,\n//  but WITHOUT ANY WARRANTY; without even the implied warranty of\n//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n//  GNU General Public License for more details.\n//\n\nimport UIKit\n\npublic class ViewConstrainer {\n    // MARK: Lifecycle\n\n    init(view: UIView, chain: [NSLayoutConstraint]) {\n        self.view = view\n        self.chain = chain\n    }\n\n    // MARK: Public\n\n    public internal(set) var chain: [NSLayoutConstraint]\n\n    // MARK: Internal\n\n    let view: UIView\n}\n\nextension ViewConstrainer {\n    private func commonAncestor(view1: UIView, view2: UIView) -> UIView {\n        var ancestor = view1\n        while !view2.isDescendant(of: ancestor) {\n            guard let parent = view1.superview else {\n                fatalError(\"There is no common ancestor between views \\(view1) and \\(view2).\")\n            }\n            ancestor = parent\n        }\n        return ancestor\n    }\n\n    private func commonAncestor(views: [UIView]) -> UIView {\n        var ancestor = view\n        for view in views {\n            ancestor = commonAncestor(view1: ancestor, view2: view)\n        }\n        return ancestor\n    }\n\n    private func constraintSelf(on attribute: NSLayoutConstraint.Attribute, value: CGFloat) -> SingleConstrainer {\n        let constraint = NSLayoutConstraint(\n            item: view,\n            attribute: attribute,\n            relatedBy: .equal,\n            toItem: nil,\n            attribute: .notAnAttribute,\n            multiplier: 1,\n            constant: value\n        )\n        view.addConstraint(constraint)\n        return SingleConstrainer(view: view, constraint: constraint, chain: [constraint])\n    }\n\n    private func align(views: [UIView], by value: CGFloat, on attribute: NSLayoutConstraint.Attribute) -> GroupConstrainer {\n        assert(!views.isEmpty, \"should have at least 1 view\")\n\n        let ancestor = commonAncestor(views: views)\n        var constraints: [NSLayoutConstraint] = []\n        for view in views {\n            let constraint = NSLayoutConstraint(\n                item: self.view,\n                attribute: attribute,\n                relatedBy: .equal,\n                toItem: view,\n                attribute: attribute,\n                multiplier: 1,\n                constant: value\n            )\n            ancestor.addConstraint(constraint)\n            constraints.append(constraint)\n        }\n        return GroupConstrainer(view: view, constraints: constraints, chain: constraints)\n    }\n\n    private func constraintToSuperview(\n        on attribute: NSLayoutConstraint.Attribute,\n        by value: CGFloat,\n        superviewFirst: Bool,\n        usesMargins: Bool\n    ) -> SingleConstrainer {\n        let marginalAttribute: NSLayoutConstraint.Attribute = if usesMargins {\n            switch attribute {\n            case .leading: .leadingMargin\n            case .trailing: .trailingMargin\n            case .top: .topMargin\n            case .bottom: .bottomMargin\n            default: attribute\n            }\n        } else {\n            attribute\n        }\n        guard let superview = view.superview else {\n            fatalError(\"View \\(view) should have been added as subview to another view before constraining it.\")\n        }\n        let constraint = NSLayoutConstraint(\n            item: superviewFirst ? superview : view,\n            attribute: superviewFirst ? marginalAttribute : attribute,\n            relatedBy: .equal,\n            toItem: !superviewFirst ? superview : view,\n            attribute: !superviewFirst ? marginalAttribute : attribute,\n            multiplier: 1,\n            constant: value\n        )\n        superview.addConstraint(constraint)\n        return SingleConstrainer(view: view, constraint: constraint, chain: [constraint])\n    }\n\n    private func makeLine(\n        views: [UIView],\n        by value: CGFloat,\n        on firstAttribute: NSLayoutConstraint.Attribute,\n        and secondAttribute: NSLayoutConstraint.Attribute\n    ) -> GroupConstrainer {\n        assert(!views.isEmpty, \"should have at least 1 view\")\n\n        let ancestor = commonAncestor(views: views)\n        var constraints: [NSLayoutConstraint] = []\n        for (view1, view2) in zip([view] + views, views) {\n            let constraint = NSLayoutConstraint(\n                item: view1,\n                attribute: firstAttribute,\n                relatedBy: .equal,\n                toItem: view2,\n                attribute: secondAttribute,\n                multiplier: 1,\n                constant: value\n            )\n            ancestor.addConstraint(constraint)\n            constraints.append(constraint)\n        }\n        return GroupConstrainer(view: view, constraints: constraints, chain: constraints)\n    }\n}\n\nextension ViewConstrainer {\n    @discardableResult\n    public func width(by value: CGFloat) -> SingleConstrainer {\n        constraintSelf(on: .width, value: value)\n    }\n\n    @discardableResult\n    public func width(to view: UIView, by value: CGFloat = 0) -> SingleConstrainer {\n        SingleConstrainer(constrainer: self, group: width(to: [view], by: value))\n    }\n\n    @discardableResult\n    public func width(to views: [UIView], by value: CGFloat = 0) -> GroupConstrainer {\n        align(views: views, by: value, on: .width)\n    }\n\n    @discardableResult\n    public func height(by value: CGFloat) -> SingleConstrainer {\n        constraintSelf(on: .height, value: value)\n    }\n\n    @discardableResult\n    public func height(to view: UIView, by value: CGFloat = 0) -> SingleConstrainer {\n        SingleConstrainer(constrainer: self, group: height(to: [view], by: value))\n    }\n\n    @discardableResult\n    public func height(to views: [UIView], by value: CGFloat = 0) -> GroupConstrainer {\n        align(views: views, by: value, on: .height)\n    }\n\n    @discardableResult\n    public func size(by size: CGSize) -> GroupConstrainer {\n        GroupConstrainer(constrainer: self, group: [width(by: size.width), height(by: size.height)])\n    }\n\n    @discardableResult\n    public func size(to view: UIView, by value: CGSize = .zero) -> GroupConstrainer {\n        size(to: [view], by: value)\n    }\n\n    @discardableResult\n    public func size(to views: [UIView], by size: CGSize = .zero) -> GroupConstrainer {\n        let group = [width(to: views, by: size.width), height(to: views, by: size.height)]\n        return GroupConstrainer(constrainer: self, group: group)\n    }\n\n    @discardableResult\n    public func size(by dimension: CGFloat) -> GroupConstrainer {\n        size(by: CGSize(width: dimension, height: dimension))\n    }\n\n    @discardableResult\n    public func size(to view: UIView, by dimension: CGFloat) -> GroupConstrainer {\n        size(to: view, by: CGSize(width: dimension, height: dimension))\n    }\n\n    @discardableResult\n    public func size(to views: [UIView], by dimension: CGFloat) -> GroupConstrainer {\n        size(to: views, by: CGSize(width: dimension, height: dimension))\n    }\n}\n\nextension ViewConstrainer {\n    @discardableResult\n    public func leading(by value: CGFloat = 0, usesMargins: Bool = false) -> SingleConstrainer {\n        constraintToSuperview(on: .leading, by: value, superviewFirst: false, usesMargins: usesMargins)\n    }\n\n    @discardableResult\n    public func leading(to view: UIView, by value: CGFloat = 0) -> SingleConstrainer {\n        SingleConstrainer(constrainer: self, group: leading(to: [view], by: value))\n    }\n\n    @discardableResult\n    public func leading(to views: [UIView], by value: CGFloat = 0) -> GroupConstrainer {\n        align(views: views, by: value, on: .leading)\n    }\n\n    @discardableResult\n    public func left(by value: CGFloat = 0, usesMargins: Bool = false) -> SingleConstrainer {\n        constraintToSuperview(on: .left, by: value, superviewFirst: false, usesMargins: usesMargins)\n    }\n\n    @discardableResult\n    public func left(to view: UIView, by value: CGFloat = 0) -> SingleConstrainer {\n        SingleConstrainer(constrainer: self, group: left(to: [view], by: value))\n    }\n\n    @discardableResult\n    public func left(to views: [UIView], by value: CGFloat = 0) -> GroupConstrainer {\n        align(views: views, by: value, on: .left)\n    }\n\n    @discardableResult\n    public func trailing(by value: CGFloat = 0, usesMargins: Bool = false) -> SingleConstrainer {\n        constraintToSuperview(on: .trailing, by: value, superviewFirst: true, usesMargins: usesMargins)\n    }\n\n    @discardableResult\n    public func trailing(to view: UIView, by value: CGFloat = 0) -> SingleConstrainer {\n        SingleConstrainer(constrainer: self, group: trailing(to: [view], by: value))\n    }\n\n    @discardableResult\n    public func trailing(to views: [UIView], by value: CGFloat = 0) -> GroupConstrainer {\n        align(views: views, by: value, on: .trailing)\n    }\n\n    @discardableResult\n    public func right(by value: CGFloat = 0, usesMargins: Bool = false) -> SingleConstrainer {\n        constraintToSuperview(on: .right, by: value, superviewFirst: true, usesMargins: usesMargins)\n    }\n\n    @discardableResult\n    public func right(to view: UIView, by value: CGFloat = 0) -> SingleConstrainer {\n        SingleConstrainer(constrainer: self, group: right(to: [view], by: value))\n    }\n\n    @discardableResult\n    public func right(to views: [UIView], by value: CGFloat = 0) -> GroupConstrainer {\n        align(views: views, by: value, on: .right)\n    }\n\n    @discardableResult\n    public func top(by value: CGFloat = 0, usesMargins: Bool = false) -> SingleConstrainer {\n        constraintToSuperview(on: .top, by: value, superviewFirst: false, usesMargins: usesMargins)\n    }\n\n    @discardableResult\n    public func top(to view: UIView, by value: CGFloat = 0) -> SingleConstrainer {\n        SingleConstrainer(constrainer: self, group: top(to: [view], by: value))\n    }\n\n    @discardableResult\n    public func top(to views: [UIView], by value: CGFloat = 0) -> GroupConstrainer {\n        align(views: views, by: value, on: .top)\n    }\n\n    @discardableResult\n    public func bottom(by value: CGFloat = 0, usesMargins: Bool = false) -> SingleConstrainer {\n        constraintToSuperview(on: .bottom, by: value, superviewFirst: true, usesMargins: usesMargins)\n    }\n\n    @discardableResult\n    public func bottom(to view: UIView, by value: CGFloat = 0) -> SingleConstrainer {\n        SingleConstrainer(constrainer: self, group: bottom(to: [view], by: value))\n    }\n\n    @discardableResult\n    public func bottom(to views: [UIView], by value: CGFloat = 0) -> GroupConstrainer {\n        align(views: views, by: value, on: .bottom)\n    }\n\n    @discardableResult\n    public func horizontalEdges(leading: CGFloat = 0, trailing: CGFloat = 0, usesMargins: Bool = false) -> GroupConstrainer {\n        let group = [self.leading(by: leading, usesMargins: usesMargins), self.trailing(by: trailing, usesMargins: usesMargins)]\n        return GroupConstrainer(constrainer: self, group: group)\n    }\n\n    @discardableResult\n    public func horizontalEdges(inset: CGFloat, usesMargins: Bool = false) -> GroupConstrainer {\n        horizontalEdges(leading: inset, trailing: inset, usesMargins: usesMargins)\n    }\n\n    @discardableResult\n    public func verticalEdges(top: CGFloat = 0, bottom: CGFloat = 0, usesMargins: Bool = false) -> GroupConstrainer {\n        let group = [self.top(by: top, usesMargins: usesMargins), self.bottom(by: bottom, usesMargins: usesMargins)]\n        return GroupConstrainer(constrainer: self, group: group)\n    }\n\n    @discardableResult\n    public func verticalEdges(inset: CGFloat, usesMargins: Bool = false) -> GroupConstrainer {\n        verticalEdges(top: inset, bottom: inset, usesMargins: usesMargins)\n    }\n\n    @discardableResult\n    public func edges(\n        leading: CGFloat = 0,\n        trailing: CGFloat = 0,\n        top: CGFloat = 0,\n        bottom: CGFloat = 0,\n        usesMargins: Bool = false\n    ) -> GroupConstrainer {\n        let group = [horizontalEdges(leading: leading, trailing: trailing, usesMargins: usesMargins),\n                     verticalEdges(top: top, bottom: bottom, usesMargins: usesMargins)]\n        return GroupConstrainer(constrainer: self, group: group)\n    }\n\n    @discardableResult\n    public func edges(horizontalInset: CGFloat, verticalInset: CGFloat, usesMargins: Bool = false) -> GroupConstrainer {\n        edges(leading: horizontalInset, trailing: horizontalInset, top: verticalInset, bottom: verticalInset, usesMargins: usesMargins)\n    }\n\n    @discardableResult\n    public func edges(inset: CGFloat, usesMargins: Bool = false) -> GroupConstrainer {\n        edges(leading: inset, trailing: inset, top: inset, bottom: inset, usesMargins: usesMargins)\n    }\n}\n\nextension ViewConstrainer {\n    @discardableResult\n    public func centerX(by value: CGFloat = 0) -> SingleConstrainer {\n        constraintToSuperview(on: .centerX, by: value, superviewFirst: false, usesMargins: false)\n    }\n\n    @discardableResult\n    public func centerX(to view: UIView, by value: CGFloat = 0) -> SingleConstrainer {\n        SingleConstrainer(constrainer: self, group: centerX(to: [view], by: value))\n    }\n\n    @discardableResult\n    public func centerX(to views: [UIView], by value: CGFloat = 0) -> GroupConstrainer {\n        align(views: views, by: value, on: .centerX)\n    }\n\n    @discardableResult\n    public func centerY(by value: CGFloat = 0) -> SingleConstrainer {\n        constraintToSuperview(on: .centerY, by: value, superviewFirst: false, usesMargins: false)\n    }\n\n    @discardableResult\n    public func centerY(to view: UIView, by value: CGFloat = 0) -> SingleConstrainer {\n        SingleConstrainer(constrainer: self, group: centerY(to: [view], by: value))\n    }\n\n    @discardableResult\n    public func centerY(to views: [UIView], by value: CGFloat = 0) -> GroupConstrainer {\n        align(views: views, by: value, on: .centerY)\n    }\n\n    @discardableResult\n    public func center(x: CGFloat = 0, y: CGFloat = 0) -> GroupConstrainer {\n        GroupConstrainer(constrainer: self, group: [centerX(by: x), centerY(by: y)])\n    }\n\n    @discardableResult\n    public func center(to view: UIView, byX x: CGFloat = 0, byY y: CGFloat = 0) -> GroupConstrainer {\n        center(to: [view], byX: x, byY: y)\n    }\n\n    @discardableResult\n    public func center(to views: [UIView], byX x: CGFloat = 0, byY y: CGFloat = 0) -> GroupConstrainer {\n        GroupConstrainer(constrainer: self, group: [centerX(to: views, by: x), centerY(to: views, by: y)])\n    }\n}\n\nextension ViewConstrainer {\n    @discardableResult\n    public func align(on attribute: NSLayoutConstraint.Attribute, to view: UIView, by value: CGFloat = 0) -> SingleConstrainer {\n        SingleConstrainer(constrainer: self, group: align(views: [view], by: value, on: attribute))\n    }\n\n    @discardableResult\n    public func alignEdges(to view: UIView) -> GroupConstrainer {\n        GroupConstrainer(constrainer: self, group: [\n            align(on: .leading, to: view),\n            align(on: .trailing, to: view),\n            align(on: .top, to: view),\n            align(on: .bottom, to: view),\n        ])\n    }\n}\n\nextension ViewConstrainer {\n    @discardableResult\n    public func horizontalLine(_ view: UIView, by value: CGFloat = 0) -> SingleConstrainer {\n        SingleConstrainer(constrainer: self, group: horizontalLine([view], by: value))\n    }\n\n    @discardableResult\n    public func horizontalLine(_ views: [UIView], by value: CGFloat = 0) -> GroupConstrainer {\n        makeLine(views: views, by: value, on: .trailing, and: .leading)\n    }\n\n    @discardableResult\n    public func verticalLine(_ view: UIView, by value: CGFloat = 0) -> SingleConstrainer {\n        SingleConstrainer(constrainer: self, group: verticalLine([view], by: value))\n    }\n\n    @discardableResult\n    public func verticalLine(_ views: [UIView], by value: CGFloat = 0) -> GroupConstrainer {\n        makeLine(views: views, by: value, on: .bottom, and: .top)\n    }\n}\n"
  },
  {
    "path": "agents.md",
    "content": "# QuranEngine\n\n## Make commands\n\nThe Makefile exposes a few helpful commands:\n\n1. Use `make build` to compile `QuranEngine-Package` (or override with `make build TARGET=NoorUI`).\n2. Use `make test` for package tests, also honoring `TARGET` to point at another scheme/target.\n3. Use `make build-example` to build the Example app.\n4. Run `make format-lint` for SwiftFormat checks.\n\nKeeping these commands green locally should keep the CI workflow green as well.\n"
  },
  {
    "path": "codecov.yml",
    "content": "coverage:\n  status:\n    project: off\n    patch: off"
  }
]